Writing in "The Effective Executive" (1966) Peter Drucker expresses that all knowledge workers are de facto executives.
"I have called 'executives' those knowledge workers, managers, or individual professionals who are expected by virtue of their position or their knowledge to make decisions in the normal course of their work that have impact on the performance and results of the whole."
By this token, all software developers are 'executives' in Drucker's definition. Why is this true? And, what does this mean for software development management?
Every line of code a developer writes affects the performance (functional or non-functional) of the product or system in development. In the example of a software product company, the competitiveness of the business relies on the performance of its product. More than that, the competitiveness of the business requires the software development group to be capable of responding to market demands with appropriate functionality, quality and timeliness. Every design decision potentially affects the ability of the business to respond to those market demands. If developers are left to simply design, develop and test on their own without supervision then every day, individual developers are making executive decisions, on their own, in open loop.
It isn't good enough to demonstrate that code meets the functional requirements because the working code disguises the many executive decisions that the developer made whilst producing it. The effect of these 'executive decisions' may not be felt for many months to come. Cruft in the code can lead to long lead times, poor quality and dissatisfied customers. The introduction of design and code inspections based on established guidelines and best practices effectively elevates the 'executive decisions' to a group or communal level. The guidelines should encode the 'executive decisions' which have been made concerning tradeoffs like flexibility versus simplicity in design. The guideline documents surface the executive decisions made by the technical team so that management can agree that the decisions are properly aligned with the strategic direction of the business. The inspection process is there to verify that executive direction was carried out correctly.
Processes such as FDD, which ask for designs to be completed by Feature Teams and code to be reviewed by a Feature Team whilst a Chief Programmer is held accountable for the execution of the process and the quality of the product, remove the executive decisions from the individual. Individual developers are not empowered to make executive decisions on their own, rather they are enabled to contribute to them as part of a team. In this respect the managers of the business can rest a little easier that some control is being exercised over the strategic direction and its alignment with tactical decisions.
The term 'technical debt' has crept in to the vernacular of the agile movement recently. Technical debt is the notion that code is left in a state unfit for long term maintenance - it works now, but only just. In order to continue using and re-using the code in future iterations, some refactoring will be needed. Technical debt is the stuff of executive decisions. It should be surfaced and visible to management that a decision was made to leave a cruft debt in the code base. It should be part of the guidelines, i.e. if YAGNI is your mantra then your guidelines should explain what that means and provide examples. Management can then decide whether the choices are aligned with the direction of the business and needs of the market. If cruft exists because developers were left to create it on their own - making executive decisions in open loop - then the business will ultimately get what it deserves - beaten in a competitive market!
The message from Drucker is clear - knowledge workers make executive decisions all the time in their daily work. So pay attention to the little things. Understand that each knowledge decision is an executive decision and put processes in place to control the quality of those decisions and insure that they are aligned with the strategic direction of the business.