Developer Productivity in Highly Coupled Systems
jonr originally posted this on Jon Rose's Blog.
I am guessing I read this somewhere at some point, but my current project has motivated me to think about tight coupling and its impact on productivity.
I am a big believer in the idea of “flow,” where developers find their rhythm and begin to move through things quickly. Over 10 years in the software development industry, I have encountered two times where the projects I was on never reached a state of “flow” in any way. Usually, no matter what the challenges, I find the team and myself reach this in some form. So, it is actually kind of scary to be on a project where we haven’t found this state at all.
The first time I experienced this it was because the needs of an internal customer were so ambiguous and bogged down in politics. So, we were never able to get a clear picture of what we were to build. This instance ended with our entire team being laid off as part of large reduction in the work force through out the company.
In the current case, the requirements are quite straightforward and clear. There is plenty of weirdness in them, but the fundamental function of the system is fairly simple. From a functionality standpoint, it is probably the simplest system I have ever worked on, outside of dinky web site contact forms and the like. So, what’s the hang up to finding the “flow?”
I believe it is the high coupling through out the system. We are working with an internal development team, and our customer has mandated a fully data driven approach and implementation that does little to separate the meta-data from the data. In most cases, the database tables are being propagated up to the presentation layer, which has created heavy dependencies throughout the system between all tiers of the system.
In many ways, I have always thought the industry was a bit to extreme with the desire to decouple every single little thing, and found many of the driving forces for doing the decoupling to be a bit silly. However, I am seeing now how much total coupling limits team productivity. It brings team productivity down to the level of the least talented- least motivated developer, as everyone is always waiting on everyone else.
I think there is a very natural level of decoupling in systems. We don’t need to go crazy on this issue, but when the natural needs for decoupling are ignored there are many side effects, including killing the team productivity.