Over the past few years, enterprise software environments have become cloudified and containerized, upending the definition of a "data center" from a room within the walls of the enterprise to highly distributed networks of computers across the globe. Cloud computing meant it no longer mattered where servers were located or who maintained them. The rise of Docker helped open the concept of containers, introducing unprecedented portability for apps and underlying systems. Kubernetes then emerged as a key orchestration tool for a container-rich environment, fueling the DevOps revolution.
As cloud, containers and Kubernetes have settled into the enterprise, teams are now focusing on more flexible infrastructure and ecosystems, and an emerging platform, Terraform from HashiCorp, is getting a lot of attention.
Terraform and other developments on the cloudified and containerized enterprise software scene were examined by ThoughtWorks in its latest Technology Radar, which explores the technologies being used by its teams and clients. The ThoughtWorks team is extremely excited about Terraform:
"Terraform is rapidly becoming a de facto choice for creating and managing cloud infrastructures by writing declarative definitions. We like Terraform because the syntax of its files is quite readable and because it supports a number of cloud providers while making no attempt to provide an artificial abstraction across those providers. The active community will add support for the latest features from most cloud providers. Following our first, more cautious, mention of Terraform almost two years ago, it has seen continued development and has evolved into a stable product with a good ecosystem that has proven its value in our projects."
The ThoughtWorks team also recommends adoption of the following leading-edge technologies and techniques:
Micro front ends: "Microservices have allowed teams to scale the delivery of independently deployed and maintained services," the ThoughtWorks analysts explain. "Unfortunately, we've also seen many teams create a front-end monolith -- a large, entangled browser application that sits on top of the back-end services. Since we first described micro front-ends as a technique to address this issue, we've had almost universally positive experiences with the approach. So far, web components have been elusive in this field, though."
Opinionated and automated code formatting: "What style to use for formatting code has been a matter of personal taste, company policy and heated debate. Finally, the industry appears to be tiring of this endless argument and teams are freeing up surprisingly large amounts of time by forgoing these discussions and just adopting opinionated and automated code formatting tools."
Polyglot programming: "We're seeing a new push to standardize language stacks by both developers and enterprises. While we acknowledge that placing no restrictions on language uses can create more problems than it solves, promoting a few languages that support different ecosystems or language features is important for both enterprises to accelerate processes and go live more quickly and developers to have the right tools to solve the problem at hand."
Secrets as a service: Software build pipelines "need secrets to interface with secure infrastructures such as container registries, the applications use API keys as secrets to get access to business capabilities, and the service-to-service communications are secured using certificates and keys as secrets. We've been using secrets as a service as a default technique for storing and accessing secrets. With this technique you can use tools such as Vault or AWS Key Management Service (KMS) to read/write secrets over an HTTPS endpoint with fine-grained levels of access control. Secrets as a service uses external identity providers such as AWS IAM to identify the actors who request access to secrets. Actors authenticate themselves with the secrets service."
UI dev environments: "As more and more teams embrace DesignOps, practices and tooling in this space mature. UI dev environments provide a comprehensive environment for quickly iterating on UI components, focusing on collaboration between user experience designers and developers. We now have a few options in this space: Storybook, React Styleguidist, Compositor and MDX. Many teams were able to decrease their UI feedback cycles and improve timing of UI work in preparation for development work, which has made using UI dev environments a reasonable default for us."
In addition, the ThoughtWorks team is seeing a number of promising new tools and technologies bubbling up under the surface. Here is a sampling of the tools and technologies cited that still need further evaluation and real-world testing, but they're worth studying:
Smart contracts: "Committing automated, irrefutable, irreversible contracts on [Distributed Ledger Technologies] sounds great in theory," the ThoughtWorks team says. "The problems arise when you consider how to use modern software delivery techniques to developing them, as well as the differences between implementations. Immutable data is one thing, but immutable business logic is something else entirely. It's really important to think about whether to include logic in a smart contract. Our advice is to think long and hard before committing business logic to a smart contract and to weigh the merits of the different platforms before you do."
Ethical OS: "Ethical OS is a thinking framework and a set of tools that drive discussions around the ethics of building software. The framework is a collaboration between the Institute for the Future and the Tech and Society Solutions Lab. It's based on a practical set of risk zones, such as addiction and the dopamine economy, plus a number of scenarios to drive conversation and discussion."
CloudEvents: "Outside the function code itself, applications written as serverless functions are tightly coupled to the cloud platform on which they're hosted. Although events are a common FaaS-triggering mechanism, and every cloud provider supports them in some form, the current proprietary specifications prevent interoperability across clouds. The CloudEvents specification is a burgeoning standard that has been accepted into the CNCF Sandbox. The standard is still in active development but several language bindings exist and Microsoft has announced first-class support in Azure. We're hoping other cloud providers will follow suit."
Knative: "Knative is an open-source Kubernetes-based platform to run FaaS workloads. There are few things that stand out about Knative: it's open source and provider agnostic; it implements the serverless workflow; it ensures cross-service interoperability by implementing its eventing interface consistent with CNCF CloudEvents specification; and, most importantly, it addresses a common challenge of operating a harmonized and yet hybrid FaaS and long-running container-based architecture. It easily integrates with both Istio and Kubernetes."