sábado, 19 de maio de 2012

Are you agile? really?

Lately I’ve heard a lot of software companies saying they are agile. However, when you start a conversation with the representative of these companies you can easily notice that Scrum is the only word they know about being agile.

Nowadays be agile means be "modern". Developers want to work in agile projects. Customers are looking for agile companies/consultants. Even Gartner predicted in 2010 that "agile development methods would be utilized in 80% of all software development projects". So.. what is the point?

Well.. the point is:
Be agile  !=  do Scrum

Actually, be agile is much much more than do Scrum variants. Be agile requires the team to feel and act as agile. It must be running into the veins of the developer. But, unfortunately, what we can see is that the word agile is being used as marketing purpose by many companies.

While discussing about that with a friend I’ve decided to write down my thoughts about this subject. So, in my point of view, you ARE NOT agile if:
  • if you don’t focuses in built-in quality
    • There is a principle on the Agile Manifesto that says “continuous attention to technical excellence and good design enhances agility”
    • Agile teams must feel pleasure delivering high quality software. The era which said that software process ensures software quality have finished a long time ago. You must focus on quality from inside-out. That is, the code must be high quality, so that the functional may fit the user expectations.
    • With a poor code you have: more bugs, poor performance, poor extensible strategy, unreadable code, etc.. Consequently, you have a customer less happy.
  • if you are not able to make your customer to work in your side
    • don’t need further comments..
  • if you do not pay technical debits
    • I know “agile” projects that have failed because, in only two years, the software started to deteriorate. But why? the answer is simple: because developers didn’t know what technical debt is..
  • If you do not automate tests (in all levels)
  • If there isn’t regression tests
  • If you do not refactor your code
  • If you do not enhance your design/architecture
  • If you do not use continuous integration
  • Nowadays I would say, If you do not use continuous delivery
  • If you do not monitor your software when it goes live
  • If you do not learn from your live software
  • If you can point a person or a developer as the responsible for a delivery failure
  • If you do not trust in your team
  • If your team is separated by sites (i.e. DBAs, testers, developers, etc)
  • if you do have more trainees and junior developers than senior ones
    • The problem is that most companies which say they are agile have more trainees than senior developer. In these companies the software quality tends to be poor. I would like to say that there is nothing wrong with trainees and junior developers. The only point here is that they don’t have enough maturity to make decisions or to enhance the software design.
    • As any other software methodology, trainees must added into an agile team in a planned manner.
  • If you try to institutionalise a process that have worked for another team
  • If you do not use working software as the primary measure of progress
  • If you do not continually improve your process
  • If your process do not welcome changes
  • If you have closed scope contracts
    • Be agile in closed scope projects is extremely hard. This is possible if you have a very tiny software, but with large ones practice have shown us that it is not possible  because you will reject changes or make changes difficult to happens. What goes against one of the main principles of the Agile Manifesto.
  • if you have large iterations
    • One month seems to long for a delivery. One or two weeks is a nice shot
  • if you can not break your requisites to fit into a sprint
  • If you do not use MVP (Minimum Viable Product).
  • If you say ‘done’, when the functionality is not shippable
  • ...

It is important to say that there is nothing wrong with a company trying to use Scrum, Kanban, XP or whatever. What I’m saying it is wrong is that there are many companies using the word agile as a marketing purpose only. They have no process, no adequate team and because they’ve started to do stand up meeting and put some notes on a blackboard they sell themselves  as agile.

Just because you’ve started to use Scrum and Kanban does not means you are Agile. That means you've done the baby steps to the “right” direction. Be agile is more difficult than most of people think.. That is why there is only few companies in the entire world that REALLY are agile.

Please, leave your comments.. I will appreciate them..

3 comentários:

  1. Fernando,
    Muito bom o seu artigo.
    Também tenho opiniões fortes com relação algumas metodologias ou "siglas da moda".

    1. Obrigado Moacir. E desculpe o Inglês.. Este post eu escrevi meio rápido e em um momento de revolta.

  2. great post, i wrote something similar where i'm focusing more on the importance of good software design in order to be agile.