Microservices for Innovation

Companies today have more decisions to make when it comes to their application infrastructure than ever before. There are lots of choices that need to be made when designing, extending, or remodeling your infrastructure. Whether you have existing systems and integrations, or you are starting out on a new project, leveraging microservice design can provide you with flexibility and reduce future costs. A microservice architecture allows for systems to be swapped out with minimal effort and exposes innovation opportunities that may otherwise be lost.

Why Microservices?

It may be difficult to fully comprehend why microservices are beneficial, especially if you are used to working with monolithic systems. Approaching microservices pragmatically, any service can be part of a microservice architecture, regardless of its internal size and structure. Microservices allow you to explore opportunities for different languages, platforms, and vended systems that may otherwise be costly or difficult to integrate with. Following this pragmatic view of microservices, you can add new services around an existing system or systems that extend or modify existing functionality.

Microservices reduce the amount of time, energy, and cost associated with new development. They do this by providing clean decoupling between systems. This reduces constraints on new development and streamlines development and testing. Each service has a smaller domain. Training, hiring, and cross team collaboration are made easier by each service having a distinct responsibility, making them easier to understand from a development perspective. Maintenance and support costs are also greatly reduced as services are easier to modify without unintentionally affecting other parts of the system. Adding features and performing upgrades for each service is easier due to their reduced scope.

Organizational Benefits

Using a microservice architecture makes it easier for your organization to hire top talent, train new workers, and collaborate effectively both internally and externally. It makes internal collaboration easier. People know who to talk to and where to go for support when the system is organized around specific business capabilities. You can easily swap out pieces of functionality as needs change, make business decisions quickly, and execute them in an agile manner. Microservices improve the productivity of your organization as a whole. You are building products instead of projects, meaning that teams own a product over the course of its entire lifetime and therefore are invested in the success of that product.

Infrastructure Benefits

A microservice architecture provides many infrastructure-level benefits for your organization. Structuring your applications as microservices can reduce costs, ease the friction required to deploy changes regularly and frequently, and provide the ability to fine tune resources based on peak demands to ensure high availability.

Cost Benefits

Microservices provide the opportunity to reduce your expenses related to hosting a traditional monolithic architecture. In a monolithic architecture, your entire application demands must be met by a single machine hosting your application, database(s), caching services, and web server/proxy to name a few. In contrast, each microservice can be scaled back to only the minimum resources needed to accomplish its tasks in a more limited domain. This translates to cheaper options for CPU speed and number of cores, memory size and speed, as well as smaller disk requirements for a given microservice.

Deployment Benefits

Each microservice can be deployed independently from other services. This reduces friction and overhead and leads to faster, more frequent deployment options. Your business can respond to change at a much faster pace than what is normally possible with monolithic architectures. By reducing complexity in your architecture, you can keep your changes small and lean. This has the added benefit that changes are easy to undo if something were to go wrong. When services are smaller, isolated, and provide a much narrower scope of domain, making changes is much less expensive.

Scalability Benefits

Each microservice can be individually scaled up or down depending on its role and current usage patterns. This means that you can have a minimum availability and quickly scale up when demand is high, for example when your customers are typically active during the day, but inactive at night. This means cost savings on resources and allows for easier profiling of typical demand – you can see where the bottlenecks in your system are more easily.

Maintenance and Support Benefits

Microservices provide maintenance and support benefits such as reducing the overhead associated with managing your application dependencies and ensuring that critical patches are made in a timely manner as well as making your application easier to test from both developer and end-user perspectives.

Dependencies and Software Upgrades

The reduced complexity of microservices compared to monolithic architectures means that the impact of changes is greatly diminished. This translates to less possible conflict when upgrading your dependent packages. Normally when evaluating an upgrade of an application dependency, one will need to evaluate the impact on the existing code base in all the touch points where the dependency is used. If the application is structured as a microservice, you can pick away at the places a dependency is used, and each individual upgrade is much easier as you typically have fewer touch points and interactions in a given microservice. This means faster upgrades and reduced risk when critical patches are needed – particularly reducing risk when needing to upgrade to fix security holes.

Testing

Unit, integration, and other kinds of software testing of your application are important to ensure that functionality is working as expected and will not break when future changes are made. With a microservice architecture, you can continue to write unit tests the same way as in monolithic architectures, but integration tests take on a slightly different role. The definition of a clean interface between services is critical to ensure correctness in this model as interactions occur between services instead of between modules of code. The nice thing about microservice testing in this regard is that you can test services completely in isolation to ensure that they are respecting their declared interfaces without worrying about finding all the places in the codebase that might interact with them directly or indirectly, which can be a difficult undertaking and hard to cover with adequate scenarios. Not only this, but once you are confident with the interface of a service, you can expect that callers of that service will get the exact same results – this decreases the risk for system wide issues because each service is fully defined and tested. Additionally, testing of one service can be done concurrently with application development and testing of other services – which means that testing overall is faster and less costly.

With microservices, you know exactly what end points are available in your application and exactly what to expect for input and output – there are no hidden gremlins to discover. The discussion of proper application testing is outside the scope of this document, however microservices provide the kind of environment that makes testing more approachable. This means lower costs to the organization and decreased risk due to unexpected errors.

Conclusion

A microservice architecture is advantageous to modern software development. It decreases risk while reducing development and maintenance costs. It makes it possible for concurrency in development, testing, deployment, and scalability. This architecture allows developers to combine the benefits of programming in the small while also programming in the large. It makes it possible to hire from a more diverse pool of candidates due to reduced complexity and institutional knowledge needed to be productive. Changes happen frequently and regularly and in an agile manner. You can react quickly to your customers’ needs and provide unprecedented responsiveness and support. You will find that converting to a microservice architecture will not only make your employees happier but delight your customers. You owe it to yourself to consider the change.