I’ve been surprised this week by a colleague’s comment regarding how a piece of software had been architectured. He found it too much procedural and not enough object-oriented, despite the fact the code was performing exactly as needed. I would have expected this from a junior developer, not from a seasoned one.
Hey, guys, may I kindly remind you we’re not in university anymore? When designing an architecture, there are more things to take into account than just technical parameters and personal preferences (not to mention the fact that the hype is about FP now).
Let’s muse a little and well… think about the best transportation mode?
Most people would agree that the plane is the fastest and safest transportation mode. By flying, we can reach remote islands with unmatching speed. And yet, not every place has a nearby airport. What of the waiting time at airports? And the whole bunch of unpleasant but necessary security measures? Not to mention the huge cost to environments and the need for top-notch technology and pilots…
OK, let us forget about remote islands. Let us use a common way of transportation: car. Cars are everywhere, roads are overall and gas stations also. Car mechanics are easily available, and driving a car is learnt in a dozen of hours. From this point of view, car may seem like the best way to travel there is. Some downsides cannot be ignored though: there are traffic congestions in cities - and between them, you’ve to park your vehicles somewhere and cars have a major impact on urban pollution - and filth, just to mention a few.
In order to go beyond those problems, let’s use a bike. Bikes are cheap, they are green, daily exercise is good for health and you can even take your bike along in cars and trains. Now, if you’re a biker, you know about the delicate pleasure of biking under the rain. Biking is also no good if your work require a suit, or you need to shower before entering the office. It’s no use to have a bike if you need to transport more than a few things. It’s also worth mentioning bikes are easily stolen.
I hope my point is now clear: there’s no such things as the best transportation mode. There are many, and each one is adapted to a specific context.
In software projects, context is made of project planning, skills availability, team maturity, development costs, application lifetime and countless others! As you wouldn’t call names people using their cars instead of trains, you shouldn’t judge a piece of software (and people behind it) "as-is" but only in their relevant context. And IMHO, the academic "purity" has a very low priority in real-life projects.