Now, what do you mean by "developing for managers" one might ask.. the thing that I found to be something like a universal truth in my area is the fact that managers don't quite get the problems of a developer (especially if they come from a non technical background). This is especially true when, after you get some requirements and already built something, they ask for "that little change" that's going to mess all your poetry-like code.
I'll try not to bitch to much about managers here because the point of this blog is to make some notes on strategies and practices to work around, antecipate or solve some of these issues. Hopefuly I can help myself with a little reflection on my professional adventures and help others with some insights or just by making them know they they are not alone!! =P
So let me just define some concepts so that all that read this have the similar perspective.
- Developer/programmer - person who is responsable for writing a piece of code (big or small, in one file or several files, in one language or several languages).
- Architect - person who is responsable for the the design of a technical solution when given a list of requirements. This person will also be a Developer most of the times.
- Manager - person who is responsable for the communication bridge between the techical team (Architect/Developers) and the Client. This person possibly is also responsable for project management (things such has managing the time of a project, resources, costs, expectations, etc).
- Client - person or company who has a need for a technical implementation of a solution.
So... for me the thing that's most important when developing for managers is FLEXIBILITY and MAINTANABILITY because in reality most of the projects follow a strange flow of exponencial chaos.. at first everything seems to be well calculated and though out but as time goes by you'll get unthough situations and flows, requirements that magicaly appear or are "improved", design that gets changed or is just incomplete, etc etc.. Because the engineers are always the ones that need to come up with a solution (and if we don't, not only we'll hurt our ego =P, but also we "weren't up to the task"), we should try to make our own life easier by building a flexible and maintainable system.
Obviously these are not the only concerns to have when you're building a system, but in the perspective of "building for managers" I believe these come before all others (such as security, testing, performance, code consistency, system sustanability, etc).
I'm probably say some stuff here that some people won't agree (probably managers mostly but I expect also some techies to be outraged) and all input is welcomed, if you say things in a respectful way obviously.
Hope that I can make this not as boring as it sounds and bring some value to you, that are reading this. =)