MVP in Python for startups — a suitable choice?

Michał Moroz
Makimo On Software Development
7 min readMay 16, 2023

--

One of the early steps of building a software product is choosing the right technology for the task. That way, one can leverage this right choice for cost optimization or ease of further development, thus speeding up the tempo of product development. Both of these positive outcomes improve the product’s time to market.

The questions are:

  • Is Python a viable platform for an MVP?
  • What are the right choices for using Python in MVP development?

What is an MVP?

An MVP is an abbreviation for Minimum Viable Product, a version of the application with only the most critical features available. That formulation of the problem helps to validate startup ideas and see their market potential. Ideally, the application has as few features as possible yet is rock-solid in what it does. At this stage, it’s safe to assume that nobody understands the software product’s future direction.

For the consumers of the software product, it means the software product they will use is limited in functionality but not in quality. That’s an important distinction, as customers care about the software being reliable from day one, even if that software doesn’t suit them 100%. It’s better to have a delightful experience and a small product than an application with many features but a frustrating experience.

In one of the rules of thumb I use in Makimo, MVP applications approximate 1000 hours of work, which means that you would expect a working prototype in 2–4 months, depending on the level of preparation and discovery at the start of cooperation.

Methodology

Recently I’ve analyzed 224 repositories of code, 50 of which were written using Python. These contain the commercial and internal projects we’ve been working on in recent years, following our transition from BitBucket to GitHub in early 2020.

This is an ongoing project of mine to gain more insight into the types and shapes of technological solutions we provide to our customers.

For the sake of this article, I chose a no-framework approach. Instead of defining project categories from the top down, I sought to discover them as I gathered more information. Here’s what I found.

Is Python suitable for an MVP?

The short answer is — yes. We’ve written enough commercial applications to reach that conclusion. Python is our language of choice for most new projects we use. We’ve confirmed the feasibility of that for the following industries:

  • Data processing and analysis, including AI/ML programming
  • Portals and web applications for record storage and management
  • Integrations with other software platforms
  • Custom eCommerce platforms (see the case study)
  • Big data analytics
  • Financial applications
  • Industrial data processing
  • Knowledge management and document processing
  • APIs and backend applications for mobile applications
  • Visualizations and scoring systems in sports

From that, I can tell that I’m confident that Python is a strong general choice, with practical uses in web applications, data processing, and AI. It’s also one of the more popular languages in use, which is also a bonus, as it reduces the risk of a limited talent pool.

Now, let’s explore options available that leverage Python as the right choice. The next sections describe a selection of the potential uses that you might find interesting.

Django MVP — record management

One of the oldest and most mature web frameworks to date and one I’ve been deeply involved with from its inception. I wrote my first commercial Django application using version 0.9.6 in 2008. As of 2023, the stable version is 4.1.6.

The strength of this solution lies in its ability to manage records. There are lots and lots of facilities for all kinds of structured data, and we’ve used it most successfully in small to medium-traffic applications that manage different types of data in a database.

The main uses of Django are:

  • web portals, especially with non-typical kinds of data — as an example, a university portal https://fizyka.p.lodz.pl/en/ storing a catalog of scientific publications of its staff
  • document management, knowledge management, data management, and dashboards
  • electronic document circulation and document workflows (e.g., mediation platforms)
  • ERPs and resource management applications
  • internal web applications
  • back end applications for mobile devices

The advantages of Django are:

  • record-storing and editing
  • a “free” administration panel for record management
  • facilities for batch editing records
  • SEO friendliness
  • quickly building APIs for record management

The definition of record management can be stretched very far and to high loads — it’s worth saying that parts of Instagram and Pinterest are written using the Django framework.

As a web framework architecturally built around the idea of record management, it has a few disadvantages, too. Django really embraces a development style where the application being built has a single, strong purpose and a reason for being. That’s great for MVP, a little less so for complex corporate business applications where a lot of business goals intermingle with each other, and multiple teams are working on satisfying these goals.

The second disadvantage is when you need to handle rich, real-time updates for parts of the application. A good example here is reactive systems for industrial event processing. For that purpose, we’ve started experimenting with the Elixir language and Phoenix framework, and it seems to be a good fit.

A note worth mentioning is that all of these can be managed by a mature team of developers and setting the right architectural drivers early in the development.

Flask + Microservices Architecture MVP = complex, multi-purpose applications

A few years ago, we started experimenting with more scalable approaches to development. The design we’ve arrived at is a combination of three elements:

  1. Flask applications for backend development and API
  2. Database per service pattern — enabling on-demand microservice decomposition
  3. Frontend and mobile applications use these APIs and present multiple interfaces (e.g., admin, buyer, seller, mobile) to the end users.

The main uses of such architecture are:

  • Financial applications, including transactional management, payment processing, auctions, trading, or all of the above
  • Multi-tenant applications (for B2B clients) with feature differences between clients
  • Workflow automation and business process optimization
  • eCommerce platforms – see a case study
  • Scalable API designs for both frontend and mobile applications
  • Composable architecture

The upfront costs for such an application are usually higher than Django, but this architecture scales well, leverages independent teams working on different parts of the system, and can make good use of the rich cloud-native offerings of AWS or other cloud providers.

Such architecture can work for multiple years, and there are fewer risks that scaling the number of customers would meet a hard-to-overcome limit in system throughput. That also means B2B customers, where the infrastructure, features, or integrations need to be customized for each of them.

If I were working on a complex or composable architecture that needs to satisfy multiple business goals and stakeholders, Flask would be my choice, even for the MVP stage. For record management, I’d still go with Django.

When it comes to the cost of such an application, I would add some markup to the rule of thumb I stated earlier. It’s hard to say how much. When it comes to such multi-purpose, multi-stakeholder applications, we’re entering an area where the cost depends on too many factors to provide sensible numbers without analysis.

I would also discuss with the potential client how to satisfy at least one group of stakeholders as soon as possible so that the application will start delivering value even if it’s not anywhere near its completion.

Tensorflow, YOLO, and similar libraries — Artificial Intelligence and Machine Learning

AI recently has sure processed many people’s expectations — and it’s a hot topic nowadays. We’ve been using Python AI libraries to enhance the capabilities of what traditional software development can do and have been satisfied with the results so far.

The main uses of such solutions are:

  • Decision support systems — learning from past data
  • Computer vision applications, such as waste reduction in manufacturing processes
  • Analysis of large unstructured sets of data
  • Natural language processing

Python’s programming language makes it fast to develop such solutions due to its relative simplicity in writing programs and extensive support from major players in the AI industry. It also integrates well with other uses found in this article — so you can build an internal application that processes data, integrates it with other services, and does machine learning on it.

Data processing, Pandas, and integrations — data automation

The last major use of Python language is what I call the glue between other systems and applications. For example, it’s easy to develop a module integrating an eCommerce API with another API that handles marketing automation.

The main uses here are:

  • service integrations, enabling business composability on top of already existing APIs
  • automatic processing of spreadsheet data — providing summaries and report generation
  • getting data from thousands of surveys, handling missing data
  • extracting useful insights from big sets of data
  • automating workflows

The advantages of Python for startups when it comes to automation are the following:

  • reducing initial MVP costs by using other services and integrating them to produce value
  • quick prototyping, often faster than in other languages due to good data analysis packages (Pandas, Anaconda)
  • reduction of repetitive tasks, allowing startup teams to focus on something else.

The prototyping aspect here is a benefit that shouldn’t be missed. In my career, I’ve written a lot of scripts automating certain tasks, which took me a couple of hours or days each. Even for this article, I’ve used Python to automate the discovery process, show me all the projects we’ve been working on recently, and generate a summary that was a big help in writing this article.

Conclusion — Is Python a suitable candidate for a startup’s MVP development?

MVPs in Python are possible. The language and its ecosystem are mature and popular enough that its applications are a good choice across industries and across disciplines. From data science to building backend applications, the language is a good overall choice when it comes to building systems for many industries and purposes.

Python is certainly not a one-stop shop for all developers alike. For frontend developers, JavaScript or TypeScript is used, and there are a lot more languages available for backend development, too — all with their pros and cons. I hope this article will shed some light on one of the technologies and possible business use cases for them.

And if you didn’t find your particular case in the examples above, be assured that there are other options as well as those mentioned in this article. Do not hesitate to contact me then. I’m easily available for a chat at my e-mail address: michal@makimo.pl, and I will gladly answer any of your questions.

--

--

Michał Moroz
Makimo On Software Development

Software engineer, CIO of Makimo, writing on software development and business impact