Making the Software Business Case: Improvement by the Numbers covers an area too few software engineers have any exposure to: financial modeling and business analysis, as it relates to the IT domain. Reifer's concise (300 page) book provides a broad overview of how the IT area appears from the business side, including critical material on how to frame technical proposals in business terms.
Amongst the many nuggets to be found in this book are:
· useful tips on where money can be found
· good insights into the politics of proposals and budgeting
· getting middle management buy-in
· countering executive challenges
· successful management of cross-project initiative dynamics
· software capitalization/depreciation
· Discussion of reuse from a cost avoidance perspective.
This book is not only good in terms of its material, it is also an eminently readable book in terms of style. Reifer elaborates his argument through the clever use of case studies that provide human interest and momentum to otherwise dry material. These case studies include:
· A defense contracting firm implementing software process improvement
· A public utility replacing an outdated mainframe-based transactional system with modern client-server technology
· An industrial controls firm suffering from moribund products
· A firm seeking to Internet-enable its internal systems
Reifert places strong emphasis on "making your numbers believable." He argues that this believability must address these nontechnical considerations:
· Cash flow
· Cost basis
· Estimate fidelity
· Present value
· Profit and loss
· Source of funds
· Tax implications
He does an admirable job in placing these concepts in context, and providing a clear overview of each.
The utility case study demonstrates the importance of understanding the overall financial dynamics affecting one's enterprise. For example, the differences between capital and expense budgets can be key in determining whether to purchase or lease equipment. As Reifert elaborates in the utility scenario, "Because this has been a profitable year, an increase in expenses [i.e. leasing as opposed to purchase capital expenditures] could have a profound positive tax consequence." The book has many examples of this type of valuable, integrated business insight.
Reifer has much sound general IT management advice mixed in with his financial message. A recurring theme through many of the discussions is the need for an executive sponsor, to provide political cover and tactical advice in forwarding the business case.
He also urges the reader to frame benefits in terms of cost avoidance rather than cost reduction-promising cost reductions often lead to the question, "OK, then who are we going to let go?" Not a good way to win friends.
I found his observations on the subject of central process quality assurance groups interesting:
"Reinventing staff organizations such as process and quality assurance groups is a good idea. Engineers assigned to such staff groups get stale once they've put in more than three years of service. Being in an audit and support role, they forget how hard it is to develop and deliver quality products under extreme deadline pressures." (p 137). The book displays a continual awareness of the need to balance these contending issues of cost, schedule, and quality.
The case study based on the industrial controls firm has an explicit architectural theme. This is an especially compelling discussion; software engineers are well aware how critical architectural decisions are, and how often they are compromised in the rush to write code. The discussion demonstrates how to make the case for architecture and include it in an overall work breakdown structure. Reifert is exceptionally creative in his case study creation, taking the opportunity to demonstrate hidden agendas, the pitfalls of contractor estimates, and developing a good working relationship with high-level consultants.
The book provides a solid summary of software estimation. There are whole books written on this subject, so the chapter is necessarily at a high level (although it does dive into some detail on the COCOMO II model in particular). However, it provides a valuable discussion of aspects of high-level IT budgeting beyond tactical project estimation, presenting numerous examples of cost breakdowns covering all phases of the systems development lifecycle, from architecture to maintenance.
The final case study moves into even more adventurous ground, discussing a company seeking to Internet-enable its internal systems via takeover (hostile if necessary) of a specialist firm. The ensuing narrative outlines the due diligence such a move requires, and the various tactical and strategic issues it may raise. A brief discussion of international intercultural relationships is excellent.
The book has only one minor flaw: it was obviously written during the dot-com bubble. There are frequent references to industry dynamics such as a venture-funded firm's survival depending on extreme time-to-market pressures, and perhaps an overemphasis on faddish Web technology.
This book is easily on my Top 10 software engineering book list. It provides a lucid, crisp overview of business issues that are all too mysterious to the average software engineer. Given the potential that well-architected, business-responsive software has to increase productivity, this volume is a service to both the software engineers and the enterprises that employ them.