Every AI Project Has One Constraint Nobody Mentions
Why Context, Not Models, Determines Success Executive Summary Every AI project begins with excitement. The conversation quickly turns to mod...
Enterprise-grade healthcare interoperability enabling seamless clinical workflows.
AI-powered healthcare products and intelligent workflow automation.
Build and modernize solutions aligned with India's Ayushman Bharat Digital Mission.
HIPAA-compliant custom platforms for providers, payers, and digital health companies.
Unified commerce platform for inventory, orders, pricing, and omnichannel operations.
AI-powered retail platform connecting POS, inventory, fulfillment, and customer experiences.
Secure payment orchestration with multi-gateway support, reconciliation, and transaction management.
Enterprise-grade healthcare interoperability enabling seamless clinical workflows.
AI-powered healthcare products and intelligent workflow automation.
Build and modernize solutions aligned with India's Ayushman Bharat Digital Mission.
HIPAA-compliant custom platforms for providers, payers, and digital health companies.
Unified commerce platform for inventory, orders, pricing, and omnichannel operations.
AI-powered retail platform connecting POS, inventory, fulfillment, and customer experiences.
Secure payment orchestration with multi-gateway support, reconciliation, and transaction management.
There is a comforting idea in software development that if we understand the problem well enough, we can design the right product before we start building it. Gather the requirements, map the workflows, create the wireframes, agree on the architecture, write the specifications, and then execute the plan.
It sounds disciplined. It is also only partly true.
The first version of a product is almost always built on assumptions. Some will be correct. Others will be incomplete. A few will turn out to be completely wrong once real users interact with the system, real data starts flowing through it, and real operational constraints begin appearing.
That doesn’t mean the team failed to understand the problem.
It means there are things you simply cannot learn until the product exists.
This is particularly true for bespoke software. When you’re building something that doesn’t have an established pattern, there is often no existing product to copy, no mature workflow to benchmark, and no reliable dataset of user behaviour to work from. The product has to be discovered while it is being built.
That is why we don’t think of Version 1 as the finished product.
We think of it as the first meaningful conversation between the idea and reality.
Most software projects begin with a surprisingly small amount of certainty.
A client knows the business problem. The product team understands the desired outcome. Users can describe what frustrates them today. Everyone has a reasonable idea of what the future system should look like.
Then the design process begins.
Requirements are documented. Screens are designed. Workflows are mapped. Features are prioritized. Technical decisions are made.
Eventually, the team arrives at something that looks remarkably complete before a single real user has touched it.
That is where we have to be careful.
A specification can describe what people say they need. A prototype can show what an experience might look like. Neither can completely predict what will happen when the system becomes part of someone’s daily work.
Users behave differently when the software is real. They discover shortcuts. They ignore carefully designed steps. They combine workflows in ways nobody anticipated. They find information more important than the product team expected and features less useful than everyone initially assumed.
Those discoveries aren’t exceptions to the product process.
They are part of the product process.

This changes how we think about Version 1.
The objective shouldn’t simply be to build the maximum number of features within the available budget and timeline. The more important objective is to answer the biggest uncertainties as early as possible.
Will users actually follow this workflow?
Is this the information they need to make the decision?
Does the proposed architecture support the way the business really operates?
Can the integration handle the data and response patterns we are seeing?
Does the AI capability actually help, or does it introduce another layer of complexity?
These questions are much more valuable than asking whether every item on the original requirements document has been completed.
A first version that answers the right questions can be more successful than a much larger product that simply implements the original assumptions perfectly.
One of the most useful things that happens after launch is that the product starts producing evidence.
A user repeatedly takes an unexpected path through the application.
A particular screen gets ignored.
A workflow that looked simple during design takes several minutes in practice.
A supposedly important feature is barely used.
Another feature that seemed secondary suddenly becomes central to the user’s daily activity.
These observations are incredibly valuable because they replace assumptions with behaviour.
This is where product development becomes much more interesting.
Instead of asking, “What do we think users will do?”, the team can start asking, “What are users actually doing?”
The difference sounds small.
It isn’t.
MVP is sometimes interpreted as permission to build a poor or incomplete product.
That isn’t what we mean by it.
A meaningful MVP should be small enough to learn from and complete enough to be useful.
If the product is so limited that users cannot perform a meaningful workflow, the team learns very little. If it is overloaded with features, the team may spend months building assumptions before discovering that the underlying direction was wrong.
The sweet spot is somewhere between the two.
Build enough to create a real experience.
Put it in front of real users.
Observe what happens.
Then improve the product based on evidence rather than instinct.
That is a very different philosophy from simply “launch fast.”
There is an engineering consequence to all of this that is easy to overlook.
If we know the product will evolve after real-world use, the architecture needs to accommodate that evolution.
This doesn’t mean building an unnecessarily complex system from day one. In fact, overengineering the first version can be just as damaging as underengineering it.
The better approach is to identify which decisions are likely to remain stable and which are likely to change.
Identity may be foundational.
Core data ownership may be foundational.
Security boundaries may be foundational.
But a particular workflow, interface, recommendation strategy, reporting view, or AI interaction may evolve significantly once users start working with it.
Good architecture gives the stable parts strong foundations while keeping the uncertain parts relatively easy to change.
That balance is one of the most important engineering decisions in an early-stage product.
In connected healthcare, the gap between designed workflow and actual workflow can be particularly significant.
A product may be designed around what appears to be a logical patient journey: registration, consultation, diagnosis, prescription, follow-up.
But real healthcare involves interruptions, exceptions, multiple providers, incomplete information, consent requirements, different operational practices, and decisions that don’t always happen in the sequence anticipated by the software.
The same principle applies to ABDM-connected workflows.
A technically correct integration doesn’t automatically produce a useful healthcare experience. The real test comes when patients, clinicians, administrators, and other participants begin using the workflow in practice.
That is where hidden friction becomes visible.
And once it becomes visible, the product can evolve around reality rather than around assumptions.
Retail provides another good example.
A commerce team may believe customers want a particular recommendation experience. After launch, they discover that customers care much more about delivery certainty.
A retailer may assume inventory visibility is primarily an operational requirement, only to discover that accurate availability has a direct impact on customer trust.
A store automation system may correctly identify objects through computer vision, but the real operational challenge turns out to be what happens after detection: fraud signals, shopper behaviour, staff intervention, or exception handling.
The technology may work exactly as designed.
The product still needs to evolve.
That is not a contradiction.
It is discovery.

AI systems make this principle particularly relevant because the quality of an AI-enabled experience depends on context.
A model may perform well in testing and behave differently when exposed to real-world inputs.
Users may phrase questions differently than expected. Data may be incomplete. Edge cases may appear that weren’t represented in the initial evaluation set. A recommendation that looks useful in isolation may not fit the actual workflow.
This is why AI engineering cannot stop at model selection or benchmark performance.
The surrounding product needs an observation and improvement loop.
What happened?
What did the user do next?
Was the recommendation accepted?
Was it overridden?
Did the workflow succeed?
Where did the system require human intervention?
Those observations become part of the next version.
The product learns because the team learns.
This is one reason our approach to bespoke engineering is deliberately iterative.
We don’t pretend that a requirements document written before development can predict every decision the product will need to make six months later. Instead, we try to identify the highest-risk assumptions early, build enough of the system to test them, and use what we learn to guide the next iteration.
That requires a different relationship between product, design, engineering, and the client.
The conversation doesn’t end when the specifications are approved.
It continues through prototypes, development, deployment, user feedback, analytics, operational observations, and subsequent releases.
The first release gives us something that a requirements document never can: evidence.
And evidence is what allows the next version to become better.
There is sometimes an emotional attachment to the original product design.
Teams spent weeks discussing it. Stakeholders approved it. Engineers built it. Everyone has invested time and money in making it real.
Then users tell us something unexpected.
The temptation is to defend the original design.
“That’s not how we intended them to use it.”
But the user’s behaviour isn’t wrong simply because it doesn’t match the specification.
It is information.
The product team has learned something that wasn’t known before.
The mature response is not to protect the original idea. It is to ask what the new evidence tells us about the product.
Sometimes the answer is to change the workflow.
Sometimes it means removing a feature.
Sometimes it means redesigning the architecture.
And occasionally, it means admitting that the original assumption was wrong.
That is not wasted effort.
That is product discovery.
When we look back at successful products, the first release often looks surprisingly different from what eventually became the mature platform.
That isn’t necessarily evidence of poor initial planning.
It is evidence that the product had the opportunity to learn.
The first version establishes the foundation, tests the core hypothesis, exposes real-world behaviour, and gives the team a much clearer understanding of what matters.
The second version can then be built with knowledge that simply wasn’t available at the beginning.
This is particularly important in bespoke software because every client’s operating environment is different. Patterns from one project can inform engineering judgement, but they cannot substitute for learning how a particular organization, user group, workflow, and business model actually behave.
I’ve become increasingly convinced that the best software products aren’t designed perfectly before they are built.
They are discovered intelligently while they are being built.
The job of the first version is therefore not to prove that we predicted everything correctly. Its job is to turn assumptions into evidence.
Build something real.
Let real users interact with it.
Watch what happens.
Understand where the assumptions were right and where they weren’t.
Then use that knowledge to build the next version.
That requires humility from everyone involved. Product teams have to accept that users may surprise them. Engineers have to accept that some architectural decisions will evolve. Business leaders have to accept that the original roadmap may change when better evidence becomes available.
But that is precisely how good software becomes great software.
Version 1 isn’t the answer.
It’s where the real questions finally begin.
Why Context, Not Models, Determines Success Executive Summary Every AI project begins with excitement. The conversation quickly turns to mod...
Every AI Project Has One Constraint Nobody Mentions