The constant problem

We as developers usually want to upgrade our project with the latest and most efficient technologies, frameworks and libraries. Often such experiments cause a lot of troubles because of variety of reasons:

  • our project/system is not really ready for this changes
  • we tried it too early when it was not ready to be used in real production projects
  • we don’t really understand how to use it properly

In this article I would like to talk about tools that can help us to assess current state of our organization/team/project, technology that we would like to use and make a wise decision about usage.

Is our system ready?

There is a concept of maturity model which helps to:

  • assess the current state of the system
  • get objective assessment from the independent source
  • determine and visualise desirable state for short and long term periods

The idea of this model is to have the list of characteristics that describe the most valuable parts of your project/system/organization and corresponding grades.

So each characteristic should be assessed and grade should be assigned to it. Eventually maturity model will look something like this: maturity-model-list

As you can see each characteristic has it’s own grade and weight. Multiplication of these parameters means the weighted grade in the context of your project.

How precise is our estimation?

When your team finishes assessment you will get your perception of the current state - but most of the time our own estimation is far from reality. That’s why we need independent assessment which gives you:

  • independent estimation of the current state
  • feeling in what areas you have to correct your perception - this is the most valuable thing.

What’s next?

With your estimation and independent assessment of your system you can already find the right directions to evolve and here comes one of the most challenging part - planning. The idea is to identify desirable states of the system in the future:

  • defining the characteristics which has to be improved and it’s desirable rating
  • defining the concrete steps to be done to achieve this state

Eventually using assessment points we can build chart that can look like this: maturity-model-list

Sub-conclusion

Maturity model is an useful instrument that can help us understand the current state, visualise it, compare with independent point of view and eventually identify areas that has to be improved. Surely this is not the ideal tool, because it requires significant efforts for analysis and maintenance of this analysis. It is not suitable for startups or startup like projects, but will be really useful in companies which want to evolve.

For me this maturity model concept looks like unit testing concept in programming:

  • first you have to create tests (list of characteristics)
  • then you can assess test coverage with your own feelings
  • then you run unit tests with test coverage report to see the real results
  • then you see methods and lines of code that are not covered by your unit tests
  • eventually you improve test coverage based on the report In both concepts we are testing our system and creating the set of explicit indicators whether it works well or not. And as unit tests maturity model has to:
  • have well defined grades with detailed description
  • evolve with the project/system
  • should represent an independent point of view
  • be updated and used as frequently as possible

Should we adopt latest technologies in the project?

This is the question on which we as a developers usually want to answer definitely, because it means learning of a new cool stuff. But from the other hand we all understand that sometimes it may hurt us a lot in the future. One of the solution here might be maturity models of libraries we want to use. Right now I know that there is such thing as Forrester technology wave or Gartner's magic quadrants - charts that help us to understand the estimated status of different technologies. But recently I found out about technology radar made by ThoughtWorks which can help with this task. It covers platforms, techniques, tools and languages, provides the description and history of the status. I hope it will be useful for you as well.

Updated: