|
Tuesday, April 28, 2009
Is there anything more annoying than standing on a red light, when there is no car, motorcycle or carbon life form in sight? Maybe traffic lights elsewhere in the world are more intelligent, but at least where I live this happens from time to time. So what have this to do with developers? Good question, but let me first try to answer another one: Why do we have traffic lights? From Wikipedia: Traffic lights, also known as traffic signals, stop lights, traffic lamps, stop-and-go lights, robots or semaphore, are signaling devices positioned at road intersections, pedestrian crossings, and other locations to control competing flows of traffic. I read: bla bla bla bla… control competing flows of traffic. I would probably have said something like this: To avoid cars running into each other and avoid have people run over in a cross road. It’s a very logical way of saying stop or drive (red and green). Yellow is the same as green, but for taxis only. Traffic lights are regulated by sensors in the ground detecting where there is traffic and not + a algorithm to give green lights in a predefined order. Now back to the first question, answered by asking a new one: What’s the equivalent of traffic lights in development? No, not red, green, refactor I was thinking about frameworks, internal DSL’s and the like. Stuff that good developers create, which the not so good developers should use. To keep them from “hurting” themselves or the company they work for. Do you find that to be ok?
Tuesday, March 03, 2009
I was asked to do a Scrum presentation for NNUG Haugesund and pulled out my old Scrum presentation, refined it quite a bit (strange how much you learn in a couple of years) and tried it on my collogues at Frende. Feedback was good :) I’m a firm believer that doing Scrum alone is not enough. That’s why my second presentation will be about XP. XP in my eyes is a complete Agile process, while Scrum is a subset of XP. I’ll be talking about why this is and give you an introduction to the practices which I think any Agile team should adapt and XP specifically. Hope to see you there.
Monday, January 26, 2009
Sunday, July 06, 2008
The title of this book could easily have been The Art of XP Development. My first impression of XP back in the days where two things; pair programming and no documentation. I guess some people still think that(?). Did they choose to use agile to not scare away the people with these type of misconceptions? James Shore (the author, together with co-author Shane Warden) says on his web site: Our goal for this book was to provide a complete how-to guide and starter kit for beginning and intermediate agile practitioners. To keep the book concrete and practical, we focus on XP. So that explains that, but I'm not going to review the title of the book am I? Talking about the authors, James Shore is a well known name in the agile community. The Agile Alliance recognized James with their most significant award, the Gordon Pask Award for Contributions to Agile Practice. He is also an internationally recognized speaker and have done lots of consulting for agile teams. Shane Warden is the co-author and editor of this book. He promotes open source software for O'Reilly's Open Technology Exchange. To cut strait to the point, this is probably the best book on XP I've ever read and one of the best agile books I've come across as well! Combine it with Mike Cohn's book; Agile estimating and planning, and maybe Agile Modeling by Scott W. Ambler, and you're well on your way to become agile. My motivation for reading this book was based on my knowledge of Scrum and my willingness to adapt more of the XP practices. One of the questions I've been asking myself is how do "they" approach team management (our should I say self management...) compared to Scrum? That question and many others where answered in this book! XP is of course a full fledged development process and (in my opinion) have been colored by its some "extreme" (at the time) practices and deserves more attention than it gets. So I would strongly recommend reading it, even if your focus is not XP. As I've mentioned before, many books are very theoretical when it comes to software processes, but this book is very hands on and the authors clearly have a great extent of experience with the process. This gave me as a reader good value and motivated me to try out different aspects, as well as new things on areas that I thought we were doing ok already. I also rediscovered some things I just forgot about. The key takeaways I got from the book was: - XP covers a lot more around the management part than I thought.
- Scrum and XP is closer than I expected and XP cover more ground.
- If I had known what I know about XP today, I might have introduced XP instead of Scrum to our teams.
- I got many confirmations that what our teams are doing today is good, but also found aspects already known to us where I knew we could improve, and some aspects I hadn't thought of.
- All the provided examples of what to try or do in specific cases allowed this book to be a how-to instead of a theoretical book about XP/Agile, which I valued very much.
- The focus on technical debt gave me new insight.
- The testing focus. Good article covering exploratory testing by Elisabeth Hendrickson.
The book is structured into three parts: - Getting Started
- Practicing XP
- Mastering Agility
For more details about the content of each part, have a look at Jame Shore's web site, where he lists the chapters. For me part two and three were most valuable. Part one give a good introduction to agile, XP the Manifesto and the values behind it all. You should defiantly read it if you are new to the process or feel that you could need an update, like I did. In part two every chapter starts with a mini-étude, and every topic within a chapter has an explanation followed by five paragraphs in the end; questions, results, contradictions, alternatives and further reading (if any). Here's what the authors say about the mini-études: Have you ever heard a musician playing scales? That's an étude (if a boring one). An étude teaches mastery through precise and careful repetition... ...Beginning agile teams can use the études to refine their practice of agile development. I think these are good, but I found myself skipping most of the mini-étude's and the five paragraphs in the end. In the beginning I read them all (maybe except from the études), but the further I progressed in the book the more I skipped. I did this because much of the material was known to me and I found the main part of each topic most interesting. If I felt something was unclear or had questions, I read the other parts as well. I'm not saying this is the way I recommend reading the book. Part three of the book was very interesting to me. It covers the following topics: - Improve the Process
- Rely on People
- Eliminate Waste
- Deliver Value
- Seek Technical Excellence
The interesting part is that they give you insight to how you can go about to improve the process when you've become comfortable with it. In essence; apply the process on the process itself. So am I not going to criticize (on the negative side) anything in the book? Well, I could because there are some things I don't totally agree with, but all in all it deserves its good credit. However, I'm not going to pick on the few knitty details I personally don't like/agree with. When I did some research about the authors I found an interview with James Shore over at InfoQ that you should check out: http://www.infoq.com/news/2008/05/Interview-James-Shore As Brian Marick, I'm considering buying in several copies of this book to distribute among our agile teams. I really think that it could generate great value for anyone reading it, being any type of agile team member.
Sunday, March 30, 2008
Lately I've been shifting focus back and forth between development and project management. 2 years ago I took the initiative to start Scrum where I work, and this has turned out to be such an interesting and demanding process that I'm having problems letting go (not that there is any reason to). During this process I've been reading a lot of books about Scrum, Agile, XP, planning, estimating and so on. All the books I've read has been very theoretical. Most of them were based on experience by very experienced practitioners, but still they tend to be very general in their advice and cautious of telling you how to do things. Today I was looking at some Scrum resources over at ScrumAlliance and found a presentation by Henrik Kniberg called "The Manager's Role in Scrum" (access requires membership). In his presentation I saw a book he had written (Scrum and XP from the Trenches) and found it freely available at InfoQ. The interesting thing about this book (which I by the way have not read but just skimmed through) is that it focusing on "this is how we did it" on a very detailed level. The nice thing about these kinds of books (or even presentations) is that you might not agree with everything that they've done, but it gives you input like: "we've tried this and it worked!" or "we tried that, but it failed miserably!". And if you're lucky you also get "we think this worked for us because..." or "it did not work very well because..." and so on. You also often discover things that you haven't thought about before. "Ahhh... that's right, why haven't I thought of that?". I've seen the same things at NNUG where we typically have two types of presentations; new technology, or someone's experience within a certain topic. New technology talks are very interesting and motivating, but often lack experience. Experience based talks are popular because everyone knows the value behind time spent and experience gained, and that this information is given to you for free, helping you do avoid common mistakes. Hopefully I will get time to read Henriks book soon and maybe I'll post a short review as well.
Sunday, November 04, 2007
I’ve blogged
a bit about planning poker lately (Planning Poker
and Planning
Poker – Why does it work?). This time it’s the anchoring effect. You might
have heard about the anchoring effect before and you can read more about it at Wikipedia, but here is an
example of why anchoring in planning poker is not wanted:
David is
Product Manager. Jonny is team lead. He’s been in this company since the
startup 5 years ago. David, Jonny and the rest of the team sit down for a round
of planning poker. Before they vote, David reads the user story to be estimated
and asks if there are any questions. Some questions come up and get quickly
answered by David and Jonny. Before they start to vote, Jonny says:
“This should be very simple, shouldn’t take
us more than a couple of days”.
Jonny has
now put out the anchor. When all votes are in, not surprisingly they’re all unanimous
on 2 days. Jonny could have left out his guess on 2 days, and there would still
be an anchoring effect. This is because he states “this should be very simple”.
When playing planning poker you should try to talk
about the story without mentioning anything about your impression of the
complexity or timeframe of the story. This will allow your team to estimate
more honestly. If Jonny didn’t say what he said in my previous example, someone
might have voted much higher and forced a discussion that would have
highlighted something previously unknown to the story. As soon as the anchor is
out there, this seldom happens.
Sunday, October 28, 2007
 First I need to start off by saying that my experience is related to combining planning poker with agile development. For me this is Scrum. For planning poker to work I believe you need to use commitment driven planning as part of your sprint or iteration planning. I think that without this, planning poker will not be equally efficient. One of the tools a team has in agile development is velocity, so let me first explain velocity. Velocity is the average amount of story points your team successfully has committed to over one or more sprints. A team’s velocity will evolve over time, and be more and more accurate if you can: - Keep the number of members in your team stable
- Have the same length on all sprints
- Keep doing the same estimating mistakes
If you change either one of these, you will weaken your velocity. Here are some examples of the above: - By removing a member from your team, you will not be able to do as much work as before, resulting in a sprint with fewer story points than in previous sprints.
- If you have a shorter sprint than your normal sprint length, you will be able to commit to less story points which gives a wrong outcome for your velocity.
- If there is a sudden increase/decrease in the amount of story points estimated for a user story compared to a previously similar user story, the velocity will be less accurate.
One important thing about velocity is that it’s not necessarily this number you should use when your team is committing to user stories for a sprint. The velocity main purpose is to plan ahead for more than a sprint, e.g. for release planning. Typically the product owner uses the team’s velocity to calculate how much work can be fitted into one release. When you sit down for a game of planning poker you focus on estimating user stories. Before you start a sprint the team goes through the estimated user stories and commits to do a certain number of these in the sprint. The first time they will probably miss by committing to too much. The second time they will do better and so on. Eventually the team will get a feeling of how much they can commit to. Remember what I said earlier, the team should not USE the velocity to commit, but rather use it as a warning sign. E.g. if the team commits to much more than the current velocity, you might want to check your commitment again. So, back to estimation. If a team consequently estimates to low on their user stories, this will be corrected by how much the team is actually willing to commit to in the sprint. This is also indicated by the velocity. It’s much easier to control and to see when the team misses a sprint, than to keep track of all estimates and figure out which were estimated too high or too low, and try to learn from that. This also means that you can’t try this couple of times, see that it didn’t work, and give it up. You need to give it time.
Wednesday, October 17, 2007
 Are you an estimating guru? Have you never missed an estimate in your life? Can you even do estimates for others? Then this is not for you. However, if you don’t recognize yourself in the previous description this still might be something for you. When I introduced Scrum to my organization, we quickly started to use planning poker. So what’s planning poker? Here’s what planningpoker.com says: "Individual stories are presented for estimation. After a period of discussion, each participant chooses from his own deck the numbered card that represents his estimate of how much work is involved in the story under discussion. All estimates are kept private until each participant has chosen a card. At that time, all estimates are revealed and discussion can begin again."
How we use planning poker in ContikiAt Contiki we use planning poker to estimate all our user stories, or features if you want. When the backlog starts filling up with un-estimated backlog items, we gather the team for a round of poker. We also have a team in Ukraine, so using planningpoker.com works great for us. Here’s what we do step by step: - The product owner reads the user story and adds any additional information he think is necessary. No comments or input is allowed from the others at this time (our experience is that starting the table discussion before the first estimate takes a lot longer and will not make the estimate any better).
- Everyone vote for an estimate.
- When all estimates are in, all estimates are revealed. When we see that the estimates vary (which usually is the case), we ask the person with the lowest and the person with the highest estimate to discuss why they differ. This usually results in highlighting the different perceptions of the user story and helps clarify other aspect previously unknown to the story. The person with the lowest estimate might know something that will make implementation easier or the person with the highest estimate might know some other implications that the other person didn't.
- At this time other people might jump in to add extra knowledge to the story if they think this will help.
- After a short discussion a new voting is started, if not the estimates are very close to each other that is.
- If the estimates are still not the same, pick an average.
- In rare cases we allow a third vote if the team agrees.
Using a team to do the estimates has several advantages: - If one person is doing the estimate, it’s not definite that he’s the person to implementing the functionality, making his estimate less valid. I’ve never understood people doing estimate for others.
- If only one person does the estimate, he estimate is based on his background and his knowledge.
- Having several people with different experience, knowledge and perception to agree on an estimate, usually results in a better result. It will usually help people visualize aspects of a functionality that was previously unknown the one person.
- It’s more fun!
Later I'm thinking of talking about: - The anchoring effect
- Story points vs. days
- Why does planning poker work?
Tuesday, October 16, 2007
I started
to answer Torbjørn’s
comment on my previous
post about general specialist, but it turned out to be far too long for a
comment, so I posted it hear instead.
I think I
did a poor job defining the general specialist. Actually, after doing some more
research I found that the guy I didn't remember the name of was Scott W. Ambler
(which I’m a bit embarrassed of not remembering). Anyway, he actually doesn’t
call it a general specialist but generalizing specialist (or craftsman), which
is a better description. In my post I focused much on sharing knowledge. Sharing
knowledge is important, but what I didn’t focus enough on is that generalizing
specialists are also specialists in certain areas, but in addition to that also
has quite a bit of knowledge in other areas. What Scott is stating is that you
as an IT person should strive to become a generalizing specialist and not a pure
specialist. His examples are focused on a much broader scale (like use case
specialist, database specialist, C# specialist and so on). Torbjørn touched on this as well. What I'm saying is
that by putting the same principals to a smaller scale, where you have
developers specializing in certain areas of the application, you get the same
effect.
So I think
that developers should strive to teach themselves different part of the system,
and not specialize in a few areas. One way of doing this is to motivate
developers to share knowledge and allow them to work with parts of the system
that someone else might do faster because he’s the specialist in that area.
Torbjørn
commented on my previous post that:
“Nobody can be expert
of everything”
And that’s
not what I meant. What I meant was that people should be allowed to specialize
in areas outside their specialty to become generalizing specialists. This will
also let developers sharing greater knowledge within certain areas to be better
suited to improve functionality within this area. Two people think better that
one, right?
To hear more on this from Scott himself, check
out this
video. He covers a lot of topics in this talk, but if you forward to about
36 minutes, he’ll talk about generalizing specialists. Also check out his web
site about
generalizing specialist.
Sunday, October 14, 2007
A not so
long time ago the company I work for initiated Management by
Objectives (MBO). MBO is divided into 3 groups of objectives: company
objectives, department objectives and individual objectives. MBO is also
linked to a bonus. I’ll get a 100% bonus if the company reaches its goals, my team
reaches their goals and I reach my goals. On each of these (company,
department, individual) there is a weighting.
Let’s say I
sit down with my boss in December to agree on my personal goals for Q1 (January-March).
Before going into this meeting I’ve thought of some objectives. My boss also
has some suggestions. Together we come up with 4 objectives, divided over the 3
months. One of the goals has to be achieved within 3 weeks from now, but the
others are closer to the end of the quarter. As time passes I reach my first
goal after 3 weeks, and I’m starting to focus on the other 3. But as it turns
out, the objectives we clearly visualized one month ago are no longer valid,
because of some unforeseen changes that have occurred. Since we’re doing agile
development this change was handled nicely, but for the MBO’s this is not the
case. So I now have two choices; do what I have to do to reach my objectives anyway
or don’t do them and loose my bonus.
Let’s
backtrack a bit. Why do companies use MBO? It’s to steer company objectives by
motivation. In this case the primary motivation is money and maybe the satisfaction
of reaching your objectives. So what happens when the objectives change? Well,
it’s no longer in the company best interest for you to complete your
objectives, so we need to change the MBO as well, right? But this sounds like a
lot of MBO management, and we don’t want that.
For now I’ve mostly talked about individual
objectives. Relating this to agile development you might want to ask another question:
do we need individual objectives at all? What if we removed the individual
objectives and only used the company and department objectives. This way we can
work together to achieve the department objectives instead of focusing on your
own objectives. This is also a much better philosophy related to agile
development, where you always work as a team and not as an individual. But this
will not solve all the problems. You’re still stuck with the same issues when
things start to change. However, it’s easier to change the team objectives than
change all individual objectives, so MBO management will be easier. I’m also
much more fond of a team working together to achieve a common goal, than each individual
working towards their own personal goals. It’s just better for the team.
Saturday, October 13, 2007
A while
back a saw a talk by someone with a name I can't remember talking about avoiding specialists. This got stuck in my mind and I have been
trying to use this way of thinking in the team I work in. The idea is that
having specialists is a risky business for the company. This is related to
"the bus effect". What happens if the specialist (the guru) gets hit
by the bus? All the places that I've worked we’ve always had them. Come to
think of it, I've been one and so have probably you. This is also running in
the vanes of developers. It’s much easier to do changes to your own code, that
letting someone else do it.
So what can we do to address this problem? One suggestion is to have general specialists
instead of pure specialists. So what does that mean? First an example of a
specialist. A specialist is someone who is very good, or has a lot of knowledge
within one specific area. For instance the guy that developed the framework
that your application runs on. Every time there is a problem with that
framework, he's the guy that has to fix it. You've tried several times to get
access, but you're always told to hand it over to the specialist.
A general specialist however has divided and shared his knowledge over several
areas. The most important thing here is the sharing of knowledge. It's now not
only one guy that knows that specific thing within your app. I'm referring to
larger bits of the app, and not small little bits, because you can't have
everybody know every little thing in your system.
So how do you achieve this within your organization? To use our team as an
example, we ran into a challenge when we were going to divide our Scrum team in
two. We became too many in one team and were forced to split us up. In the app
we're developing there was very clear layers of functionality, so the first
thought was to divide the team by client and server. The advantage of doing
this was that you would get extra focus on e.g. web services, business logic
and database. You would also get another sense of ownership that might improve
quality of the product. However, this also has a few negative effects. For
instance, if you’re doing feature based development (like we do with Scrum) the
client developer needs to hand over his work when he needs a new web service or
some business logic. This will result in a dependency that is unwanted, and
fits very poorly with Scrum.
So we decided that it's better to allow the developer to work on a single
feature all the way through the layers. But will not this result in this person
being the specialist on that feature. Yes, and that’s where sharing knowledge
is important. Let’s say a bug is found on that feature. Who’s going to fix it?
Maybe someone else than the guy who created it. Or if this feature is going to
be improved, someone else might do that job. This also fit nicely with Scrum’s philosophy
about choosing your own tasks and not being constrained by your knowhow within
a specific area.
Trying to
think of general specialist’s will help you share risk across your organization.
On short term this will have an extra cost, but the company (and you) will see
this investment worthwhile the next time someone quit their job or for some other
reason leaves the company.
|
| |
|
|
|
|
| |
| August, 2010 (2) |
| June, 2010 (3) |
| April, 2010 (2) |
| March, 2010 (2) |
| February, 2010 (3) |
| January, 2010 (4) |
| December, 2009 (1) |
| August, 2009 (4) |
| July, 2009 (4) |
| June, 2009 (2) |
| May, 2009 (4) |
| April, 2009 (7) |
| March, 2009 (7) |
| February, 2009 (4) |
| January, 2009 (4) |
| December, 2008 (7) |
| November, 2008 (1) |
| October, 2008 (6) |
| September, 2008 (7) |
| August, 2008 (4) |
| July, 2008 (3) |
| June, 2008 (7) |
| May, 2008 (7) |
| April, 2008 (5) |
| March, 2008 (3) |
| February, 2008 (9) |
| January, 2008 (3) |
| December, 2007 (4) |
| November, 2007 (10) |
| October, 2007 (10) |
| September, 2007 (2) |
| August, 2007 (6) |
| July, 2007 (6) |
| June, 2007 (3) |
| May, 2007 (2) |
| April, 2007 (8) |
| March, 2007 (6) |
| February, 2007 (5) |
| January, 2007 (10) |
| December, 2006 (9) |
| November, 2006 (5) |
| October, 2006 (8) |
| September, 2006 (5) |
|
|
 |
 |
|
|