Wednesday, September 21, 2011

I read the book. Why doesn’t it work?


There are many great books. Some of the books are called “life-changing” and some are just “classics”. We seek silver-bullets to make sense of the world. Revolutionary ideas that should rock our existence. Untold stories that explain what to do now. Many times we find what we seek for. A bitter disappointment might come a while after, realizing that a book did not have all the answers.

It is easy to talk about programming practices like how to start using TDD, best tools for user-story mapping or how to set up your continuous integration. These things are measurable and offer an easy way out. You can always say that you are Scrum, Kanban or whatever buzz-word is expected in your organization. However, if you dig inside, you’ll find that they are just developing code a bit differently and that does not affect an organization as the whole. Nothing actually changed.

Talking about values and the purpose often results in a philosophical discussion about good and evil. Sceptics draw analogies with religion, claiming that people who talk about that are fanatics.

To believe that something is true people need complex frameworks and formulas they do not fully understand. Pretending that you fully understand what is RUP or CMM makes you an expert in the field and sets you way above the rest who, actually, understand as much as you do. Keeping things simpler on the other hand creates an impression of amateurism and immaturity.

If you come home in the evening and tell that today at work you have been just nice to your colleagues, you wrote some test cases and talked to your users and decided that half of the things you planned to do are not needed - sounds like slacking off. Especially, compared to - having three meetings in one day, composing the project plan and having a serious discussion with the team about their productivity.

For the same reason, if someone asks me what do I do for living, I usually reply, that at work - I just make coffee (and that’s where this blog’s name comes from). Explanations sound very important and ambiguous. They create a flow of information that is anyway mostly ignored. Saying that - I develop software - basically states the obvious and as informative as my initial statement, but misses out the clue on one of my favorite drinks.

We need complexity to believe that it is true, important and... that it works.

Therefore, by reading the book or attending the master-class we expect magic to happen. Clarity to shine upon us. All problems solved. Just start using one simple thing and wait. Just start doing TDD or CI or whatever is popular buzz-word in your organization.

I do not argue, it is a good start if you’ve got nothing. The trick is, by starting using a totally new practice you see how it fits your needs and organization. You change it if you need it, drop it, or start doing something else besides that. But this part is already not in the “check-list”. However, not many go that far, but expect results instantly.

The need comes before action. You want to improve quality of your software and therefore you want to try out the TDD. That is just one option that you might to try out. Not vice versa - when you want to start doing TDD and see where does it take you. It definitely takes you somewhere, but you not necessarily want to be there, or tell the difference what has changed.

Understanding that the need comes first is fundamental. The good old excuse why agile software development does not suit someone’s company usually goes like that - our organization is unique, those things just cannot be implemented here, but we understand that they might actually work (in theory). In this case an organization is happy as it is. It is capable of paying the price for their own process and its stability. There is no need for it to change and that is totally fine. No point making revolution where it is not needed.

Books that do not discuss the programming practices, but talk about psychology and try to highlight the importance of the purpose are sometimes not taken seriously. In a nutshell, they talk about the fight between good and evil and of course everyone of us presumes that we are good already. It is hard to acknowledge that we do not know something or that we do not respect someone at work. We are great, and yeah, sometimes due to uniqueness of our organization we have to behave not the way we would like to. Bollocks!

On the other hand, the people, who do the actual work, always find the easiest way of doing it. If the purpose of the organization is to bill hours, people would produce hours and not necessarily the desired work. People will always find a way to hack the system, whatever it is. That does not seem as a good thing, but actually it is.

There is a way to combine the desire to do the simplest work possible and evolution of the organization. Let the people define how they want to work! People should feel responsible for the actions they are doing and see how does it affect an organization as the whole.

In “Implementing Lean Software Development” by Mary and Tom Poppendieck they discuss the principles of Lean organization. And they say that the most important principle is - Respect for the people. You can make this principle come true in your organization and you will discover all the rest. You can implement all other principles, but this one and you will fail miserably.

If you will ask people around you - do they respect people they work with? What is most likely answer you will be getting? In this case, why do we see so many organizational stupidity around us, why are not all organizations lean? Because the word “respect” has many layers and is understood differently. Saying “hello!” in the morning to everyone in the office is just being polite, that does not automatically show your gratitude. And in such quite abstract and humane matters we tend to think the best about ourselves.

There are, however, a few tricks that I would like to share, how I understand that principle. These things are quite easy to try out and they do not require mental paradigm shift (at least in the beginning). What you can be sure of - your organization will become better and will start evolving, just do not block it.

  • Know your team
    Hopefully, you know the names of your team-members. That is not enough. You should know their hobbies, favourite food, names of their children and spouses. After-all you spend the majority of your time with those people. You should know whom do you trust.

  • Team events
    Take your time to socialize with your team outside of the working hours. Go on to a road-trip. Climb a mountain, dig a cave. Go out to a local pub. You should see how people behave outside of the office rooms, do something stupid (or really clever) together. You do not have to become friends and buddies, but you should start caring for each other.
  • Controlled failure
    This is a good one. Seen many times in the literature. Noone knows what it means actually. If it is a failure - someone will be disappointed, there is no way around it. See the team taking the initiative and responsibility for their actions. If it is a production issue, let the team gather together and decide how to solve it together. Good news - you do not have to plan a disaster. Failures of one sort or another happen anyway in the team’s life. Make the responsibility visible.
  • Visualize your life
    Usually there is someone in the team who can draw. Visualize your decisions after the last retrospective. Put pictures from your last team event on a wall.

  • Share achievements
    Provide the financial information to the team how the product is doing. See the effect of each change you take to the live system. More over, if the organization is doing well, why not to share the success with everyone else? And you should not hide the failures. You all are in the same boat and if the boat is not doing well everybody should be concerned and help to get it back on track.

The tips above seem very straightforward. Probably even naive. However, there are few organizations who actually follow them. We always think about situation we are is and ourselves in our favour. So, I guess the next tip should be something like: be honest and fair to yourself and others. But, well... of course we are already...

    No comments:

    Post a Comment