Some ramblings on software development
A useful perspective on software devleopment is as an ‘integrated discipline’, i.e. a perspective that recognizes that software development is actually composed of three domains:
- Business – this is the domain of the problem
- People – all the people involved, e.g. development team, customers, users, support staff, marketing, product management, etc.
Nothing here is new, e.g. Weinberg, Catalysis, Scrum, etc. all include some notion of these domains in their models. However, what’s confusing for me is how rarely this is recognized on all the different projects I’ve been involved. I don’t think this is just a function of how I choose a project – as I hear this from others as well. Typically, the recognition of this varies depending on who I’m talking with – e.g. developers recognize technology and business, but rarely the people; product owners recognize the business and technology, but rarely the people.
Why is this important? Primariliy because problems often creep in from the unrecognized (or recognized but less important) domain.
I’ve noticed that in the many organizations I’ve talked with, I’ve never really found any job titles that consistently appear to acknowledge this perspective. Occasionally, encounter some positions can described that way (e.g. architect, senior management, CTO), but there doesn’t appear to be a ready made & well recognized title.
Perhaps it’s a result of the perceived complexity of each domain, where the approach is to ‘divide and conquer’ the work into seperate roles. Personally I believe that this is an incomplete answer. The ‘divide and conquer’ approach works well for specialists that need to become strongly fluent in the extensive details in each domain. In this case, the differences are important – i.e. the patterns of action and subjects of action are unique within that domain. However, I believe that spanning all the domains there are patterns of action that are common, and that the unique aspects of the subjects of action are less important. Put another way – there are common patterns of doing things that can be usefully applied across multiple domains.
One concrete example of where this shows up is the role of architect. In software development, this is an overloaded term. For some, an architect (e.g. a J2EE Architect) is someone fluent with the unique aspects of J2EE. For others, an architect is soomeone fluent with the common very high-level design patterns and priniciples, which can be applied to different technologies as well as to businesses.
As a personal frustration, I often encounter the two being mixed up, e.g. in conversation expecting that they need an architect that spans multiple technologies and possibly business as well – and the conversation turns to how-to questions for a language specific library.
All the different levels are important, however I believe we need to revisit how we’ve ‘sliced the pie’. Specicically, I beleive we need more emphasis on the common aspects that span technologies as one ‘bundle’ of patterns; the common aspects that span technologies, business and people as another ‘bundle’, etc. The increased emphasis on these patterns willl create opportunities for greater breadth the roles (i.e. not tied to one technology)