Leave predicting to meteorologists and fortune-tellers
There’s a couple of good axioms about software design: You Can’t Future-Proof Solutions and the Ivory Tower Architect
You Can’t Future-Proof Solutions basically details the fact that you can’t predict the future. You can’t possibly come up with a solution that is “future-proof” without being able to know exactly what will happen in the future. If you could do that, you shouldn’t be writing software, you should be playing the stock market.
Ivory Tower Architect is a software development archetype whose attributes are that they are disconnected from the people and users their architecture is supposed to serve. They don’t know their users because they don’t interact with them and they don’t observe them. The Ivory Tower Architect’s decisions are based on theory, are academic or esoteric. Ivory Tower Architects effectively predict what users will want and what will work.
Prediction is a form of guessing. At the worst case (fortune tellers) this prediction is actively fraudulent—meant to tell someone something they want to hear to promote their own gain. At the best case it’s based on past experience and education and is actually turns out true. Yes, prediction is sometimes right. But, you don’t want to base anything very important on predictions.
Software is a very important aspect of a business. It takes, time, resources, and money to produce and its success is often gauged by revenue. Putting time, resources and money into a “guess” is highly risky. If that guess isn’t accurate, in terms of software, what is produced is technical debt. If predictions are false the software will not be as useful as needed and will severely impact revenue or cost effectiveness.
How do you avoid predictions? Communicate! In terms of the ivory tower architect, they shouldn’t work in isolation. They should at least work with their team. They should also understand and converse with their customers.
All the important information is outside of the organization’s place of business. You need to understand specific problems and success criteria before you can provide a solution that will work.