I am sure that most of you have heard the term ‘Ivory Tower Architect’ and most of have a mental image of what this means. To me, when I hear the team I think of a person or team of washed up, has been developers who are no longer capable of creating quality code so now they have been relegated to ‘mandating process and standards’.
What got me thinking about this was a comment to one of my recent posts about doing pull and compiles on your source code. In this post I speak about how your team/organization needs to be able to simply pull and compile all and any source in about 5 minutes. I also mention that the source should not depend on any 3rd party installs to simply compile, but if it MUST (and I know, I know there is always an exception to my rule) then you better have that installer inside your source tree along with a readme to explain to a new developer exactly WHAT must take place prior to compiling the code.
The comment that got me thinking started off great. The person made the statement that you should simply have to hit F5 to compile and run, and I guess in concept I agree with that, but I still think that you should be able to do a command line build without the IDE. But later in the comment the he goes on to say
Any 'special' libraries should be a part of the corporate image for a developers machine - a *real* shop isn't going to have umpteen different libraries anyway - they'll have a stack, and that stack will be the standard for every project.
Now, the first part of that statement about the corporate image I can agree with, however the second part is what got me all fired up. That part of the sentence just reeks of ivory tower architecture or mandates and I am always fearful of these types of mandates. Why am I fearful of these… well glad you asked. Mainly I don like these types of mandates for two reasons:
Lack of context
How could a group of people, or even a department within an development organization know the needs of each INDIVIDUAL team? I have seen and heard about the situations where a set of standards or frameworks (mostly home grown of course) were pushed down from above and were told, ‘these are the tools/frameworks that every team must use’. Can someone tell me how a member that is NOT on my team can possible know what tools/frameworks we need?
We are software professionals, we are paid a ton of money to create business value. How can we do this in a innovate way if we are told which tools/frameworks we can use. Not to mention, the pace of change in our industry is so fast and so often that if a team is told which tools they can use the chances are they will be years behind the 8-ball.
I understand that teams, even organizations what to have standards in place in terms of tools and practices. However, ever team has a unique need and each team needs to have the ability to make its own decision and forge its own path. Now do not get me wrong, when working on a big team there does need to be a standard set of tools (which logger to use, which testing framework, which IoC container, etc, etc) that will be used. However, this is the standard for THIS TEAM ONLY, and the standard was decided on by THIS TEAM. The distinction here may be subtle to some, but is great to me. By allowing each team to make their own decisions, they are better able to asses their needs and create better software.
Let software developers do what they do.. Create Business Value through solving business problems. Only way this can happen is if each team has the flexibility to make its own decisions.
Till next time,
03-19-2009 6:31 AM