
A farmer buys a piece of land with fruit trees. It would be disastrous to discover after the investment that every year the trees yield poor crops. Ask any experienced farmer - the fruit is simply the end result.
- What's the soil like?
- Are the roots healthy?
- How optimum is their environment?
If it were even possible, fixing a piece of fruit does absolutely nothing for the tree or remaining harvest! It's simply the tree's byproduct only after great attention has been given to the roots and the overall health. If all other needs are met, the fruit will come naturally.
Business isn't much different. You ensure the climate is right and that proper attention is given to the areas that make success. There are always unexpected elements. But at best you strive to make provision even for those times.
This same philosophy is critical in the realm of software development.
Poor development meets the immediate need only.
Good development yields to the future.
Excellent development yields to the future with haste.
Just like a tree that continues to sprout limbs as it matures, the same often applies to a good software project. As a business grows, more needs may come from what was once a simple solution. This is normal. And unlike development projects 10+ years old, better standards are in place today - standards built to avoid typical blunders when modern programming was still maturing (and it still is).
Sadly there are still many developers that carelessly dismiss lessons learned from the past. And unless you're a professional coder, there's no way of deciphering who is careless until it comes time to expand your software and the architect can't be reached. Or he is ready to bill you twice as hard for the add on or even a brand new solution! Simply because his old code just wasn't flexible enough to add new functionality to suit related needs. It becomes extremely expensive in time and money. Some developers even make it a game to ensure you revisit regularly or that nobody else can easily decipher the code without charging you just as much or more to do it. It ensures the developer's own financial security at a heavy price: the project's quality.
Here that architecture is total shame. Rather, an approach is taken to yield results that constantly looks to future possibilities, is easy to manage and saves time in the end. Lightweight frameworks are used where the code can be fluid and quick to adapt to business needs. No crystal ball, just smart building.