Agile FAQs
  About   Past Conferences   Training   Home  

 
Managed Chaos
Naresh Jain’s Random Thoughts on Software Development and Adventure Sports
     
`
 
Microblog Feed
    Previous Feeds...
    Recent Thoughts
    Comments
    Tags
    Blogroll
    Categories
    Archives
    November 2007
    M T W T F S S
    « Oct   Dec »
     1234
    567891011
    12131415161718
    19202122232425
    2627282930  
    RSS Feed
    Add to Technorati Favorites

    Archive for November 9th, 2007

    Agile is not about Rapid Software Development

    Friday, November 9th, 2007

    Time to time, I keep running into people who think Agile is about rapidly developing software. With all good eXtreme programming practices, we should be able to churn code at a rate never before. Some even claim its faster than some of the model driven code generation approaches. Based on my experience and understanding I think this is a big fat lie. IMHO, people in this camp, clearly don’t get it.

    To me, Agile is about Rapid Business Value delivery. It is not about delivery more software, its about delivering more business value. In fact, I would go to the extent saying, in Agile, we resist delivering more software. We constantly try to identify and prioritize highest business value delivering features. In this process, we try to eliminate low priority, low business value features. We strive to provide max value for the buck. This is very different from rapid software development mentality. Where the focus is more software. I actually tell people, that when it comes to software development, I’m a lazy person who want to do the least amount of work and get max ROI on it. Prioritizing, focusing on what the business needs first, delivering the same, taking the feedback from its use and adapting our plan accordingly is a great way to achieve this. Even though I say I’m lazy, this is a lot of work and needs a lot more rigor and discipline. Being Agile really helps me strike this fine balance.

    Having said that, clearly Agile can help deliver software faster, coz we eliminate a lot of waste [unwanted features, useless process documents, hand-overs, etc]. But that is not the goal. Its a nice benefit of this approach but not the driving factor.

    Now that we agree Agile is not about Rapid software development, why do most [if not all] projects track velocity as the measure for progress? Isn’t velocity just a planning tool, that helps us forecast based on yesterday’s weather? How does it matter that we completed 60 story points or we completed 310 hrs out of 320 estimated hrs? Somehow we don’t seem to be measuring business value delivered?

    Having said that, I can think of a couple of reasons why we don’t do that:

    • Business value is only delivered when business uses the software and benefits from it. Unfortunately a lot projects’ iteration/sprint boundaries are way earlier than the point at which the software is being used. In fact, a lot of teams end their iterations/sprints with a QA/BA/Customer Sign-off. After this, the features sit on a shelf and wait for few more to accumulate. Finally when a hotchpotch of few more such features accumulate, teams do more testing [performance, usability, insatiability, stress, load, blah..blah..blah]. When all this is fine, they show it to more customers and do a user acceptance test. Finally it goes thru all the jazzy Configuration management steps, it gets packaged and deployed. Plus there is a user training and support training phase also involved. Basically, what I’m trying to highlight is for a lot of folks, the world ends at the iteration/sprint boundary. For some people it might extend to the release boundary. But there is so much that needs to happen once the feature is QA/BA signed-off. Hence when we end the iteration/sprint, there is no way to know if we actually delivered any business value or not. I’m not saying there is not value in this approach. It is a good risk-mitigation and to some extend feedback mechanism compared to the tradition approach. But if we really want to focus on business value and measure that, then we need to be deploying every iteration/sprint. Is this feasible? I don’t know. On one of my projects, our time to production was 3 days. It was possible, coz the system was already in production, had a mature code base, had great test coverage and most importantly we had the customer’s buy-in. It really felt great to get concrete feedback in a week’s time. May be this is possible on all projects, we can at least try. Also don’t forget there is a cost associated with each release, but automation is a great way to reduce the cost and time.
    • Business value is a vague concept. Unfortunately there is not easy way to know the actual business value. In fact when I say business value, I really mean estimated business value. We may only know the real business value once the business uses the software. None of my customers could tell me feature A is 30,000 USD and feature B is 20,000 USD. The best the customer could tell me was, I think feature A had more value than feature B. This was helpful for prioritization, but not for measurement. We could not really say if the team was giving ROI at the end of the iteration/sprint. Does that mean we should not bother about business value? I can think of one solution. This problem sounds very much like developer estimation problems. For a given story the developers don’t really know how long it’s going to take to complete the story. For years we tried estimating in real hours. That did not work. Then we tried estimating in Ideal developer days or story points. I don’t know if this works or not, I’m do not believe in this approach. But teams seems to be using this approach. The story point approach is interesting. Developers claim that it is difficult to tell exactly how much effort, but based on their experience they can relatively size stories. They can tell if story A feels as big as story B or it feels bigger than story B and smaller than story C. This way we assign points and then track points. Once the iteration is done, we can do a projection based on all the story points and how long it took to complete x number of story points to get a rough estimate of how long all the stories are going to take. Some people refer to this as a pure estimate. Where they separate the effort from the complexity. Efforts can vary depending on the technology, tool, ton of other reasons, but the complexity remains the same. [I don't quite buy this. But I'm para-phrasing what others claim]. Anyway, that’s not the point. The point is can we use a similar approach for estimating business value? Can the business estimate business value in relative points? Let’s say we call it Business Value Points? Making a big assumption that this is possible, now we could have a way of measuring/tracking how much relative business value is being delivered. We might still not be able to give a concrete Dollar amount, but we could see a trend in team’s performance.

    Well I think its worth trying these 2 things, it might take us to something new to explore. But I guess you can see where I’m headed. I’m interested in measuring business value also and not just effort alone.

    [Post to Twitter] Tweet This Post  [Post to Plurk] Plurk This Post  [Post to Yahoo Buzz] Buzz This Post  [Post to Delicious] Delicious This Post  [Post to Digg] Digg This Post  [Post to Ping.fm] Ping This Post  [Post to Reddit] Reddit This Post  [Post to StumbleUpon] Stumble This Post 

    • Share/Save/Bookmark

    First UnCertification Workshop at Fifth BarCamp in Bangalore

    Friday, November 9th, 2007

    With the help of folks from ThoughtWorks, I’ll be facilitating the eXtreme programming collective at the 5th Bar Camp in Bangalore.

    If you are interested to know what is UnCertification Workshops, you can refer to It’s Diwali season, time to light all your Certificates.

    If you are interested in attending, please sign up here: http://barcampbangalore.org/wiki/BCB5_Registrations

    [Post to Twitter] Tweet This Post  [Post to Plurk] Plurk This Post  [Post to Yahoo Buzz] Buzz This Post  [Post to Delicious] Delicious This Post  [Post to Digg] Digg This Post  [Post to Ping.fm] Ping This Post  [Post to Reddit] Reddit This Post  [Post to StumbleUpon] Stumble This Post 

    • Share/Save/Bookmark

    Refactoring Fest

    Friday, November 9th, 2007

    Intent

    Provide the participants with a hands-on-experience of real world refactoring by taking an open source project and refactoring it.

    Summary

    Refactoring is a very well established practice not just in the Agile Community, but outside as well. Following are some of the books that have been published on this subject:

    Unfortunately, in-spite of such great knowledge available, there are lots of misconceptions around refactoring. The word “refactoring” is often used in a broad context where “enhancement” or “rewrite” would be a better term, and can cause nightmares to project stakeholders.

    This session is an attempt to help the development community understand refactoring a little better. It will provide a hands-on opportunity for developers to explore these concepts in action. This session will try to amplify the participant’s learning process by pairing them with other practitioners and peers.

    Slides

    http://www.slideshare.net/nashjain/refactoring-fest

    Intended Audience

    This session is suited for developers and architects who are interested to learn how to refactor real projects.

    Benefits

    After attending this session, the participants should be able to:

    • Build a common vocabulary in the refactoring space
    • Identify code smells
    • Eliminate code smells by applying the simple refactoring techniques explained in Martin Fowler‘s “Refactoring”
    • Write better unit/functional tests for legacy code
    • Understand some of the techniques and pitfalls in refactoring legacy code in the absence of unit and functional tests ["Working effectively with legacy code "]
    • Take existing code and refactor it to standard design patterns [Refactoring to patterns]
    • Learn about the internals of the open source project chosen to refactor
    • Know where to look to continue learning the techniques of refactoring

    Content Outline

    Section 1 – 90 Minutes

    Iteration 0 / Overview : 45 mins

    1. 20 mins: Quick overview about refactoring with some examples.
    2. 10 mins: High level overview of the open source project‘s design
    3. 05 mins: The participants form pairs and each pair picks up a module/package of the open source project.
    4. 10 mins: The participants spend time understanding the functionality of the module/package picked up by the individual pairs.

    Iteration 1 : 45 mins

    1. 10 mins: I’ll show 2-3 simple code smells, explain associated refactoring techniques.
    2. 15 mins: Each pair identifies one or more classes from the module/package, which has these code smells. They try and understand what it does, in the process they might do some basic refactorings like extract method and rename variables/methods. Eventually the goal is to writes one or more unit tests around it. Once they have sufficient passing unit tests [safety net], they start cleaning up code by applying some advanced refactoring techniques. In some cases, sufficient unit tests might not be required to do simple refactoring like extract method, rename variable, etc. Sometimes internally restructuring the code, can help us understand it better. Hence the participants will have to constantly switch between ‘understanding’, ‘unit testing’ and ‘refactoring’ hat.
    3. 20 mins: The pairs stops refactoring. Couple of pairs connect to a central project and demonstrates their accomplishment to the rest of the group. We can break into a discussion about each team‘s refactorings.

    Break – 30 Minutes

    Section 2 – 90 Minutes

    Iteration 2: 40 mins

    1. The pairs swap partners so that each team gets a new member and one old member continues on the selected module/package.
    2. 10 mins: I’ll show 2-3 little more complicated code smells and explain associated refactoring techniques.
    3. Pairs try to apply these refactoring techniques for the next 15 mins.
    4. At the end of 15 mins we have another 15 mins demo and refactoring discussion.

    Iteration 3: 40 mins

    1. The pairs swap partners again.
    2. 10 mins: I’ll show 2-3 more complicated code smells and explain associated refactoring techniques.
    3. Pairs try to apply these refactoring techniques for the next 15 mins.
    4. At the end of 15 mins we have another 15 mins demo and refactoring discussion.

    10 Minutes - Retrospective

    • What worked? The participants indicate what they learned.
    • What did not work?
    • What to do differently next time? Suggestions from participants on how to improve the session.

    Infrastructure Required

    • U shaped table setup with a projector at the center of the table which can connect to all the computers.
    • Either the participant get their own laptops with required software setup or we provide the participants with computers. We’ll need 10-15 computers for the participants. Each computer is set up for a pair [2 chairs]. The presenters will set up the computers with the required software a day in advance of their session.
    • 10-15 flip charts, one per team.

    Pre-requisites for attending the session

    1. Object Oriented Programming
    2. Java and Servlets knowledge [don't worry too much about this, pairing can save you]
    3. You need the following software setup on your machine before you come:
    1. Latest Eclipse IDE for Java Developers
    2. Latest Sun JDK
    3. Latest Apache Tomcat Web Server
    4. Latest Very Quick Wiki

    Set up instructions:

    1. After downloading, JDK, install it
    2. Set the JAVA_HOME env variable is not already set
    3. Unzip eclipse and try running eclipse executable [eclipse.exe]
    4. Unzip tomcat and try running startup.bat or startup.sh from the bin folder
    5. Take the vqwiki war and drop it into tomcat/webapps folder. Depending on the version of vqwiki you have downloaded, there will be a folder created under tomcat/webapps called vqwiki-x.x.x Where x.x.x represents the version number. For the purpose of these set up instructions, please replace x.x.x with your correct version number. Example if you have downloaded vqwiki version 2.7.8, then replace x.x.x with 2.7.8
    6. Start your favorite browser and go to [http://localhost:8080/vqwiki-x.x.x] Make sure the vqwiki page shows up
    7. Go to tomcat/webapps/vqwiki-x.x.x/WEB-INF/classes folder. Copy all the files expect the vqwiki folder to WEB-INF/src folder
    8. In Eclipse, create a new project called vqwiki. While creating the new project select the option “create project from existing source” and point it to the tomcat\webapps\vqwili-x.x.x folder
    9. Project would have compile time issues, since it needs the servlet.jar which is under the tomcat/common/lib folder. Add it to the libraries under the Java Build Path tab. Make sure that the code compiles without any problems.
    10. If you don’t want to start and stop tomcat from command prompt, there is Sysdeo/SQLI Eclipse Tomcat Launcher plugin for eclipse which can simplify some of those issues. Please note that this is optional.
    11. If you want changes to your classes being automatically detected by Tomcat, add the following line to tomcat/conf/server.xml

    <Context path=”/vqwiki-x.x.x” reloadable=”true” docBase=”vqwiki-x.x.x” />

    Note: Some of you might already have lots of these set up. Use your judgment if you want to skip some steps.

    [Post to Twitter] Tweet This Post  [Post to Plurk] Plurk This Post  [Post to Yahoo Buzz] Buzz This Post  [Post to Delicious] Delicious This Post  [Post to Digg] Digg This Post  [Post to Ping.fm] Ping This Post  [Post to Reddit] Reddit This Post  [Post to StumbleUpon] Stumble This Post 

    • Share/Save/Bookmark
        Licensed under
    Creative Commons License
    Design by vikivix