The way we code is evolving. Gone are the days when development teams across the organization used a single stack for all services. Today, developers combine hundreds of code components, such as open source and proprietary packages, third party APIs and various Cloud-based technologies to piece together the final product.
What are code components?
Code components are the building blocks used to build applications, forming the basis of the code that creates your products. They are the Lego bricks you need to put your software project together. For example, NodeJS packages (like expressjs), Auth0 or DynamoDB are all examples of code components. Most of the development work nowadays is based on assembling code components and then writing code to make these components work together.
Commonly used code components
- Self- managed code components: To retain control of your projects, especially if the code component functionality is the core of your business, organizations often prefer to use as self-managed code components. But as with everything else, it is the question of time, price, availability, and compliance.
- Open source packages: Most languages have package registries that can be searched for code components that perform certain functions.
- Saas solutions and Web services – These components are managed services and require no maintenance on your end.
Why should you leverage code components?
In the age of digital transformation and DevOps culture, companies that are limiting their stack will inevitably lose to competitors. By embracing a wide variety of code components, organizations of all sizes can push the boundaries of innovation and attract skilled developers. In short, leveraging code components is a must.
The variety of different application building blocks and technologies available today is massive. Transition to the cloud, microservices architecture and open source, have all contributed to the growth in popularity of code components. Developers often face a new challenge of keeping score of what technologies they already have and what code components are used throughout their organization.
Within a single organization, small independent development teams write in different programming languages, using different stacks and tools. As a result, there are just too many code components to keep track of.
No visibility means no code components reuse
In the ideal world, if one developer in your organization creates or implements a component with a certain functionality, then no other programmer should have to write that functionality ever again. The component should be easily discovered in the organizations’ repository, and used by all your development teams, for all applications that require that specific functionality. Code reuse brings development cost down significantly, by saving time, resources and, not to mention, developer’s nerve cells.
With the number of code components currently, however, there is no visibility into what code components are used throughout the organization. And if you don’t know what code components are used by other developers and teams within your organization, eventually you will waste a lot of time on the redundant work of coding and implement solutions that already exist.
From an unnecessary complexity...
In order to stop reinventing the wheel over and over, you need to know exactly what components are used, how they were implemented and where. Currently, in order to find out which code components are used in your organization, you need to do a deep dive into the code. It takes a lot of resources, and no one has time to do that kind of detective work when facing today’s delivery requirements.
As a result, you end up using multiple code components to do the same job. And now you have to maintain multiple versions of redundant components such as five different argument parsers, or multiple MongoDB drivers. Enter the usual suspects that come with maintaining multiple systems such as security vulnerabilities, integration issues, cumbersome maintenance, painful upgrade process and difficulty of introducing new team members to your mess of a code.
… To order in the world of code components
To take the full advantage of the transition to microservices, cloud-native, and agile development without compromising visibility and discoverability, it is essential to keep track of the code components we use.
Part of the new order also dictates that managers should give developers the freedom to choose code components from the ecosystem without limiting package choice through overly strict policies which can be crippling to the development life-cycle and transition to the DevOps culture.
Bottom line, between granting developers freedom to choose their preferred tools, having full visibility into your dev stacks and knowing which components are being used on each project, will allow teams to bring back innovation and efficiency into the dev-lifecycle.