The Back-end is the underlying tech layer that supports the data processing and storage. Usually hidden from everything, it is what handles most of the business logic in any application.
Our ultimate goal is to create beautiful experiences, but the quality of the Back-end is as important as any other area. A solid Back-end serves as an excellent base for a quality Front-end application.
What makes a good API?
A great API is a service that has enough documentation to be understood, is not necessarily complex, and is predictable because you don't need to read an entire encyclopedia to use it. A great Back-end is a good API, maintainable and simple, meaning that changes should be possible without too many constraints.
The frontier between Front-end and Back-end
Where do we design the separation between the Back-end and Front-end? This is a hard one to answer… We do it based on tech stack, purpose, and many other project-specific aspects. The Front-end's Back-end serves more than anything related to the state of the Front-end or cosmetic behavior. Sometimes our front-ends do have server code, but we call this a back-end-for-front-end, and we consider this a part of the Front-end scope.
We are flexible, but we often have entirely separate applications with their own code, deployment, and team. This allows us to have independent responsibilities, split the workload (while creating some in the process), and keep the quality to a maximum.
We are not technology chasers. We try to keep complexity to a minimum. It's much more gratifying to build something that works well, is agile, and needs as little maintenance as possible vs complex systems that require all your energy.
We also really like back-end-less software – if we can avoid having more pieces in a project, why not ditch them completely? This obviously depends on the project, and we are always eager to test new tools, especially if they help us reduce the complexity of building and managing the software.
We are always experimenting with different tech, to see how can it helps us ship our products. We just don't settle with something because we are used to it, and give ourselves lots of freedom to explore and learn different things.
Our primary choices for technology are:
Elixir and the Phoenix web framework.
Elixir does have dense syntax, but it works really well given that all the tools built around it are one of the best in the market.
We love Postgres, it handles everything we throw at it. It performs surprisingly well and, most of the time prevents us from having to use specialized databases.
For communication, we really like GraphQL, not only because of its endless possibilities but also because of the great tooling and integrations built around it.
From time to time, we also use the following technologies:
Python is our go-to scripting language, we have done external work and a few projects with it. For example, our slack-bot, office door, and doorbell are powered by Python, check out the blog post We built the coolest office door and doorbell setup.
We have also built an interesting CLI tool to easily sync environment variables stored in 1password: 1password-secrets on GitHub.
We have used Node.js multiple times in the past, from full-fledged backends with the Nest.js framework, to command-line utilities. Furthermore, Significa’s Front-end developers are quite familiar with Node.js given that the technologies we use have server-side code (Next.js and Sveltekit).