Sunday, October 19, 2008

Cut yourself off from your code

A classic pitfall that traps many developers is a high level of ownership and dominion over source code modules. The code has a personal, essential quality for these developers, as if it were their own form of artistic expression. University training teaches this artistic level of elegance in algorithm design, and after all, many great developers have been writing programs since they were bringing home art projects for Mom and Dad. Occasionally, the three-way love affair (developer, source code, company) works well, even for a long time.

For the emerging manager, personal attachment to source code is a mistake. Thanks to Von Neumann, software is just that—soft. It has to change with requirements and time. Anyone’s code can be learned and continued by someone else. In fact, source code needs to be more readable by a person than by any machine. Sure, a compiler has to parse the code, but a person should be able to understand it. Every programming student hears that comments are good and style is important, but few are taught that their career depends on it.

Source code should be documented in a way that anyone coming along at any time could understand what it does and why. The brilliance of any great program lies in the mind of its creator; the software itself is just a reflection of that brilliance. Buried under the same evolving modules for years, it is natural for some developers to believe that their creation (source code) is a part of themselves. As such, suggestions for improvement are rejected and the very idea of a code review feels like a violation of personal rights. Unfortunately, their careers are as frozen in time as the code they worship.

You may be thinking that the idea of working to become independent of your code is contradictory to the notion of being a subject matter expert or functional leader. There is some overlap between knowledge of a specific code base and its business value or technical domain. But a true functional leader has knowledge and capabilities that are portable outside of the limited confines of the source code—possibly including but not limited to specific repositories of programs.

Thanks for reading this Management Use Case. I'm the co-author of a new book on software development leadership entitled You.next() that features dozzens of other use cases for leadership. Please see more at www.youdotnext.com.

No comments: