HW2: Responses

26 Aug 2016

Software problems are becoming increasingly complex and time-constrained, and there’s no single way to meet the challenge. The key to success in professional software development is to apply solid engineering principles to deal with the growing complexity both of software itself and of the development teams that work to create the software.

I get the impression that some developers (or maybe all developers some of the time) are waiting for a fix-all solution to the challenges of modern software development. Maybe it will be the next new programming language, or the latest hardware, or heck maybe software will even help us improve code via artificial intelligence. There have certainly been groundbreaking and era-defining advances at certain times in the history of the computer age, but one might argue that the low-hanging fruit has already been picked, leaving us with the most fundamental and unavoidable challenge of software design - our own intellectual conceptualization of what we’re trying to create. We have overcome many of the circumstantial hurdles and roadblocks, but major future advances in software development will probably come to us through the disciplined use of our scientific method and engineering principles. Scientific research and engineering, two disciplines at either end of a pipeline of human understanding and productivity, have achieved enormous feats in the real world, from mile-long bridges and moon landings to agricultural and medical revolutions. History suggests that the same approach will bring software development into the same tier of success, reliability, and trustworthiness.

Google’s software development practices provide a fascinating example of how scientific and engineering principles can be applied at enormous scales to achieve enormous successes. The architecture of Google’s codebase allows any one of the thousands of developers to easily access virtually all of the code available to virtually any other developer in the vast company. This sort of open-source (within the bounds of the company) strategy is at the heart of any successful scientific enterprise, and I imagine that this basic design choice allows for as free a flow of ideas as one could hope for in a commercial organization. On the flip side of the coin, Google has developed an equally important sort of quality control system that ensures that, while developers can tinker with most anything they want to tinker with, only good code that has passed muster is incorporated into Google’s products. Integral to this system are automated and manually performed engineering tests at multiple levels, complete with teams that have the sole mission of ensuring that these tests are performed consistently for the safety of the product.

Google is one of hopefully many software companies that understand that there is no magic button to make good software. You need good developers, you need a creative and scientific culture that encourages those developers to innovate, and you also need really solid systems to thoroughly test their work. This sort of creative and systematic approach is the correct path forward for the software development of the future, and I hope that I get to one day be a part of a team that is committed to this approach!