Notes from someone that loved Agile at first sight and now is trying to understand why
Friday, December 11, 2009
Agile delivers better business value in a healthier work environment
Friday, November 20, 2009
I have been discovered: I am attempting against the communication of Agile teams
Today, I read a comment someone post on the google wave sample page of taskboardy (http://wave-samples-gallery.appspot.com/about_app?app_id=68026)
Bringing people apart
Google Wave may yet be great, but not for this. Remember that Agile is about bringing people together -- in person. Need a real task board for this, not another application that glues people to the computer screen.
First thought that came to my mind is: Would someone consider using Taskboardy (or any other electronic tool) being collocated? Specially a task board!!! I worked in a distributed team and therefore I am forced to use an electronic tool. However, I am always in the dilemma of whether I should also use a physical task board. I know I am loosing a great visual radiator with the tool... (I decided not to, because the team is not in an open space. Otherwise, I would maintain both).
Kept thinking and perhaps the comment makes sense. How many times someone sends an email or chat with a person 1 meter away? I've seen it many times. So what can we do when the tools are not used the way they should be used? How can we encourage the most effective communication, which is face to face conversation? If the team is collocated, perhaps it makes sense to follow the comment and suppress any channel of communication that is not face to face. Take away phone, uninstall email, chat, wave, etc, etc...
Does it make sense to blame the tools? In the case of the processes, perhaps it does :-) If things go wrong in the project, let's blame scrum. At least in this case, the enemy is invisible. It is very hard to visualize what is going on, which are the bottlenecks or which are the dysfunctions. In the case of electronic tools, it would be much harder to blame them. I can't imagine telling my team member "my code sucks and I didn't do any unit tests because of Eclipse". Or... the team members don't talk to each other because of V1. Hum
Henrik Kniberg said during QCon SF yesterday we should use the tool that makes more sense to solve our problem. Now the question is: what if we are not smart enough to choose it? Will have to ask next time I see him...
Wednesday, November 11, 2009
Couple of things that caught my attention lately
Monday, November 9, 2009
Taskboardy available
Update 2/7 (superbowl hour): Fixed a problem with especial characters (",', etc.)
Monday, November 2, 2009
Does a heavier process guarantees safety?
This morning, I went 5' earlier to the station cause I needed to buy the monthly pass. I (wrongly) choose the machine where nobody was in, select the appropriate options, purchase it, and.. and.... and... the receipt comes, but the ticket never comes!
I think, this shouldn't be hard. I just go quickly to the ticket office (while at the same time trying to advice the people that the machine is not working) and tell them what happened, hoping they would just go to the machine, verify that what I say is true and print my ticket (while putting a sign on that machine until is repaired).
Wrongs thoughts. There is nothing they can do. I have to call the 0800 - caltrain. "In the meantime, just give the conductor the receipt". Besides, they don't do anything to prevent other users to use the broken machine... (I don't get it)
Go to the train, talk with the conductor (they are always very kind) and he let me in (he evens tell me, 'well, with the receipt and the credit card, there shouldn't be a problem to use it the whole month..'. Nooo, I speak with the operator and she told me that the conductor shouldn't have let me in, that I should've bought a new ticket and ask for the refund sending a form that I could print through the web site through ordinary mail. Noooooooooooooooo.
Result: the process is heavier and less secure.
Less secure because a non scrupulous person could ask for a 'rebate' of its ticket, even if he got the ticket printed. How can they verify that what s/he is telling is true? They lost all the insight that could have been gained should they have gone in the moment to the machine (If the non scrupulous person tries to do the same, he would have to explain why the ticket gets printed 1' later, etc..). In the more formal way, there is no way to prove the non scrupulous person wrong and they have to refund the ticket.
The oddity is that at the same time...
- The process is more costly to the enterprise because someone has to pick up the mails, process it, etc). Worst, not solving the problem soon of course derives in other complaints.
- It is more costly and annoying for the user because I need to learn how to send a regular mail, print the form, fill it, find out where is the post office, send it and 'wait a few weeks' (as the operator kindly said) for the refund. At the same time, I need to buy a new ticket (I will go back to the old fashion employee way this time!)
Come on Caltrain guys!!! It shouldn't be that hard!
This post also comes as a result of reading Alistair's book again (my hero!). There is always these people that says 'We need to use a heavier process to be safer' and when asked 'Why?' .. Just because.....
Unfortunately (for all of us), we will always have to think.
Tuesday, October 27, 2009
Agile is lots of Communication
This is the first post of a series of posts where I will try to define what I think are the most important properties of Agile. As I have been reading Alistair's book, the first post is about "Communication".
What is communication and why is so important in Agile?
Why is so important to communicate in Agile?
Individuals and interactions over processes and tools
Which are the most effective ways of communicating?
It is very difficult to communicate. If you think that even between people of the same culture and language talking face to face in a room there could be misunderstandings, you can imagine how difficult it could get (don't you have misunderstandings with your wife after living with her for many years?!!). People have their own context and ideas and so the information they receive is processed according to it. Besides, our natural language is limited and imperfect (and it reduces to the person that is trying to communicate).How does Agile "manage the incompleteness of communication"?
Conclusion
Friday, October 16, 2009
2 Intense Days at Agile Open California
Sunday, October 11, 2009
A First Approximation to Understanding Software Quality
A lot of the quality definitions are very subjective. Value to a person.. Fitness for use.. How can we measure that? (I guess the best measurement is how well the product sells). On the other hands, there are things that can be measured. For example, CMMI approach, in its levels 4 and 5 try to measure quality using statistical analysis.... But does that assures a satisfied customer? In Agile, certain measurements can be taken, for example how many tests there are, the code coverage. Do those number assure that the tests are well written?
Conclusion
The definition is still vague to me. However, to think a little bit about quality made me realize that most of the Agile values and principles aim at improving it. For example, short iterations and user involvement improve the value to the user because something nearer to what is expected is built. Engineering practices like automated testing, refactoring and continous integration improve the conceptual integrity and thus the perceived one. In other words, Agile tries to maximize the quality - value - at the least possible cost.
Monday, October 5, 2009
Agile without automated testing
And Beck's famous flat cost of curve.
The latter, assumes all XP practices are performed efficiently. So the question, how would the curve grow if automated testing was not performed or was not performed efficiently. I don't want to go into much detail about what kind of automated testing (unit, functional). Let's assume the selected strategy doesn't work.
Today, reading a Cockburn's book, I saw the graphic that I was imagining, but with another topic: Agile without refactoring.
This is exactly what I thought. At the beginning it is cheaper not to think about an automated testing strategy. As the project evolves. the cost of changes without having the automated test harness grows exponentially. The analogy with refactoring is perfect. At the beginning, it is possible to do small changes without cleaning the code. A few weeks, after that, the code becomes so messy that it becomes costly or impossible to do the changes.
Self-organized sardines
Self-organized sardines swimming together at the Monterey Aquarium
Wednesday, September 30, 2009
Don't blame integration tests!!!
First thing that came to my mind: Is he cynical with the title? (How can we blame integration tests?) The problem is using integration tests for things that should be tested at the unit level. In other words, the problem is not using integration tests for what they should be used: Just to verify that the integration between the different components is not generating any problem (well.... he is not talking about functional tests, right? Functional tests are integration tests, but everybody recommends having them as way to check that the business features are constructed the way they are supposed to be. )
Second thing: Why is it so hard to define a strategy that makes heavy use of unit tests? (e.g. as suggested by Cohn's pyramid). Is it because TDD is very difficult to learn? Is it because QA departments define the strategy (and they are more into the functional aspects/tests). Is it because of the managers?
Who can we blame for this scam? I think that we all as a community need to take responsibility. We need to understand better the benefits of unit testing, we need to be trained and we need to DO THEM!
Sunday, September 27, 2009
Tuesday, September 22, 2009
Agile brushstrokes
Agile Baroque Transition | |
Agile Impressionist Transition | |
Agile Expressionist Transition | |
Agile Graffiti Transition |
I between this weird comparison, Keriesvky said that in his actual project (where I assume there was not very junior people) they are not using fixed time iterations, they are not calculating velocity, they are not dividing the user stories in tasks, they were not holding retrospectives (formally, they would do it whenever it's necessary). That was pretty amazing to hear. No rules, just what works. I guess you need to be VERY mature to do such a thing.
Thursday, September 17, 2009
Yet Another Bug Versus Feature Post
The way I see it, a user story goes through different phases of understanding and its scope is refined in each of these phases. First, it starts as an idea of something that can contribute value to the application in mind. At this moment, everybody is living in the world of ideas and that world doesn't have any restrictions or constraints. The scope of this user story is completely blurred.
When the story is estimated for the first time, it transitions to the second phase. Developers go through it for the first time, providing hints on the feasibility of the user story (or what would need to be changed in order to be feasible). QAs also help refine the story because of their ability to think of the different scenarios this user story could apply to. This is the first time (usually) the team (or at least a representative part of it) look at the user story and discuss about it. The user story takes shape. Acceptance criteria are usually added (based on the questions and discussions that arise) and the scope is radically refined to a point where the team should understand at least what needs to be done.
The planning meeting represents the third phase of refinement for the user story. At this point, the product owner explains the user story to the whole team. This should be the last phase because a scope is agreed on and a final estimation, to which the team commits to, is made based on it. But is it?
When the user story begins to roll and QAs start thinking about scenarios and test cases, developers start designing and something starts to emerge, the understanding of the user story changes a great deal. Even more, seeing something concrete triggers new ideas or unveils constraints that were overlooked. Continuous communication and collaboration between the team and the product owner is vital to overcome problems and accommodate all necessary changes. Finally, the user story is completed and with it, the user story transitions to its last phase.
All of these phases happen usually in a very short period of time in most agile projects. There isn't a big upfront analysis and design period and the project start with just the vision and a bunch of user stories understood. The rest is decided on the road. Even more, in many cases, the requirements will change and a successful agile team should be prepared to handle this. The key to be successful in this environment is to have a gelled team with a lot of criteria.
So what happens when after the user story is completed, some part of the functionality doesn't meet the expectations of the product owner or some of the stakeholders. The question: is a bug or a feature always arises. The easy answer is: if it's not among the acceptance criteria listed, is a feature request. I don't think it should be that easy. I believe the team should use its best criteria to determine if the issue is far enough of the core of the user story to be considered a new feature request. I believe Agile relies on a bunch of crafted people that add value during the whole life of the user story and I believe that a shared framework of understanding should exist between the product owner and the rest of the team (this is key for the success of the project). In other words, a successful team understands what is being expected of the product, which is the criticality of it and what is the level of necessary quality. Having all of these things in mind, the team can make a decision and my opinion is that if the issue belongs to the core of the user story, it is just healthier for the group to recognize it was missed and track it as a bug.
Changing the perspective, perhaps it doesn't even make sense to make this distinction. A new level of understanding has been reached for the user story and what is important is to decide if the missing functionality is required for the next release or not. This makes the decision even easier. One of the reasons the team has to categorize something as a bug is that if it’s a bug, it will probably need to be addressed for the release and so it implies more work. If it is a new feature request, it will probably go to the next release. If the product owner, who is the person responsible for the ROI of the project, decides this need to be included, the decision falls to how it is going to be tracked.
In conclusion, a successful scrum team should first ask the product owner if s/he thinks the functionality missing is important for the release and then track and prioritize the work that needs to be done. A team should be fond of their work and their craft and it should use its best criteria to make the decision. And finally, if it is a new requirement, it needs to be prepared to change. We live in a very competitive world where business conditions change all the time. The success of the team depends on being able to accommodate those changes.
The success of the team relies on being really Agile.
Monday, September 14, 2009
The Agile Mantra
The Agile Mantra
For example
- I am constantly trying to eliminate waste - What is waste in my everyday? Well, plans that keep hanging in my head forever. They are waste, because I keep thinking about them and I never do them. Also, I tried to do things well for the first time. If I don't do them well, it is highly probable that I will have to in the future (they are bugs!).
- Value Stream Mapping - Whenever I am following a process, I try to optimize. Look for the places I'm just waiting, try to identify things to improve etc. I am talking about the most stupid things like the process I follow to lock my bike when I go to work (including where I hang the key after locking, to be able to find it faster when I get out!)
- Continual Introspection - I am continually trying to find better ways of doing things. It doesn't matter whether it is the diswhashing, the path to the train/work or a more serious task. I continually introspect and act on the results.
- Look for the value on the things I do - I started to ask the question "what is the value of this" instead of doing things automatically. This was a big change. I was very used to doing the things they told me to do, not inquiring much on the reasons. Today, I have a much more critiquing attitude.
Maybe, I am going to far, but Beck's TDD book has influenced me in the way I tackle a problem. Before, I wanted to get it all solved in one shot. Now I do it in steps, taking checkpoints in the middle. Other things that I value more now are quality. Bake quality in or do things better. I value communication and I understood the difficulty of it.. What else? Well, this whole Agile world has an impact on our everyday life, right agilists?
Tuesday, September 1, 2009
Can't image Agile 10 years ago
Monday, August 17, 2009
Has Agile Attacked the Essence?
Has Agile attacked the essence or the accidents?
Definitely not the essense. The essence is the programming language and the way the software is designed. Object Orientation attacked the essence (although I don't think it reached the revolution in productivity Brooks mentions). Domain Driven Design concepts attacked the essence because it deals with how the software is designed. But not Agile...
I was dissapointed. Some Agile practices are more related to the essence, probably the ones that deal with programming like TDD and refactoring but definitely Agile is not the silver bullet :-(
Agile then just handles the accidents in the best possible way.
Anyway, this order of magnitude improvement in productivity will ever be possible?. Cockburn states in his book that "as much as programming languages may improve, programming will still be limited by our ability to think through the problem and the solution". He seems to imply that even if a revolutionary programming language is invented, it won't bring an improvement in productivity without the "accident" (communication, collaboration) being performed well.
As of now I guess Agile represents the best promise in an improvement in productivity. It doesn't promise an order of magnitude (although Schwaber promises like 70% ?) but ...
Which are the promises in the "essence" side?