An analysis project is not meant to understand everything
Author: Valeriano Sandrucci
A Difficult Reputation
In the software industry, the word analysis has an ambiguous reputation. It evokes long documents, waterfall approaches, weeks of work without writing code, and the widespread feeling of paying for something that does not produce immediate value.
Clients tend to perceive it as an unproductive cost: people pay to get working software, not to read diagrams. Even among developers, analysis is sometimes seen as an obstacle. Code appears to be the only activity that truly matters, while everything else feels like an intermediate step of questionable value.
There is also a common objection: documentation produced during analysis rarely stays up to date over time.
These observations contain some truth. They do not, however, tell the whole story.
When Analysis Is Avoided
Many of the most difficult software projects follow a similar pattern. The environment gradually becomes conflictual, the budget is consumed without a clear understanding of where it went, deadlines are postponed repeatedly, and the team ends up managing increasingly long lists of bugs, often critical ones.
Meanwhile, overtime becomes the norm, the software remains unstable, and certain decisions change direction without any obvious logic.
Situations like these rarely originate from a single technical choice. More often, they stem from an implicit decision made at the beginning: treating analysis as something to avoid rather than as a tool for managing uncertainty.
Agility and Analysis
One of the most common misconceptions is associating analysis with rigid methodologies and agility with the absence of analysis. In reality, software projects that work in a predictable and sustainable way combine code with conscious decision-making.
Writing software is the central activity, but it is not the only relevant one. There is requirement clarification, boundary definition, understanding technical and organizational constraints, and evaluating trade-offs. Whether we like it or not, all of these activities are forms of analysis.
The problem is not whether analysis exists. The problem is what kind of analysis is performed, with what objective, and within what limits.
The idea of producing complete and definitive specifications before starting development is rarely effective. In most contexts, that approach is not only expensive: it is ineffective.
Analysis as Decision Support
An analysis project does not exist to “understand everything.” Its purpose is to clarify the doubts that actually matter and make better decisions possible.
If analysis does not enable concrete decisions, it is wasted time.
Seen this way, analysis changes its nature. It is no longer a uniform activity, but an adaptive tool. Depending on the uncertainty being reduced, the most effective medium changes as well. If the doubt concerns an interface, a mockup is worth more than many pages of text. If the problem is architectural, a few well-crafted diagrams communicate more than verbose descriptions. If the uncertainty is organizational or process-related, a dependency map is more useful than any functional specification.
The value does not lie in the format, but in the ability to make ambiguities explicit. This is why it is essential to use appropriate tools and to do so efficiently: the cost of analysis should never exceed the benefit it produces.
Analysis as a Limited Investment
Another often overlooked aspect concerns the way an analysis project is conducted.
In scientific research, analysis continues until the problem is completely solved. Time is a secondary variable. In software development, this logic does not work. Here, analysis is a means, not an end. Its role is to reduce uncertainty enough to make the next step possible.
For this reason, the correct approach is not to define the objective while leaving time undefined, but to do the opposite: define the time and maximize the outcome within that constraint. Analysis is not performed “until everything is fully defined.” It is performed for two, three, or four weeks, producing the clearest possible understanding within that timeframe.
For example, not every mockup needs to be defined. Only the mockups for the most critical use cases need to be clarified — the ones that make development more manageable and reduce the risk of rework once understood.
This radically changes the perception of analysis: it is no longer a potentially endless activity, but a controlled investment.
When Answers Do Not Arrive
An analysis project may also fail to produce all the expected answers. This does not necessarily represent a failure.
If coherent mockups or stable decisions do not emerge within a reasonable timeframe, the problem may lie elsewhere. The application domain may be poorly understood, stakeholders may have conflicting goals, or certain technical constraints may have been underestimated.
Identifying these issues before committing months of development is often the most valuable outcome an analysis project can provide.
Analysis does not eliminate risk, but it makes risk visible and discussable.
Reducing Uncertainty Before Increasing Commitment
Treating analysis as an independent project, with clear objectives and time limits, enables something fundamental: aligning the level of commitment with the level of remaining uncertainty.
When uncertainty is high, it makes sense to invest little and learn a lot. As uncertainty decreases, it becomes possible to increase economic, temporal, and architectural commitment in a conscious way.
Skipping this step does not make a project faster. It only makes it more fragile. Many projects that “started immediately” simply postponed analysis until later, when it becomes more expensive, generates conflict, and manifests itself as bugs, delays, and rewrites.
A Precise Function
An analysis project does not exist to understand everything. It exists to understand enough to make the next decision in the least risky way possible.
Effective analysis does not produce perfect documents, but better decisions. It is focused, time-limited, and oriented toward reducing the project’s real uncertainty.
Author: Valeriano Sandrucci
