The web application at my day job is in the midst of an
overhaul. It's architecture has been evolving since the [relatively] early days
of web apps, and had become a Big Ball of Mud.
We're trying to synchronize the overhaul of the underlying
architecture with the redesign of the UI, because it feels like the best chance
we'll have to do it (once the redesign is complete, how much buy-in can we get
as there's no direct benefit to the user?).
I got to thinking about the "evolved" architecture
we're starting with, and the thoughtfully designed architecture we're trying to
develop; Does an evolved architecture get a unfair wrap? I'm certainly not
going to argue that no forethought should be put into the
architecture -- That'd be ridiculous. Rather, I'm starting to believe that an
"intelligently designed" architecture might be overly naive...Bear
with me...
The result of any evolutionary process is dictated by the
definition of "success". In biology, an organism is successful if it
passes on it's genes. In our original application, a feature was deemed
successful solely if it worked. A low bar to be sure, but it kept the company
going.
Rather than believing we can design a better architecture
than evolution could (which is naive) couldn't we rather aim at tweaking the
definition of "success", and letting evolution takes it's course?
Designing an architecture is expensive: Meetings, heated
debates about slight variations in theory, and the inevitable introduction of
new bugs as we move working code into the new scheme. Also, the architecture we
design will be forced to evolve anyway, as we'll no doubt make some mistakes
and have to rework things (which may be more expensive in an environment that
believes itself "designed" rather than "evolved").
One option might be to agree on some "good
practices", and use group code reviews to discuss various approaches that
developers are taking. This would allow the best practices to find their way
into the system organically.
I don't want to push this thought too far, as I
absolutely still believe it's valuable to hammer out an architecture at the
onset of a project. My mind is wandering, though, as to how concrete and
complete the architecture should be.