Search This Blog

Wednesday, 27 February 2013

Building Agile Teams – Not sure?

 

In the process of adopting agile methodologies, some organisations don't really pay attention to how these teams are formed. Forming a team for a project is different from forming teams in organisation. The latter needs a lot of thought, compromise and patience. owing to the needs of the business/client. I don't understand why organisations bother adopting agile without this view. It is all done for that client/product/project who is important, yes that's the primary objective but then that doesn't cut it when you mess with the peoples minds when we constantly moving them around teams.  I would go as far as saying at least 30-40% of this effort is wasted,  every time a team is put together they go through the same cycle of storming, forming ,norming and performing. I really think this is the most underutilised concept from Hoffman, It is used as punch lines on slides with little attention to the consequences of the process. Teams formed should not be broken without valid reasons (sorry multiple projects and cost are not good enough reasons, let me know if you have other reasons, I know I have a few)

At this point you will be thinking this is just the usual crap people talk about. Here is a hint if you use the word resource for a team member, you have never paid attention to the do’s and don’ts listed below. The change in perception that's needed is, that a skilled technologist in one context is not productive or efficient in another. The context here is that of a product , project or service being worked on. This context is never constant in IT and all you can do is keep the team constant, (even your machines are changing with updates everyday). Can two moving parts in a system bringing stability unless the forces negate each other? Are there exceptions not sure…

1. Don't build teams of specialists.

When companies organise teams by discipline such as testers, analysts , designers, and developers, All they have done is create silos of specialists who are not effective in how they work together as a software development team. The dynamics between individuals with in a team are quite different to the ones who work in teams founded on disciplines. That directly reflects on how efficient they are and how productive they are. These teams based on disciplines create the biggest hurdle. How will you align the goals of these teams based on discipline with the goals of a project they working on ? It doesn't make sense because they achieve neither.

2. Don't share people unless they are specialists.

The whole theory that people in a team founded on a discipline are specialists is not true. You become a specialist by virtue of doing something valuable in a project or system. Do not share the basic functional roles of analysts, testers and developers between projects, it is not as efficient on cost as you perceive it to be.There used to be a time where i used to acknowledge the cost benefit of sharing certain roles between projects, but increasingly in recent times I have lost faith in this idea. To be honest it does more harm and costs you more (not accounted or measured most times) than any real cost benefit. I don't think the human mind is capable of treating two goals with equal priority if a person is shared between teams, If ever you wanted to do this, it may be achieved in a cross functional team, where a specialist is shared and the team has a bunch of all-rounder's.

3. Build Cross Functional teams

Building software has been split into so many functional roles these days, it is beyond me now to understand why.  Is it difficult for someone to be able to do a bit of analysis, and testing along side developing code. I am not asking them to be a specialist in those disciplines neither am I asking them to change there careers. I personally feel quite proud of being able to do more than one functional role. By being cross functional all that is expected is you should be able to do other kinds of work required for the team so you keep the work flowing on your Kanban. But I have noticed teams increasingly blocking work and team members not picking a card that needs to move further to done. This may also be compounded by managers feeling the need for specialists only to do that work. Many a specialists have screwed up and I am witness to it, so what is troubling teams to encourage new bees/ all rounder's to take a chance. There is always the specialist to come back and review it?

4. Encourage common goals for the teams.

Career progression and teams based on disciplines have murdered the whole system and have pampered individuals into thinking that it is normal to be able to work in one functional area and it is not there responsibility to do anything else that is required to achieve the common goal. Are they specialists in there own functional area ? I doubt this theory because a majority of them are not really any kind of experts they do just about enough to keep it going and make just about the same mistakes in judgement as other team members in other functional roles. The corporate annual review system has completely brain trained people to think that they need to meet there personal goals before the team goals (very few places have these). Since this is tied up to some kind of bonus , the motivation is pretty high to get at least your personal goals right. This system in my view is the worst evil in most organisations and is a passive killing machine.

5. Don’t encourage Big Teams

Any team more than 8 – 10 is big. By building teams larger than this size you end up increasing overheads. This further translates into team members beginning to feel they don't get enough information and time to function properly. This leads to lesser visibility on the flow of work and pushes some members of the team to delegate work and in some extreme cases to micro manage,

6. Don’t use Agile if team is working as a resource pool

Agile cant work with this model where multiple people work in  multiple projects as if they were a single team. So don't force agile to be used if your resource management is based on this model, and ask why agile doesn't work. Best not to use agile in this model.

Wednesday, 6 February 2013

An analogy for CI–Books

Not sure what i wanted to write about but there is this crazy idea in my head about an analogy i need to pour out somewhere..

Over the years of working and practicing agile development practices in my not so big a career, I have come to find various analogies in the real world for the agile development process. I am not going to say I live and breathe Agile but I would like to think I am extremely passionate about it. Over the course of time. When I coach a team I take a lot of interest in using real life analogies and as a result have some for myself when I look at the practices I follow.

Analogy by definition is an inference or argument you draw from one particular context to that of another context, some are used to make an argument while some are used to enhance the context. The one analogy I repeatedly try to seek context from is that of a well authored book (rather published ). I may or may not be right to draw this analogy but in the context of this article for release management and deployment tools, I was hoping my analogy will allow me the emphasize the importance of release continuous integration.

The concept of a well authored book falls in line with the various parts of our agile development process.

The first step of an agile development process is release planning and management process, this is like the preamble of the book , where the author lists all the people involved in the writing of the book and anyone who has contributed to the book in terms of literature , these people can be compared to the stake holders or the users of the software being developed. The preamble gives an insight into how the book took its current form and the release management processes allows the vision of the users to manifest into working software in the agile development process.

Now continuous integration can be compared to that of the index of a book, where the index gives you a quick overview of the contents of the book, the index lists the specifications of the software , in an indexed manner and should a reader want to quickly get some information it is available in terms of the page numbers in the index.

The chapters of the book are the iterations in the development cycle, where each chapter lists the various scenarios in the software and explains the various aspects of the software being built, these are detailed specifications of the software. As a user sees the software being built in every iteration each chapter in the book is completed and finally the book takes its form as a result. The index in the mean while is continuously enriched by the key points of the chapters being written. The index is like the snapshot information of the book as it is being built, and so is the continuous integration environment for the development of software. A CI (continuous integration) environment is merely something that builds software and runs a few tests for young agile teams but as teams grow and continuously improve they start using CI for various other purposes like reporting project health, metrics and in some case also deployment. There comes the appendix Smile with tongue out just kidding .

Rightly or wrongly I drew this analogy but I dont really care at this point how meaningful this post is, I just wanted to write about this crazy analogy I had on my way home