It's been repeated so often that now it's not even questioned: Software projects fail not because of technology missteps, but because of 'business issues'. That's a catch all phrase for misunderstanding business needs, implementing the wrong features, or poor resource management.
But like so many items that have become conventional wisdom, this one is also only right some of the time. Sometimes projects fail because of technical issues. Like every other profession, there is a bell curve of skills and abilities. Some developers (and architects, testers, and designers) just aren't real professionals, and don't follow a professional software development practice of any sort.
In particular, our business, SRT Solutions, often helps companies whose primary skill is not software development. It's in whatever domain they are targeting: healthcare, manufacturing, engineering research, or whatever. That means all these issues become problems:
Software Architecture: Architecture is a study in tradeoffs. Which goals are most important? Which goals are secondary? Of course, customers say everything is important, but which matters more? In particular, we run into companies that don't have answers for:
Scaling: How many users must the system support? When? How fast will the user base grow? How will that growth be accommodated?
Longevity of the code base: Release 1 is usually fairly simple. It's creating release N + 1, as N grows that gets more and more difficult. What about backwards compatibility? What constitutes a breaking change? How will you migrate or update your data store to handle unexpected upgrades? And, understand that every project will have unexpected upgrades. That's even more true as the release number keeps growing.
Platform: How will your users interact with your software? Is it a web site? A web –based application? Smart Client? Some combination? Something even more radical? Why?
In addition, many of the smaller startup companies we work with have absolutely no knowledge, or even awareness of software development practices. Even rudimentary software engineering topics like source control is foreign to some of these companies. Moving beyond that, what processes should be adopted? Is it agile? If so, Scrum, XP, or something else? How do you handle change requests? How do you do validation? Rollout?
If you're reading my blog, you probably have very strong opinions on all these topics. You probably are a software engineer (or some other title related to software developer). But, how often do you feel that the 'business side' just doesn't get it? You're correct, that these issues are important. Without quality software, your business fails. But the business side doesn't understand that.
That attitude is just plain wrong. Labeling those functions 'the business side' and 'the technical side' cause some of the problems. Everyone is focused on succeeding as a business, generating revenue and profit by delivering solutions to customers. Mutual respect helps a great deal: regardless of your function, you must recognize that other functions are equally important to the overall success. Software people must understand that the software they develop must satisfy real business objectives. True success will be achieved only when we, the technical experts, champion issues of quality, tools, techniques and practices that will promote technical excellence, in parallel to business excellence.
Here's the punch line:
It's your job as a technical professional to engage the business leaders and help them understand why software engineering is important.
What are the business risks if you create software without source control?
What happens to your business if you can't create release 5 as quickly as you created release 1?
More importantly: What happens if your company has developers that don't care about those questions?
That's the real issue: If your company creates software, you need to have a strategy to create excellent software. Otherwise, the software becomes a burden, and a risk – not an asset. Often projects fail to achieve the business goals because of technical issues, not business issues, or communications issues.