Software Engineering is evolving, there is little doubt. Web pages and applications of today make even the most sophisticated software of even a decade ago look ancient. The speed of evolution is mesmerizing. This high-speed evolution has brought us many benefits, of which nearly the entire world has benefited. But in many ways, we have become victims of our own success. As described in my previous blogs, Call to Arms and Software Engineering Microevolution, it is critical that we take control of this evolution. In this blog, we will explore who the current players are, and how each of us can partake in this exciting new stage of our evolution.
The biggest players in the evolution of Software Engineering include the usual suspects: Universities and Industry.
Universities ponder in the realm of theory, coming up with new ideas of how to do things. A lot of great work is done here. In fact, my own intent to dedicate to this next stage of Software Engineering evolution was validated by Mary Shaw, Professor at Carnegie Mellon University.
Unfortunately, it seems that most of it is in the realm of Computer Science, not Software Engineering, as this is what generates most research funding. Universities compete against each other to develop the latest powerful techniques to open new frontiers in computing. With some exceptions, little is done in trying to improve how we produce software.
Large corporations such as Amazon, Facebook, Google, Microsoft, and Apple are similarly driven to develop the latest applications and techniques. Instead of being driven by knowledge and funding though, they are driven by profit. With a large budget, these corporations are able to hire top minds to work on cutting edge innovations.
Both these result in the very quick advances we are experiencing in software engineering, including the birth of programming languages, applications, frameworks, libraries, and other products, at incredible speed.
The problem with this approach though is that in concentrating in maximum profit and staying ahead of competition, few are concentrating on the actual process, of paying attention to the way we achieve things.
The result is a lot of pain and collateral damage. In fact, this strategy is similar to slash-and-burn agriculture. In haste to accomplish goals, we end up actually reducing both the quality of that produced, and its sustainability. The result is a lot of potential side affects, and an eventual need to abandon and start over.
This is where I think small companies can play a unique role in the evolution of Software Engineering.
Medium and Small Companies
Medium and Small companies are in a far different situation from universities and large companies in that with a smaller budget, typically Software Engineers concentrate on solving specific problems, and generally cannot afford to generalize solutions to larger problems. Because of this, one could argue that medium and small companies might benefit most from an improved Software Engineering process, enabling maximum return of investment and providing the advantage necessary to succeed.
And just as evolution starts at the micro-level, the large number of medium and small companies with unique circumstances and skill sets can act as fertile grounds for evolution. Innovation happens most naturally when the problems being solved are ones own.
This is an opportunity we should be taking advantage of through collaboration between universities and medium and small companies. It would benefit universities to find out what problems practitioners at medium and small companies are facing. This will enable them to research ways to facilitate and compound the micro-evolution happening. At the same time, universities can help connect medium and small companies and help spread best practices.
Zooming further in, micro-evolution actually starts with individuals. As individuals, we have the opportunity to not only work on the problems of our employers, but also follow our own interests. This enables us to potentially learn from our colleagues at other companies and universities and bring this back to our companies. This is what I attempt to do: learn as much as I can and apply this at my company to try and evolve Software Engineering in my company. Through evolution and learning, we can then later help spread the evolution.