This is the first blog post in a trilogy about how enterprises can solve the challenges of managing and configuring today’s increasingly complex business applications. Current practices are slow and inefficient. Smart organizations are discovering the secret of using tested, proven practices and tools from the world of software development.
Software development is hard.
In 1987, computer scientist and Turing Award winner Fred Brooks published a seminal paper on software engineering. In this paper, he stated that there’s no “silver bullet”, or a single game-changing development in software, in either technology or management technique, that will result in anything close to a tenfold improvement within a decade in productivity, reliability, or simplicity. He also added that we cannot expect to ever see software development improving exponentially as hardware does (following Moore’s law).
Brooks’ paper has also been used in conjunction with Wirth’s law (which states that software is getting slower more rapidly than hardware is becoming faster) to argue that software systems grow faster in size and complexity than the industry can develop methods to minimize that complexity.
While these statements have proven true in the thirty-plus years since they were made, it hasn’t stopped software developers from spending those decades perfecting the ways they code and deliver software. There may not be a single silver bullet, but the industry has developed a multitude of innovative tools and methodologies to not only create more efficient software programs but also streamline the development process itself.
Some of those creative tools, such as code abstraction and automated testing, allow developers to make progress without getting hung up on the smaller, internal details. Others, including code modularity, source control systems, and continuous integration, enable multiple programmers to work on a project without getting mired down in issues with version control or inconsistencies between each person’s work. Agile software development and its various best practices, as exemplified in the Agile Manifesto and in countless methodologies such as Scrum and Kanban, transformed the once-rigid day-to-day of software development. Moreover, modern delivery methodologies such as continuous delivery ensure that software changes—whether updated features, bug fixes, or alterations in configuration—go into production rapidly and securely.
This range of tools quickly became best practices for software engineers. They’ve transformed the software development process to greatly reduce complexity, increase efficiency, enhance team collaboration, reduce errors, streamline tasks, speed up feedback, enable faster troubleshooting and iterations, and shorten cycles overall.
The change has meant great progress for the software development world, but a similar transformation is needed when it comes to how we manage enterprise business applications. Modern organizations are dependent on dozens of applications, such as Salesforce, NetSuite, and HubSpot, that have a very high level of complexity in regard to their configuration and customization. As businesses grow, and as they work to adapt and compete in an increasingly dynamic, digital world, they need to move faster. The problem is that as they acquire a range of business applications to help them do that, managing and configuring those applications grow ever more complex and create a gap between the pace and complexity of requirements and the ability to deliver on them. In short, the solutions designed to make the organization more agile only succeed in slowing it down.
You might say those applications have the same inherent complexity present in software development—but the methods we use to develop and deliver them are too much like how software was developed 20 or 30 years ago: overly manual processes and siloed workstreams; non-visible artifacts and hidden dependencies; configuration drift and code bloat; making changes in one area breaks functionality elsewhere; it takes hours or days to find bugs and eliminate them. The process is broken and needs to change.
Taking a cue from the DevOps revolution
Interestingly, the IT infrastructure world faced a similar crisis 10 to 15 years ago, when IT people could not keep up with the increasing rate of requirements coming from the then-siloed development teams and had a very hard time operating the systems those developers created. Back then, developers in high-end companies started utilizing advances in technology (around virtualization, APIs, and cloud computing) to take ownership over their IT infrastructure and operating their systems, while using concepts, tools, and methodologies they knew best—the ones used when developing software. Coupling this with breaking down the silos between developers and IT operations led to a new mentality, which ultimately became DevOps, enabling developers and operations experts to find new ways to work together more collaboratively while delivering products faster and more efficiently.
DevOps borrowed heavily from the tools and methodologies developed by software engineers and adapted infrastructure teams to enable faster building, testing, and deployment of projects across the entire enterprise. Key to that goal was the concept of managing all infrastructure as code artifacts in a source control system (such as Git), as made possible by innovative tools such as Chef, Puppet, Ansible, and HashiCorp’s Terraform.
Infrastructure as Code, or IaC, reduces friction and enables better collaboration between disparate teams. It uses best practices from software development, including automated testing, continuous integration, and continuous delivery, to simplify infrastructure change and management. The benefits of the “as-code” approach include:
- Instant visibility, enabling versioning and collaboration
- Enabling automation, which in turn improves efficiency, speed, and simplicity
- Minimization of risk by eliminating manual processes, and increasing governance and compliance without slowing down the organization
- Streamlining processes across systems and departments
It is clear that DevOps and the “as-code” revolution have been extremely beneficial for modern enterprise IT.
In our past companies, we saw how software development best practices were successfully translated into best practices for IT infrastructure, both as tool makers as well as builders and operators of highly scalable internet services. This led us to found Salto, where we are doing the same thing for business applications. The best way to address the applications’ complexity crisis is to take many of those same transformative tools and adapt them to the specific needs of managing business applications.
In the next post in this series, we’ll focus on a few key building blocks that worked for software development and DevOps and demonstrate how they can work together to reduce complexity and streamline the configuration and customization processes of business applications.
Gil Hoffer, Co-Founder and CTO, Salto