Moving from Django and Rails to Encore for Go microservices
Transitioning from Django or Rails to distributed Go systems often presents challenges in service discovery and deployment. Encore simplifies this process by using static analysis to automate infrastructure provisioning, database management, and API documentation.
Django handles 15 to 25 percent more requests per second than Rails in some benchmarks. Python allows teams to keep AI logic close to the application layer, which reduces the latency found in Rails when it must call external AI services. I found that teams moving from these frameworks to distributed Go systems often struggle with microservicilities like service discovery, authentication, and distributed tracing. To build a microservices architecture, a service must implement its own API, handle service discovery, manage its own deployment pipeline, and ensure it can scale up or down independently.
Encore handles everything.
If you want to move fast, you should skip the manual YAML configuration. Encore analyzes your Go or TypeScript code to provision databases, pub/sub topics, caches, and cron jobs. This removes the need to write complex Docker Compose manifests or manage separate Terraform files. For teams leaving Rails, the transition from a convention-over-configuration model to a distributed model involves significant changes in how they handle data and service communication.
The Development Experience
The local development dashboard provides a live log of all requests. It includes traces and an API explorer. I use the architecture diagram to see dependencies. This tool provides a database explorer. The tool generates API documentation by parsing TypeScript type definitions.
One developer noted that the code generation magic feels like it takes control away from the user. This opinion highlights the friction for those who prefer writing boilerplate to maintain full control. I also found that Encore’s TypeScript backend follows an opinionated code structure, which requires refactoring existing code to fit its conventions.
It works.
When you run the application via the command line, Encore provisions a local PostgreSQL database, runs migrations, and opens a development dashboard at localhost:9400 to show request traces, API documentation, and a full database explorer.
You should understand that Encore’s API documentation remains accurate because it uses static analysis. The API explorer behaves similarly to Postman but comes pre-populated with all your endpoints and expected fields. It allows you to save requests and share them with your team. This reduces the time spent on manual testing.
Does the abstraction hide too much from the developer?
Deployment and Portability
Deployment targets for Encore include Encore Cloud, AWS, and GCP. Encore generates standard CloudFormation for AWS and Deployment Manager for GCP. This ensures the underlying resources remain first-class cloud constructs that you can manage with standard tools.
| Feature | Encore | Nitric | Shuttle |
|---|---|---|---|
| Languages | TypeScript, Go | TS, Python, Go, Java, .NET, Dart | Rust |
| Infrastructure | Code-based | Resource declaration | Macro-based |
| Cloud | Encore Cloud, AWS, GCP | AWS, GCP, Azure | Shuttle Cloud |
| Secrets | Managed | Environment | SecretStore |
Nitric provides better cloud portability for teams needing to move between AWS, GCP, and Azure without changing code. Shuttle provides the simplest deployment for Rust developers using macro annotations.
I found that Encore’s secret() primitive fetches secrets from a managed store separate from the code. This prevents secrets from being committed to a repository. In comparison, Nitric uses a command to start a local server that emulates cloud resources.
Migration remains difficult.
Large-scale migrations from a Rails monolith to a distributed system can be expensive. A migration for a large enterprise system can cost between $180,000 and $520,000 and take seven to fourteen months. This is because developers must rewrite ActiveRecord implementations into new data models.