When It Comes to Application Development, Never Stop Learning
“…the engine, from its capability of performing by itself all these purely material operations, spares intellectual labour, which may be more profitably employed.”
–Ada Lovelace (1843)
What does a 173-year-old quote about a theoretical machine have to do with modern application development?
It’s the beginning of the story.
Lady Lovelace, considered by many to be the matriarch of Computer Science, was quite prescient in envisioning a future that included advances such as a working version of Charles Babbage’s Analytical Engine–the world’s first sketch of a mechanical computing machine. The future that Lovelace envisioned was one where the value of computation manifested from its ability to augment human endeavors. This was a future where, as Lovelace suggests, human capacity to learn and develop skills could be increased by offloading tedious operations one performs onto a machine, allowing them to concentrate their efforts on more transformational activities.
Imagine Lovelace’s wonder if she were around to see the mechanical computing we have available via devices that conveniently fit in a handbag. The topography of the economy is shifting faster than ever—invention and circumstance have provided every company an opportunity, in some cases a mandate, to create and capture value by learning to deploy and leverage software effectively.
Software and other technological advances have begun to permeate into more traditional industries, for example, financial services. In a 2011 Wall Street Journal article, Marc Andreessen, founder of the venture capital firm Andreesen Horowitz, wrote that, “software is eating the world.” In April of last year, Jamie Dimon, CEO of J.P. Morgan, advised company shareholders that “Silicon Valley is coming.” These executives are recognizing the fact that Silicon Valley is no longer limited to tech start-ups looking for the next, new thing, but they are also turning to improve on what we have been doing for decades.
Silicon Valley has been the wellspring of innovative technological tool creation since the middle of the 20th century. While software is one of the newer entries on a long list of accomplishments, it has become a staple of the industry. Companies that create software are quickly becoming the leaders when it comes to functioning in the new economy.
Andreessen’s editorial calls his readers to action:
“…let’s seek to understand how the new generation of technology companies are doing what they do, [and] what the broader consequences are for businesses and the economy…”
There are countless methodologies, hacks, and frameworks that have followings within the tech industry, but among these disparate ideas are common themes, some of which have been adopted by companies that are just beginning to mature. One of these methodologies, Agile Software Development, has risen to prevalence as it emphasizes frequent, small deployments that allow shorter time to market and more opportunity for feedback and innovation. However, these short time frames do challenge IT Organizations to manage short turnover times while still ensuring quality. To address this, a grassroots movement called DevOps was born. DevOps was named as an homage to its organizational roots: it is a framework designed to resolve frictions between development teams and operations teams. Here are the key themes that DevOps encompasses, and how we believe they can be applied:
Leverage development as collaboration, not as utility
A key tool that DevOps practitioners utilize is the automation of various stages of the development cycle: Code, Build, Test, Package, Release, Configure, and Monitor. For example, Docker is a software that packages “a complete filesystem that contains everything it needs to run: code, runtime, system tools, [and] system libraries,” allowing developers to get their products in front of their users faster, encouraging immediate feedback and collaboration.
Aside from its organic origins, the DevOps methodology is compelling in that the framework distills priorities into a set of impactful and simple goals—it boils a large problem to its smaller parts and aggressively addresses those, allowing teams to focus on the critical path tasks and not get lost in the full project or program. The benefits of adopting this methodology won’t just change the way software is delivered, DevOps promises to change the way colleagues interact. It aims to not only make their lives easier through increased delivery of quality software that increases productivity and collaboration, but it also will introduce core concepts still relatively new to management science.
Adopt systems thinking
Systems thinking advocates the optimization of the whole. Systems thinking is a deviation from the common perception that events in the development cycle must happen in a linear and predictable order. DevOps advises to look at how the value chain of the business operates as a whole. In systems thinking, root causes are not functions of individual events, but rather they are forces emerging from overarching feedback loops and interactivity.
Amplify feedback loops
As a compliment to thinking in systems, DevOps encourages enterprises to focus on learning-oriented iterations, instead of task-oriented iterations. Task-oriented iterations focus on completing various isolated tasks per the business requirements or technical design. Learning-oriented iterations repetitively asks the question, “knowing what I know now, how do I think the system is going to operate as a whole?” This allows the design to evolve as new aspects of the project come to light.
Amplifying feedback loops is all about capturing the value of the information as it’s yielded (and then scripting the process so it can be repeated programmatically). Because information, according to Claude Shannon, the father of Information Theory, is a surprise, one cannot assume that it can be captured in advance. System development should take into account that new discoveries, dependencies, and limitations are unearthed throughout the process.
Foster a culture of continuous learning and experimentation
Effective problem solving relies on the human ability to recognize patterns, correctly attribute cause and effect, and define the proper response to issues. In systems thinking, outcomes aren’t binary. They are emergent and numerous. In order to solve problems in this environment, you need a culture of continuous experimentation. Systems should be instituted to reward cultural contributors. Of course, not everyone will contribute in the same way. In a pluralist organization, there are teachers, learners, thinkers, talkers, leaders, and dissenters. Balanced properly, the combination of these roles will allow your organization to continue innovating through experimentation.
Although applied to the functions of IT Operations and Application Development, the DevOps themes I’ve outlined can also be applied across the board. In almost every industry, incumbent firms believing their companies are safe will find themselves competing with resilient and agile firms that are raising the bar on service levels and delivery – many of these firms have adopted these DevOps principles in some form or another.
The adoption of a common language, where expectations can be communicated and the course of action can be debated, fosters an atmosphere of productivity. Organizations should strive to be self-aware learning institutions that prioritize a framework of transparent collaboration.
How to get started: A Technological Approach
At the summary level, adoption of the DevOps methodology may seem like a seismic shift, but it does not necessarily have to be wholesale changes to all aspects of both operations and development teams’ processes.
A good first step is to introduce the technical capability on-demand resource accessibility. The advent of Cloud computing has made this capability affordable, scalable, and accessible to anyone with an Internet connection. With Cloud computing, you are now able to deploy and decommission servers on-demand and only pay for them when they are in use. This allows you to package the configurations for your development environment, aiding in five out of the seven fundamentals of DevOps—Code, Build, Test, Package, and Configure.
At Kenway, we recently led a project to virtualize a replication of key components of a client’s infrastructure in Microsoft Azure, Microsoft’s Cloud computing offering. This firm was experiencing consistent production halts due to instability in their Extract-Transform-Load (ETL) processes. To further exasperate those issues, the development team did not have access to a testing space prior to deploying changes to production. When code cannot be tested before deployment, downstream impacts cannot be assessed which could lead to one problem resulting in multiple others.
Knowing that the core competency of this firm was not application development, we immediately recognized that an effort to reduce production downtime would require:
- Improved visibility to the various technical processes and common issues
- The ability to develop and validate enhancements and changes before they were deployed to the production environment
- A structured framework to capture code changes and deploy them to production in order to minimize unwanted impacts
To achieve these objectives, we advised that an on-demand test space be deployed on Microsoft Azure and a concerted effort to increase visibility into the development process be created.
With Kenway’s help, this firm now has access to a virtualized clone of the backbone of their ETL architecture where feature enhancements and changes can be developed, and the impacts of these modifications can be tested before being merged back into production. As bug fixes and enhancements cease to impact day-to-day business via unforeseen issues, the development team will begin to build trust with end users. This trust can be leveraged as a springboard to subsequent projects that will allow for transformational shifts within the organization, both technically and culturally.
These concepts are the next generation of management paradigms, and it’s just the beginning. They can help your team begin to pull solutions from the pool of available technologies instead of entertaining the expectation that tools will be pushed into their hands. They can help accomplish the ultimate goal of application development – creating tools that allow us to redirect our effort so that they can be more profitably employed, just like Ada Lovelace said.
Interested in learning more about DevOps or have more questions about application development? Contact us at firstname.lastname@example.org. We’d love to collaborate and learn along with you!