
Daniel is a system programmer & web developer with 10 years of experience...
system programmer & web developer
coder . cl
a journey in software development...
beware with the nnpp
by Daniel Molina Wegener on 19-10-2009If you are updated, you will notice that there are a lot of people doing computer programming that are not capable to do this task. The cause comes from different reasons, such as not enough concentration to create code and follow the program flow. You will find that there are a small group of people doing a good job, this means that you will not find people capable to understand the code, extend it or understand at least how works the technology that they are using. Someone to be qualified must understand what is doing, and really must leave the philosophy of "it’s easy, the environment that I’m using is doing all for me".
There is a paper explaining the effects of kind that developers. My vision is that computer related jobs are similar to the medicine career, they require a continuous study and learning of the incoming technologies, that are changing daily, and good basis are mandatory. G. Gordon Schulmeyer in his paper "The Net Negative Producing Programmer" explains the effects of having people doing a job that must not, and call them NNPP. If you are clear with the concept, you will find out that most of the responsible tasks of generating a NNPP have their basis on how the work is assigned. But also the developer itself is responsible of learning enough to face the incoming challenges.
the managers side
Most development managers do not handle negative aspects of their programming staff well.
That’s true. Most managers are able to handle how to assign the proper tasks to their developers. Is rare to find out a a good manager. I’ve found at least three good managers that have made a good job. They were conscious about my skills as developer and have assigned me the right tasks, letting me to stand strong in front of the computing problems that I was facing those times. They were RM at SWITCH S.A., PA at Inter-Media S.A. — know is known as KI Tech — and MM at Imagemaker IT. All of them have taken the proper advantage of my researcher and developer skills, assigning me the right tasks on the right time. For example RM was capable to assign me the task of developing a SMPP gateway service for Windows 2000, since he was knowing my passion for C++; PA was capable to assign me the development of standard content management component to the company where we was working, most of the reusable ones and MM was capable to assign me the development of reusable but a little bit hard to code components of JavaEE applications. I don’t know who was the one who have assigned me the Software Architect role, but I was capable to define reusable component models and assign the right architectural pattern and design pattern, and I think that they are still using those patterns.
At the other side, the other managers were just assigning me patch and run tasks. Since they were not capable to understand the value of reusable software components. The early detection of a reusable component can bring you a good reduction of programming time, but reusable is out that philosophy of easy to use, that comes from evil companies like Micro$oft. A good engineer is capable to understand the code from top to bottom, follow its control flow and modify it in front of new requirements on it.
From the Schulmeyer perspective, to recognize a NNPP developer you must use the next criteria of evaluation:
- composition: writing a program.
- comprehension: understanding a given problem.
- debugging: finding errors in a given program.
- modification: altering a given program to fit a new task.
- learning: acquiring new programming skills and knowledge.
If you analyze this criteria, you will find that most NNPPs are not capable of doing one or more of those tasks. We have people that is not conscious about the skills and capability of their developers, getting wrong assigned tasks and generating — indirectly — most software bugs. Then you have the patch and run role with a heavy work load. Managing IT people is not about to know only the best managing practices, you must also know what are doing your developers and you need the proper technical knowledge to do that task. A good manager is able to trust in his role assignments, and also is capable to assign the proper task. A bad manager do not know who can do each task. By having good communication skills, good technical knowledge, good managers and team leaders are a guidance to their developers: read that article, use this method, call this function, but do not fall in the mistake of not trusting their developers and generating a heavy work load on those called efficient developers. Then you quickly get tired good developers, and something that falls in a dead cycle…
the nnpp side
But not all is facing good and bad managers. There some NNPPs by nature, people that really must not work on IT. Usually those people do not have the necessary conditions, such as concentration level, enough to understand their job and follow the control flow of an application. They usually are continuously asking for Google answered questions, yes, you can find some answers on Google, but never try to find recipes, since it is the worst idea on software development. Recipes are for noobs, not for professionals. You must have clear programming concepts and clear with your role. The algorithmic skills are driven by experience and passion on them, if you are expecting to leave the programming tasks and reach a manager position, skipping all those lazy concepts that are required to understand most problems, you are loosing your time… you will ever find software bugs in your projects, because you will fall in the dead cycle of assigning wrong tasks. You are not conscious about the required skill to bring an optimal solution.
The paper itself, refers at most on how managers can face the NNPP problem.
When one or more of your people goes off course or does a bad job, you have got to let them know it and take immediate remedial action. One way of avoiding big problems is to subdivide the job sufficiently and have enough checkpoints so that missing one is a signal, not a catastrophe. [16, p. 109] Some other remedial actions covered below are counsel, reassign, or discharge.
It is briefing the solution to following steps, where we must skip most of them and concentrate in the problem solution.
- ignore
- deny
- blame others
- assume responsibility
- find solution
From the Schulmeyer perspective:
This aphorism in The One Minute Manager should provide guidance to the software manager’s rehabilitation of the NNPP: “Everyone is a potential winner; some people are disguised as losers; do not let appearances fool you.
If you can not trust in your developers, you can not be a manager. The leadership here is really important, a good manager can recognize and transmit how responsible is a developer of their software development tasks. Is really rare to find someone doing this tasks. Some people have this approach embedded in their genetics, so they can do a good leadership of their team without falling on the ignore, deny and blame others steps and causing their developers to get tired quickly and doing a wrong job.
conclusion
Most of those bad managers, not conscious about their developers personality and without the proper technical knowledge have made me quit my last job as employee. Now I’m going as freelancer, finding my own projects and managing my own time. Now I have more time to study, research and develop most of those projects that I’ve dreamed, mainly in FOSS… For example I’m currently reading books on algorithms, learning Haskell — I know Lips and using SBCL and Clojure in small tasks, but I’m in need to modernize my knowledge — and finishing my FOSS projects, that were frozen for a while…
reference: a single IRC conversation plus http://delicious.com/ links…


[...] "beware with the nnpp", I’ve wrote a little about NNPPs, so I think that I don’t need to explain more about [...]