Code as an Asset...
I am not as well-read of a developer as I would like, but I consider myself to be very intuitive at discovering and defining best practices in programming. I don't mean this as a boast, there is just a part of my personality that drives me to constantly seek-out and create templates and patterns to simplify and standardize any code I write. I am constantly trying to identify and improve my development philosophy and methodology to create applications better, quicker, and more innovatively every day.
Therefore, it was a bit of a shock, when I discovered a viewpoint of software development that had escaped me:
Code is an Asset!
I'm not referring to the software produced via code, instead I'm suggesting that each piece of code itself is an asset. More specifically, any encapsulated piece of UI or functionality should be treated as an asset to an organization, not just as a piece of the greater asset of the Application that uses the code.
Each unit of encapsulated code has a cost to create, and therefore has value. But, how often is this cost and value tracked and monitored? Who makes sure that code-assets do not get misplaced, thrown away, or lay unused? Undoubtedly the programmer's supervisor or organization sees the expense of the payroll associated with each developer, but have you ever seen a company try to assign that cost to individual pieces of code in order to establish its value? Have you seen a manager ask why we arent getting more reuse of a component in which they invested? With the exception of companies whose main function is software-development, I suggest that the majority of companies only consider the products and services rendered by a developer as an asset, and ignore the value of the underlying code.
On the other hand, for many years developers have instinctively labored to achieve encapsulation and code reuse. However, the value of this has mostly been lost on management, unless it added benefit to the project or to the productivity of the developer. In fact, I suggest that most IT management would overwhelmingly favor an application quickly delivered, yet poorly encapsulated, over one well-encapsulated at the expense of a small delay in the project. Obviously we always must try to balance the cost of time vs. reuseability in every project, but in many organizations management has been excessively focussed on delivery-date, while developers tried to squeeze every bit of time in to enhance reuseability and encapsulation within their codebase. It is this constant struggle between developers and management to achieve their opposing goals that undermines achievements of most IT organizations. In the end, both are usually left with ill feelings and an adversarial attitude due to the compromizes they each had to make.
If IT organizations restructured their methodology to recognize cost and value (or valuelessness) of every ounce of code produced, it would go a long way towards remedying many of these conflicts and promote a proactive approach to optimizing the ROI of every project. Indeed, by tracking code as an asset, it could streamline the development process and reduce overall IT costs for the organization. Together, management and IT staff would focus their attention on identifying the best use of existing code assets and time, and how best to invest towards in-house, contract, and even open-source development to enable the company to gain even greater productivity while delivering more timely, robust, and well-balanced products and services.
Developers could be involved in decisions of how to reduce development costs by outsourcing, or buying prebuilt libraries for the homogenous code, and spending more time on the proprietary or company-specific implementations that take advantage of your company's expertise. Also, management would start seeing the payroll expenses translated into assets they can promote as capital investments for the organization. This will lead inevitably to an incentive to invest in improving methodology for identifying and designing reuseable components, promoting sharing of intellectual property within the organization, and a focus on rewarding developers who excel at delivering innovative reuseable components that provide the organization with more assets with which to speed delivery of increased profits to the bottom line.
This is such a simple and obvious idea, yet as an industry we are stuck in our traditional and out-moded approaches to IT management that it could actually be considered revolutionary if not rebellious in many organizations.
What do you think? Is this much ado about nothing, or am I on to something? Does anyone out there know of books on the topic that exist? Tell me if I'm just a silly newbie developer who has too tight a hold on the elephant's leg to see it standing right in the middle of the living room....