In my last post... First Order Agile Scaling...
I made a quick comment that I think needs further explanation. I said
that it is always a good idea to have the technical folks collaborate
with the requirements folks to make sure that the requirements space
and the solutions space are kept in balance. I've said that so many
times to myself and my customers that I think I take some of this
language for granted. Reading over that post... I wanted to put a few
more words around what I am thinking here.
When we first consider doing a software project, we typically have some business problem we are trying to solve or some market opportunity we are taking advantage of. Those problems and opportunities exist outside of how we choose to solve them. Requirements describe how the business wants to move forward in the market. The requirements space is the set of possible requirements that could satisfy that market need.
Likewise... architecture and design describe how the requirements are going to be implemented in technology... but at the end of the day... we are really just describing in technical terms how we are going to solve the problem identified by the business. The solutions space is the set of possible solutions that could meet the requirements and satisfy that business need.
Given unlimited time and money... the business can choose to solve the problem any way they see fit. There are no constraints on the set of requirements the business can choose from. Similarly, given unlimited amount of time and money, the technology folks can implement whatever cool stuff they want to satisfy the business requirements. Its not often though that we have unlimited time and money to solve the problem.
Collaborate Early and Often
We need constant communication... and frequent iteration... continuously allowing our emerging understanding of the requirements be in balance with our emerging understanding of the solution. We need to let our emerging understanding of the requirements be shaped by what it is going to take to build it. We need to let our emerging understanding of what we want to build be shaped by what the business needs, what it is willing to spend, and when it needs to be delivered.
Again... this is one of those things that is built into the very fabric of the small team agile concept. It is another one of those things that needs to be explicitly addressed when we start talking about scaling agile.
What does this look like in practice? Simply have the business people sit down with the technology people and explain the business problem... and their vision for how to solve it... all in terms of high level requirements. The technology people have a day or so to go off and think through their palette of possible solutions. The technology folks come back and explain their high level solution... how it satisfies the product vision... and a ballpark idea of how big the project might be and how long it might take to complete.
If we are not in sync... if the requirements and the solution are not in balance... iterate the process allowing what we know about the solution space influence the requirements. Come back to the table and start the process over... either until we have convergence... or we realize that there is no solution that can deliver the product vision within the time and cost constraints established by the market. By bringing the requirements vision and the solution vision into balance at the early stages of product conception... no one ever gets too far off before we have the opportunity to reset everyone's expectations.
Comments