A cure for complexity in software development

A cure for complexity in software development


I recently read Scott Carey’s great InfoWorld article that focuses on the complexity of the application as an agent for reducing productivity and livelihoods for developers.

The article has some great ideas, such as focusing on curbing complexity by using standardized third-party services and other techniques. This is a strategy that I agree has value for many organizations.

However, the article also states that microservice architectures are more complex than the equivalent functional application in a monolithic architecture, and uses it to promote the cause that “complexity kills.” I do not agree with this assessment.

The implicit message I take from this point of view is that microservice architectures create complexity that reduces the efficiency of developers. This is not true. Microservice architectures create a generally more complex application than an equivalent application built as a monolith, but this does not mean that the work of the developer or architect is more complex as a result.

Complexity of microservice architecture

Many companies have created large monolithic applications just to meet a burden of complexity. Too many developers working on a single code base makes it difficult to add features and fix bugs independently. This limits the number of concurrent projects that developers can work on in a single application. In addition, individual projects make changes that can have a broad impact on the code base, an impact that becomes more difficult to understand as the application becomes larger and more complex. Taken together, these problems lead to more defaults, lower quality, and an increase in technical debt as complexity continues to increase.

When you split an application into separate modules or parts, you’re trying to split that complexity to reduce the number of developers who need to work on a single code base. Also, reduce the impact of your changes. This tends to create more stable code, more compatible code, less technical debt, and higher overall application quality and developer productivity.

Improving application quality and stability and improving developer productivity also lead to a better developer experience, reducing fatigue, exhaustion, and ultimately team rotation. development.

There are many ways to modulate an application, some more effective than others. The best model for modularizing applications is to use a microservice-based application architecture.

Combining a microservice architecture with a solid model for organizing your development teams and their ownership and responsibility, you end up with an organization where individual developers can focus on a smaller code base. These developers end up being more efficient and productive, and create higher quality code with less technical debt. These developers experience greater job satisfaction and less exhaustion.

The application as a whole may be more complex, but the individual piece on which a single developer should focus is substantially less complex. Thus, the microservice model enhances the developer experience.

Not all microservices are equally micro

However, simply switching to a service-based or microservice-based architecture does not automatically give you that advantage. Rather, you need to design your application rationally and organize your computers appropriately. There are two things to keep in mind in particular: the size of the service and the organization of the equipment.

Service size

The size of your services has a big impact on the complexity of developers. If the size of your services is too small, your application ends up with a very large number of interconnected services. This connectivity between services significantly increases the inherent complexity. Your application as a whole becomes more complex. Your developers see this complexity and have to deal with it, first and foremost defeating the purpose of moving to services.

If you oversize your services, you will lose the benefits of microservice architectures. Your services become mini-monoliths, with all the inconveniences of complexity of the larger monoliths. Again, individual developers have to deal with greater complexity, and you have simply switched to multiple complex applications instead of a single complex application. These mini-monoliths can alleviate the complexity load of the developer in the short term, but not in the long term.

Only when you properly size your services do you achieve the right balance that effectively decreases the complexity and cognitive load of your individual developer.

Team organization

Team size, structure, ownership responsibilities, and lines of influence are as critical to creating your application as the code itself. To manage a service architecture efficiently, you need to properly organize your development teams around the application architect. In addition, your teams must be given the responsibility, authority, ownership, and support necessary to provide complete management of their services.

Failure to provide this organization and support will add a different kind of complexity that is just as destructive to your organization. Team organization, along with proper team assignments and the establishment of responsibilities and ownership, is critical to reducing the cognitive load of the application for individual developers.

I recommend the standard STOSA organizational model, which describes a model for creating your organization and assigning team-level responsibilities in a service-based application architecture. I cover the STOSA model extensively in my book O’Reilly Media, Scale architecture.

Tools to reduce coding complexity

Going back to my partner’s original article, which focuses on reducing complexity for developers, there are other techniques you can use to achieve this, as well as leveraging STOSA microservice architectures and organizations.

One technological direction that will have great benefits in reducing the complexity of developers in the future is software-assisted development. This is the ability to use tools, often assisted by artificial intelligence (AI) and machine learning techniques, to help the developer write code, diagnose code problems, and manage the overall complexity of the code.

There are many companies that focus on software-assisted development tools for programmers. The GitHub Copilot AI Wizard for Visual Studio Code uses AI to help developers write more reliable, less flawed code. Performance monitoring companies such as Datadog and New Relic recently announced tools that provide high-end support for developers to diagnose problems within their code. Finally, coded and low-coded tools, such as the OutSystems application development platform, provide support for creating higher-level services that reduce the cognitive load needed to create and deploy individual services and applications.

Application complexity is an issue that most organizations have to deal with, and the way you handle it will affect the future of your application, the health and stability of your development organization, and the future of your application. your company. But there are many ways to deal with the complexity of the application. The approaches discussed by Scott Carey, which include creating an internal platform and standardizing services outside of your organization, are great strategies.

But also seriously consider microservice architectures. While microservices can increase the overall complexity of the application, they add value to reduce the cognitive load and complexity visible to individual developers. This will lead to higher quality code, higher availability, lower technical debt, and better developer morale.

Copyright © 2021 IDG Communications, Inc.



Source link

Related post

EDUCAUSE 2022: How Data Collection Can Improve Student and Faculty IT Support

EDUCAUSE 2022: How Data Collection Can Improve Student and…

At Indiana University, Gladdin said, to make life easier for students and faculty, they implemented a course template for the Canvas…
UGC, AICTE warn students against online PhD programmes offered by EdTech platforms | Latest News India

UGC, AICTE warn students against online PhD programmes offered…

The University Grants Commission (UGC) and the All India Council for Technical Education (AICTE) on Friday issued a joint advisory against…
UGC, AICTE warn students against online PhD programmes offered by EdTech platforms | Latest News India

UGC, AICTE warn students against online PhD programmes offered…

The University Grants Commission (UGC) and the All India Council for Technical Education (AICTE) on Friday issued a joint advisory against…

Leave a Reply

Your email address will not be published.