How to build an MVP: the first version of your product without burning through the budget
Blog
Tutorials

How to build an MVP: the first version of your product without burning through the budget

Hypothesis, scope, priorities, the list of things put off, measuring after launch and deciding whether to extend the code or rewrite it

DualFroz - VulCode CEODualFroz - VulCode CEO·30 September 2026·24 min read

To build an MVP, a minimum viable product, you start from the question it has to answer, not from a list of features. One group of users, one path from entry to result, and one number that will tell you, after a set time, whether to keep going. Everything that is not needed to measure that number goes on a "not now" list.

The budget for a first version usually gets burned in one of two ways. The first is building too many features before the product sees its first real user. The second is less obvious: cutting corners in places that cannot be fixed cheaply later, such as the data model, permissions or payment handling.

In short
  • An MVP is a tool for learning about users, not a cut-down version of the target product. It starts from a hypothesis that may turn out to be wrong.
  • The scope is set by one group of users and one path. Every feature the path does not break without goes on the "not now" list, with the reason written down.
  • Save on looks, the admin panel, automation and scale. Do not save on the data model, permissions, payments, backups or legal paperwork.
  • Set the number, the threshold and the review date before launch, and keep part of the budget for changes after launch.
  • Rewriting everything is rarely a good decision. Replacing the code module by module usually pays off better.

What an MVP is and what it is not

Eric Ries, who popularised the term, defined it in 2009 as the version of a new product that allows a team to collect the maximum amount of validated learning about customers with the least effort. The key word in that definition is "learning". It is the effort that should be minimal, not the product. An MVP that works but settles nothing was simply a cheaper project, not an experiment.

In practice, the MVP label covers things that answer completely different questions. Before you ask for a quote, check what you actually need:

MVP versus prototype and proof of concept

FormWhich question it answersWho uses it
Wireframe or clickable prototypeDo people understand how the product works and what to do in itA few people in interviews, with no real data
Proof of conceptCan it be built technically, for example can data from one system be processed in the time neededThe team, nobody outside
MVPWill people use the product for a real task, and will they pay for itA first, narrow group of real users
First commercial versionDoes the product work in the wider market, and how should it be soldAll customers in the target group

Mixing these forms up costs you either way. A clickable prototype called an MVP gives you opinions but no data on behaviour, because nobody actually gets anything done in it. A full commercial version called an MVP eats the budget meant for learning and leaves no money to change direction.

An MVP does not always require code. Some hypotheses can be tested with a page with a sign-up form, or with a service delivered by hand that the customer pays for before any automation exists. Code is needed when the automation itself is the product's value, when the test requires real payments from many users at once, or when a business customer has to connect the product to its processes in order to evaluate it.

Before you build an MVP, write down a hypothesis that can fail

A hypothesis is a single sentence that can be tested and that may turn out to be false. A handy template looks like this: "We believe that [who] will do [what], because [what problem]. We will consider this confirmed if by [date] at least [number] [of whom] do [a specific thing]".

Throughout the article we will use one example, invented for this guide. Imagine a product for small language schools that currently take enrolments by phone and get paid by bank transfer. The hypothesis could be: "We believe that owners of small language schools will move course enrolments to a system with online payment, because keeping track of payments by hand takes their time and causes mistakes. We will consider this confirmed if, within eight weeks of launch, at least five schools take enrolments for a paid course through the system".

The numbers in this example are arbitrary. What matters is that the sentence contains a specific group, a behaviour, a threshold and a date. "We will check whether schools are interested" is not a hypothesis, because it cannot be disproved. There is always some interest.

Every product rests on several assumptions at once: that the problem exists, that the solution removes it, that people will pay for it, that you can reach them, and that the product can be built at a reasonable cost. An MVP should test the riskiest and least certain assumption. If the biggest unknown is whether schools want online payments, there is no point building an advanced class timetable first.

➜
Tip

Before you commission the build, talk to a few people from the target group and ask how they solve the problem today and what it costs them. Do not ask whether they would use your product, because almost everyone will say yes out of politeness. Ask about what they already do, because past behaviour tells you more than a promise about the future.

How to build an MVP: one group, one path, one result

The scope of the first version follows directly from the hypothesis. If the hypothesis is well written, most feature decisions make themselves, because for each one you only need to ask whether the hypothesis can be tested without it.

1
Choose one group of users

In the example, these are small language schools with a single location, not all educational institutions. A narrower group means fewer exceptions to handle and a clearer result.

2
Describe the path from entry to result

The school creates an account, adds a course with a date and price, and sends a link. The student opens the link, signs up and pays. The school sees the list of sign-ups and payments.

3
Check every step

For each one, ask whether the path breaks without it. If not, the step goes on the "not now" list.

4
Replace automation with manual work

Anything a person can do for the first few weeks, for example setting up accounts for schools or sending summaries, a person does.

5
Write the "not now" list with reasons

For every feature you put off, note why it is not there and what signal from users would bring it back.

6
Set the launch date

The date is fixed and the scope changes. If something is not ready in time, it drops out of the first version instead of pushing back the launch.

Step six is the hardest, because during the build there is always a feature that seems essential. Every week the launch slips is a week in which you pay for developing the product without knowing whether it is heading in the right direction.

What an MVP should include and what you put off

The "not now" list is just as important as the feature list. It shows the contractor where the boundaries of the scope are, and reminds you during the project that putting something off was a decision, not an oversight. For the example product it could look like this:

Example MVP scope

FeatureIn the first versionWhy
School account and adding a courseYesWithout it the path does not exist
Student sign-up and online paymentYesThis is the behaviour the hypothesis tests
List of sign-ups with CSV exportYesThe school has to work with this data from day one
Email notification of a sign-upYesWithout it the school does not know anything has happened
InvoicesIssued in the software the school already usesInvoicing is not the hypothesis being tested
Mobile appNo, a website that works on a phoneA browser is enough to test the hypothesis
SMS notificationsNoEmail is enough for the test, SMS costs money per message
Reports and chartsNo, export to a spreadsheetWith a few schools, a report can be prepared by hand
Multiple locations and teacher accountsNo, but the data model is ready for itExpansion is likely, so it must not require a rebuild
Discount codes and referralsNoWithout traffic you cannot tell whether they work
English versionNoThe target group for the first version is Polish-speaking

Note the row about locations. The feature is not there, but from day one the data model assumes that courses belong to a school and a school can have more than one place where classes are held. At the database design stage this costs little, and it saves you migrating real customers' data a few months later.

The most common argument for adding a feature to an MVP is "it's only one day of work". Even if that is true, the feature then has to be tested, maintained and taken into account with every change. It also blurs the measurement: if schools start using the product, you will not know whether online payment or discount codes brought them in.

The same logic applies to choosing between a mobile app and a website. If the hypothesis does not concern features available only in an app from an app store, a browser-based MVP will test it more cheaply and quickly. We described when an app store app is really needed in our article mobile app or PWA.

Where to save in an MVP and what not to simplify

The rule is simple: save where changing things later is cheap, and do not simplify where a later change touches real users' data or their money. A button's look changes in an hour. A data model in which it is unclear who a record belongs to takes weeks to change, because you have to move the data, fix the permissions and check every feature that uses it.

Where to cut and where not to

AreaCan be simplifiedDo not simplify
Look and feelA consistent set of simple components instead of polished illustrations and animationsReadability, working on a phone, correct forms and error messages
Admin panelMinimal, with the team doing some operations by handPermissions, meaning who can see whose data
Data modelFewer fields and fewer record typesRelationships and data ownership, for example the school as the owner of courses from day one
PaymentsOne payment provider and the provider's hosted payment pageConfirming payments on the server, based on a notification from the provider
InfrastructureOne server, no automatic scalingBackups with tested restores, HTTPS, security updates
IntegrationsCSV file export and importUnique identifiers that will let you connect other systems later
TestingClicking through the main path by hand before every deploymentAutomated tests for payments and permissions
Legal paperworkShort, clear documents instead of long onesTerms of service, information on data processing, and consent where it is required

Payments deserve a separate word. The browser being redirected back to the store after payment is not confirmation of payment, because the customer can close the browser tab or lose the connection, and the return URL can be opened by hand. The "paid" status should be set by the server once it receives a notification from the payment provider. It is a small amount of extra work, and without it you get orders marked as paid with no money behind them, or paid orders that nobody fulfils.

Legal paperwork is not an add-on for later either. If you provide services by electronic means as part of the product, you must set out terms of service and make them available before the contract is concluded (Article 8 of Poland's Act on Providing Services by Electronic Means). If you collect personal data, and an MVP almost always does, you must provide information about its processing in line with the GDPR. Analytics and advertising tools that store information on the user's device or read it from there generally require the user's prior consent (Article 399 of Poland's Electronic Communications Law). The exceptions include storage necessary to provide the service the user is asking for.

If the product sells to consumers through a website or app, also check the Act on ensuring compliance with the accessibility requirements of certain products and services by economic operators, which has applied since 28 June 2025. As the Polish government's digital accessibility service points out, it does not apply to services offered by microenterprises, but the exemption disappears once the company stops being a microenterprise. Basic accessibility, meaning labelled form fields, keyboard support and sufficient contrast, costs little at the start and much more when added later.

Off-the-shelf services instead of your own code

Not everything in an MVP has to be written. Payments are handled by a payment provider, transactional emails by an external sending service, login can rely on a proven library, and some processes can run in a no-code tool at the start. A rule that works well: buy what is not your competitive advantage, and build what you are testing.

Every off-the-shelf service, however, has three costs worth knowing before you choose:

  • The price grows with usage. A per-user or per-transaction fee is negligible with a few customers, but with a few thousand it can become the biggest item in the budget.
  • Plan limits. The number of records, automations or API calls can stop the product just as it starts to grow.
  • Data export. Logic built in a no-code tool usually cannot be exported, so when you move it has to be recreated in code.

We described the same calculation in more detail in our article admin panel instead of a spreadsheet. For an MVP the conclusion is similar: no-code is a good choice if the hypothesis is about demand rather than the automation itself, and if you assume from the outset that once it is confirmed, the product will be rebuilt from scratch in code.

The MVP budget: building it is only the first part

The most common way to burn the budget is to spend all of it on the first version. The product launches, the first users show what needs to change, and there is no money left for those changes. Yet those changes are the very reason you build an MVP.

Plan the budget in two parts: building a version that will test the hypothesis, and several rounds of improvements after launch, based on what users actually do. If it does not all fit, cut the scope of the first part, not the second part.

This split fits well with different billing models. A first version with a clearly described scope and a "not now" list is suitable for a fixed-price quote, while development after launch, whose scope by definition you do not know, is easier to bill hourly with an agreed cap. We described the differences between these models and the risk on each side in our article fixed price or time and materials.

On top of the build cost come recurring costs that are easy to forget in the first quote: the server, the domain, payment provider fees, the email sending service, paid APIs and security updates. When comparing offers, check that each quote covers the same scope and what is excluded from it. We show how to do that step by step in our article how to read a software house quote.

Keeping the budget under control during the build comes down to a few habits:

  • A working version every week. You see progress in a test environment by clicking through the path, not on slides.
  • Every new idea goes on the "not now" list. It comes back into the scope only if something else drops out.
  • One person on your side makes the decisions. Contractor questions waiting days for an answer drag a project out more than most technical problems.
!
Warning

Every feature added before launch pushes back the moment you find out whether the product makes sense. If the feature list keeps growing and the launch date keeps moving further away, the project has stopped being an experiment and become a build funded on credit against untested assumptions.

How to measure an MVP: number, threshold and date before launch

Before the product launches, write down three things: which number you are watching, what threshold you will treat as success and when you will assess it. Then add what you will do for each outcome. Without these notes any result can be read as encouraging, because there is always some line going up on a chart.

Some numbers look good in a presentation but do not answer the question in the hypothesis.

MVP metrics

MetricWhat it tells youThe trap
Sign-upsWhether the product description attracts the right peopleSays nothing about whether the product works
Activation, meaning the first run through the main pathWhether people get to the valueThe definition has to be strict, for example "the school accepted its first payment", not "logged in"
Return visits in the following weeksWhether the product is needed regularly, not just onceWith few users, a single person moves the result a lot
Payment or a binding commitmentWhether the value is worth moneyA free pilot does not answer this question
Time to first resultHow much friction there is on the pathAn average hides the people who got stuck and gave up
Cancellations and the reasons for themWhat is not workingWithout a conversation you know only the number, not the cause

With an MVP the numbers are small, and you have to account for that honestly. If the product has fifteen active users, one person is almost seven percentage points. A retention chart from a group like that tells you more about specific people than about a trend. That is why, with a first version, quantitative measurement is always supplemented by conversations. It is worth talking in person to every user who dropped out and every user who uses the product more often than the rest.

The most reliable data for assessing an MVP comes from the product's own database. Events such as creating an account, publishing a course or a confirmed payment are recorded by the server, so they do not depend on ad blockers or cookie consent. Browser analytics requires the consent mentioned above and will not see some users. It is useful for finding where people abandon the path, but to assess the hypothesis a few database queries once a week are usually enough.

After launch: extend, change direction or close

After the set time, you compare the result with the threshold. A clean "yes" or "no" is rare, but the patterns repeat often enough that you can map them to decisions in advance:

MVP result and next step

ResultWhat it usually meansNext step
Threshold exceeded, users come backThe hypothesis was confirmedReview the "not now" list, tidy up the code, plan the next version
Many sign-ups, few activationsThe promise attracts people, but the path fails or the product does something other than the description promisesTalk to people who dropped off, fix the path, not new features
Activation happens, no return visitsThe need is one-off or the value is too smallCheck whether another group has this need more often
They use it but do not payThe value does not justify the price, or someone else should be payingTest a different price or a different payer, for example a company instead of an individual
Hardly anyone reaches the product at allA reach problem, not a product problemChange the acquisition channel before changing the product

Closing a project after the MVP does not mean the budget was wasted. An MVP that showed the main assumption was wrong did its job for a fraction of the cost of the full product. The wasted budget is the one after which you still do not know whether the assumption was true, because nobody wrote down a threshold or a date.

With an in-between result, a common mistake is to keep adding features in the hope that one of them will tip the balance. If people are not getting through the main path, another feature next to it will not change anything.

When to rewrite an MVP and when to extend the existing code

A first version is allowed to be written faster and less carefully than the target product. Ward Cunningham described this in 1992 with the debt metaphor, which gave us the term technical debt: shipping first-time code is like going into debt, which speeds up work as long as it is paid back quickly. When nobody pays it back, every subsequent change pays interest in the form of longer work and new bugs.

The natural reaction to growing debt is the idea of rewriting everything from scratch. In 2000 Joel Spolsky called rewriting software from scratch the single worst strategic mistake a software company can make, using the example of Netscape, where almost three years passed between the release of version 4.0 and the public beta of version 6.0. The old code had been used and tested, and the fixes for bugs found in it are knowledge that is lost in a rewrite.

Between these extremes is the approach Martin Fowler described as the Strangler Fig Application: new code is built alongside the old and gradually takes over more and more functions until the old code is no longer needed. The product keeps working the whole time, and each stage can be checked separately. For an MVP that has proved itself, this is usually the best route.

Extend or rewrite

SignalWhat to do, usually
The code is inelegant, but changes are predictable and do not break other placesExtend it, tidying up as you make further changes
Every change breaks something somewhere else, and there are no testsFirst automated tests for the main path, then tidying up module by module
The data model does not fit the confirmed hypothesis, for example the product has changed its target groupRewrite the data layer with a migration, the rest gradually
The MVP was built in a no-code tool and is hitting its limitsRebuild in code from scratch, but with a planned data migration and a period of running both in parallel
The product is slowMeasure first, because the cause is usually specific queries or missing indexes, not the choice of language
The technology is no longer supported, or nobody wants to work on itReplace modules gradually, starting with the ones that change most often

One case deserves a warning: rewriting the product before the hypothesis has been tested. If the MVP has not yet answered its question, rewriting the code is building a second MVP with no new knowledge. You rewrite code when you know what it should do, not in order to find out.

When you do replace part of the system, keep the URLs and interfaces that users and other systems rely on, and move the data as a dry run first, on a copy. Replacement then becomes a series of small, reversible steps rather than a single day on which everything has to work.

Code, rights and documentation: so the MVP can be developed with anyone

An MVP that proves itself will be developed for years, sometimes by a different team from the one that built it. So however modest the first version, a few things should belong to you from the start:

  • The code in a repository you have access to. With the full change history, not as an archive handed over at acceptance.
  • The economic copyright to the code. Transferred to you in writing, with the fields of exploitation (pola eksploatacji, the specific uses the transfer covers under Polish copyright law) listed.
  • Service accounts in your name. Domain, server, payment provider and email sending service.
  • Documentation. How to run the project from scratch and deploy a change, and alongside that the hypothesis, the "not now" list and the reasons for key technical choices.

Missing any of these does not get in the way on launch day, but it gets very much in the way when you want to change contractor, bring in an investor or sell the product. We finish every project by handing over full rights to the code and documentation, so that further development does not depend on who wrote the first version.

Frequently asked questions about MVPs

How much does an MVP cost?

As much as it costs to build one path for one group of users, plus a budget for changes after launch. The amount is driven mostly by the number of user roles, payments, integrations with other systems and whether the product has to be an app store app or a browser is enough. You will get a reliable quote once you send the hypothesis, a description of the path and the "not now" list. The product name and a list of ideas are not enough, because every contractor will then quote a different scope.

How long does it take to build an MVP?

It is better to turn the question around: set the date by which you want to know the answer, and fit the scope to it. If the first version does not fit, that usually means the scope is not minimal.

Can an MVP look average and have bugs?

It can look modest, but it cannot fail on the main path. If users drop out because the payment form does not work on a phone, the result tells you about a bug, not about the hypothesis.

Does an MVP need terms of service and a privacy policy?

If you provide a service by electronic means, terms of service are mandatory and must be made available before the contract is concluded. If you collect personal data, the GDPR information obligation applies to you, and cookies other than essential ones require consent. The documents can be short, but they must match what the product really does.

What if the MVP does not work out?

Establish which assumption failed: the problem, the solution, the price or the reach. That determines whether you change the group, the path, the price, or close the project. When changing direction, a good part of the code and data from the first version can often be reused.

Where to start

Before you ask anyone for a quote, write on a single page the hypothesis with its threshold and date, the user group, the path step by step and the "not now" list with reasons. That page will be useful with every contractor, because it lets you compare offers on the same scope.

If you would like us to look at such a description, send it through the contact form. We have been building software since 2020, and we describe what working with us looks like from the first conversation to launch on the process page. You will find the scope of our services for web platforms in our Web Platforms offer.