Sustainable Python backend
Invest in a product development only if it can be maintained and extended in the future.
Sometimes we get requests to support a product that was previously developed by a freelancer or a service company. Often it gets hard to add new feature without rewriting the whole backend.
And it is hard to change product owner mindset that sometimes code and infrastructure was developed is a garbage.
At Alvin we created an approach we take for each software product we develop, it is a Sustainable development.
This page outlines how we approach a backend development to delivery product to the enduser as fast as possible but in the same time to be ready for the growth.
You need it faster to test a product market fit? Yes, delivering software to the customers frequently is one of the keys to success.
We know many startup when they got big one of the first things they try to address is a software debt. They do it instead of using resources for the growth or new features to bit the competition.
It is not worth it to create a software debt when it can be avoided.
What we cover
To be ready for technical challenges your product will have during growth process, you should have all basics covered.
Business logic is the most important part of any backend and it is defined by a code and data structure. Database is a hard thing to scale as well. We combine relational database like MySQL or PostgreSQL to define business entities required for application with fast in-memory data storage like Redis to avoid resource consuming data queries. And Redis can be easily scaled horizontally.
Backend should have an interface so client applications can communicate with it. With API-first design you will be prepared to have mobile and web apps consume functionality. Django Rest Framework (DRF) is a powerful and flexible toolkit for building web APIs. We use it for the majority of our projects.
Real-time operations executing concurrently bing amount of tasks. This can be image processing, message delivering or status updates.
To start with, it should be reliable. But reliability can be measured differently on a different scale.
Backend covered with test is a must have. This will allow you to develop new features without breaking old ones.
Less time spent on deployment - more time can be dedicated to test coverage or feature development.
Does it take longer?
Yes, it takes more time to set it up on the configuration stage and test driven development is more resource heavy. But it saves time in the long run when bugs you need to solve with the standard approach are not appearing.
Continuous deployment just works and you do not need to spend any time to deliver a new feature to a user base.
We learned a good lesson before our Sustainable days and now we work exclusively with the best practices we developed.
Let’s use a survey dashboard we built for the Integral Talented System as an example product.
By design, the first iteration of the product was managing single survey for one customer. But our client decided to build a generic product where they can add different surveys for multiple customers.
As a result, we faced the challenge to keep current software and serve the same data to the current users but to completely change calculation on the backend.
Django project was covered with test so we were able to easily change the logic but been sure it does not change what current users see when they retrieve data.
API-first design was used in this case with the Angular application consuming endpoints on the frontend. This solution is easily extendable to a mobile app client using the same interfaces to get and visualize data.
You won’t regret it — sustainable development is a key to right investment in a software product.