Encore is all about building better software, faster. We believe this is important because in the software development industry we have a productivity problem. Before explaining how Encore helps, we need to better understand the problem.
In recent years we’ve learned a lot about how to build software applications that gracefully scale to millions of users. This has been unprecedented success and the “C10K problem” is a distant memory. The approach we’ve taken is to make our applications horizontally scalable — so that we can add more capacity by deploying the software onto additional servers.
We also found that we can improve reliability and isolate failures by breaking the application into smaller pieces that are deployed independently and communicate with each other. This is often called the Service Oriented Architecture (SOA) paradigm. The “microservices” paradigm can be viewed as a special case of SOA, with the additional belief that “services should be small”. Most tech companies these days are using some form of SOA, whether it be a strict “microservices” philosophy or not.
But while these approaches have drastically improved our ability to scale software — in terms of both number of users and the size of the engineering organization — they have also lead to a large decrease in developer productivity. This is because distributed systems require substantial investment in infrastructure to achieve the desired reliability and scalability characteristics, and this investment comes at the expense of software development usability and productivity.
Reliability & Scalability The infrastructure investments to achieve reliability and scalability for a distributed system are massive. These days major cloud providers often provide the infrastructure building blocks, so these problems are easier to solve than before, but it remains the case that it is up to the software developer to manually integrate them: setting up build & deploy systems, handling credentials, setting up databases by hand, integrating distributed tracing frameworks, and so on.
Distributed systems are also much more complex to reason about, and many types of incidents are much more common in a distributed systems, including resource exhaustion, thundering herds, cascading failures, and more.
Usability In addition to the reliability challenges, the developer experience also suffers in several respects:
As it turns out, most of the problems above are not fundamental challenges but only rooted in our relatively primitive tooling. Encore is designed to improve the productivity through vastly improved tooling.
With Encore you automatically get world-class infrastructure. Never spend another minute setting up things like build or deployment pipelines, provisioning databases, integrating distributed tracing, or installing monitoring systems. Spend your time where it matters: building your product.
Avoid boilerplate by writing API calls as regular function calls. The Encore compiler turns it into proper HTTP requests behind the scenes. Get compile-time errors if you change the API or pass in the wrong data, and find all callers of your endpoint without worrying that you missed one.
Getting a new backend running in production is a time-consuming affair for the most experienced backend engineers, and a nightmare for the less experienced. With Encore you get up and running in production in minutes, regardless of experience.