Agile architecture and developer productivity

Agile as we see most of the time, focuses on teams, not in architecture. For complex projects to have success, it is not enough having agile teams, it is necessary to have agile architecture too.

Managers can design agile team, but they can not design agile architecture.

When I refer to complex projects, I want to refer to project with more that million lines of code, more that 3 agile teams, with multiple sub-systems that have to work together. When dealing with project of this size, if we get our architecture wrong, then the agile team might have hard time and may be even some sleepless night.

What is agile architecture?

Well, agile is all about breaking dependencies. Break dependency between systems as much as possible, then you will get an agile architecture. But the real problem is, when dealing with complex projects, it is fairly easy to complicate but it is difficult to simplify. Most of the time easier path is selected, hence the problem.

So what can be done?

Designing loosely coupled systems so that one developer can work in one system, test that system and commit/check-in code of that sub-system without having to worry about any sub-systems. Smaller the code base developer has to worry before making any changes, higher the developer productivity. Higher the developer productivity, higher the probability of success of the project.

Reduce the number of attributes, developers have to verify before making any commit. If 'n' is the number of attributes that developers have to verify, then 1/2n is their productivity, so reducing the number of attributes helps to increase developer productivity.

Test Driven Development (TDD) can help to make your code loosely coupled, highly maintainable and enhance developer productivity. Note: if it is difficult to test, it can be sign of code smell. In such case refactoring the code to make it simpler to test helps.

Is it a new concept?

No. Coupling (dependency) is well defined and widely used concept. It is the degree to which each program module relies on each one of the other modules.

Advantages of low coupling system are: well-structured computer system, good design and when combined with high cohesion, supports the general goals of high readability and maintainability.

And disadvantages of tightly coupled system are: a change in one module usually forces a ripple effect of changes in other modules, assembly of modules might require more effort and/or time due to the increased inter-module dependency, a particular module might be harder to reuse and/or test because dependent modules must be included and loss in developer productivity

No comments:

Post a Comment