I discovered an interesting analogy: software systems are like cities. In very many ways.
1. They are continuously changing/evolving
It would be absurd to expect that a city can be first designed, and then built in one go. And then, it functions till the end of times without major changes.
2. They are designed by many autonomous people
Even if there is one chief architect when designing a city, if can not have control over everything. It can provide stylistic guidelines, and design the bird-view looks of the city, and maybe some key buildings at best. But nobody can control the whole design, all the high-impact decisions that are made during the building of a city.
3. The passage of time shows
The age of the building shows, so does the age of software. In the software world, it is sometimes called software erosion.
4. Components may not fit together perfectly
The city does not provide a uniform look, even if it tries to. Buildings are designed by different people, following different guidelines. Sometimes two buildings standing next to each other differ so much that it hurts the eye. Still, until they function well enough, we have to live with the fact.
5. Design is not always carried through implementation due to lack of resources
Even if the plan is nice, lack of time or money can interfere during the implementation, leaving the end result simplified, altered or half finished.
So, if you ever find yourself in the situation when you have to manage expectations about software systems, think about this analogy.
I think it is high time that I start a professional blog.
I am a software engineer, have been active for about 10 years (it really depends where you start the counting from, some people call themselves programmers since they first wrote a hello world in Pascal at the age of 12).
I was doing c++ programming for a while, in the financial industry, and I was quite isolated from the open source world. But recently I switched, and I discovered web development for myself, with all its enthusiastic and open minded communities, and I am loving it!
So I am rowing in the open source boat now, and I want to share the experience with you. Because I can. Finally.