Tag Archives: agile

you aren’t gonna need it – short-sighted

“You aren’t gonna need it” (YAGNI) is a principle espoused by extreme programming (XP). It says to implement things only when you actually need them, never when you foresee the need. I see serious problems with this principle; it is short-sighted.

From a product management perspective, the product owner’s job is to define a release roadmap and a backlog of requirements for development that they foresee a need in the market. There is a vision and product strategy that guides what should be developed and how to develop it. Does the YAGNI principle apply equally to this backlog? It can be argued that anything on the future roadmap is subject to change. Therefore, developers should not be building features, infrastructure, and platform capabilities in anticipation of those future needs, no matter how confident they are that the backlog will be implemented.

Doing the minimum to meet the immediate need leads to technical debt. YAGNI causes developers to defer solving more difficult architectural problems until the need becomes critical. Architectural problems (“-ilities”) are often systemic, which means as the code base grows the cost to refactor and fix becomes greater.

Security and error handling are examples of systemic issues that are very difficult to fix later. If the problem grows too large, it becomes too costly to fix, because the work cannot be accomplished within a sprint without leaving the code broken (i.e., failed builds, failed tests), and that is absolutely forbidden. That constraint makes it impractical to fix large scale architectural problems throughout the code base, when the problem has become intractable. The software eventually collapses under the weight of its technical debt because of compounded interest, as the debt is multiplied with a growing code base.

If we take YAGNI too seriously, we are being deliberately short-sighted, ignoring the requirements that we can (and should!) foresee. YAGNI encourages us to discount future requirements, expecting that they may not come to pass. A myopic approach tends to lead to a dead end, if we do not take care to set a course in the right direction, and to ensure that we have equipped ourselves to travel there.

If you allow YAGNI to make the road ahead too difficult to travel, those future requirements certainly will not come to pass, because you’ll be broken down on the side of the road. There won’t be anyone to come rescue you, because although you could foresee the need for roadside assistance, you didn’t pay for it on your auto insurance policy, because “you aren’t gonna need it”.

strategic messages – simple

Since the beginning of April, my primary mission has been to document the Reference Architecture specification, which will drive our business. One important lesson I learned in the past year, while observing the executives direct the organization, is to deliver simple messages. People need simple terms to remember complex chains of thought. That is why naming (branding) is so crucial to success. It is also a key to the success of any strategy.

The mission that I set myself to accomplish was to distill the myriad strategic messages handed down from executives into two simple messages. Then, to expand those messages into a technical architecture for executing on the strategy. As I was waiting for the bus today, I came to the realization that these two strategic messages are as applicable to ordinary life as they are to the success of our business. So I present them here.

Focus: Concentrate your investments on your core business. Understand your strengths and use them to your advantage; avoid over-extending yourself into endeavors that expose your weakness. Do what you are good at, and leave all other things to those, who are better at doing them. Compete to win; do not bother fighting battles that you cannot win. You have limited resources and time—invest them wisely. Don’t waste your time and money.

Agility: The pace of change is mind-boggling today, and it is accelerating. Prepare to adapt quickly to a changing environment. Designs that encapsulate variation will win out over those that entrench how we understand things today. Evolution weeds out those, who cannot adapt to change. Embrace agility or become extinct.

Focus and agility. These two words are worth about usd$130 million to us. You get them for free.