Scrum – The basics

October 7, 2009

What is Scrum?

Scrum is an iterative, incremental process for developing any product or managing any work. It produces a potentially shippable set of functionality at the end of every iteration. It’s attributes are:

  • Scrum is an agile process to manage and control development work.
  • Scrum is a wrapper for existing engineering practices.
  • Scrum is a team-based approach to iteratively, incrementally develop systems and products when requirements are rapidly changing
  • Scrum is a process that controls the chaos of conflicting interests and needs.
  • Scrum is a way to improve communications and maximize co-operation.
  • Scrum is a way to detect and cause the removal of anything that gets in the way of developing and delivering products.
  • Scrum is a way to maximize productivity.
  • Scrum is scalable from single projects to entire organizations. Scrum has controlled and organized development and implementation for multiple interrelated products and projects with over a thousand developers and implementers.
  • Scrum is a way for everyone to feel good about their job, their contributions, and that they have done the very best they possibly could.

How does it work?

People
1. Product Owner
person who will be responsible for prioritising work on the product. person who knows what is required of the product.person that is a good communicator and able to convey requirements.person who is committed to the success of the product, such that they are willing and able to dedicated a reasonable amount of time to its development.
2. Scrum Master:
responsible for supporting the Scrum Team, coaching and guiding them through this process, and removing any impediments blocking their progress.
The Scrum Master is responsible for facilitating the Scrum meeting. Keeping it focused. Keeping it timely. Keeping it ‘on topic’. The Scrum Master is also responsible for removing impediments. Impediments raised during the Scrum can be noted on the whiteboard for the Scrum Master to deal with.
The Scrum Master does not have to solve all impediments personally. They can delegate. But they are responsible for ensuring the impediments are addressed. And addressed quickly. A key part of the Scrum Masters role is to protect the team and keep them focused on the tasks in hand.
3. Scrum Team:
Team that is "committed" to delivering

Process

Step 1:
Get the Product backlog:
Items on the Product Backlog should ideally be expressed in business terms that are of some value to the user (or customer, or business). Not as technical tasks.
It also contains technical issue or risk like "security.. etc.." . All the things that can cause sleepless nights.

Step 2:
Prioritize
Only the Product Owner can prioritise the Product Backlog
Order of product items determines the priority.

Step 3:
Estimating Product backlog:
Estimate your product backlog in points. Not in units of time . [ Its just a guestimate ]
Gives measure of "how big the item is" not "how long it will take"
Relative estimates using fibo numbers. Choose the easiest task and give it a 2 point. Then increasing work through items and assign points.
This should be done by scrum team (exclude product owner)

Step 4:
Reshuffle
Based on the points (difficulty of the task) product owner can reshuffle the product backlog
At this point team has list of product items (product backlog)

Step 5:
Sprint Planning
Developers, Testers, Product Owner, Scrum team, Scrum master
Choose Sprint duration (max 1 month) ( this should be consistent across all future sprints)
Target backlog : subset of product backlog items that needs to be delivered.
Have stretch tasks that are not expected by the product owner to be completed.
Product Owner presents each item and a discussion develops. Everyone comes to term with what is required.

Step 6:
Sprint planning meeting 2
Optional for  QA and Product owner  to attend
Scrum team discusses on how its going to deliver each product item
Arrive at available time : #members * #hours in sprint duration
for each feature break into tasks
Include all tasks necessary to make the Product Backlog item 100% complete – i.e. potentially shippable –
Estimate each task in hours. Each task should NOT be more that 1 day
Add up all the task estimates for the selected Product Backlog.
If its significantly over the team’s Sprint Budget, reduce the number of Product Backlog items .the Product Backlog was in priority order, so if possible it should be the lower item(s) on the backlog that are removed from the Sprint

Step 7:
Collaborate
Columns on White board:
Product Backlog, Tasks To Do, Work In Progress, Ready To Be Verified and Done!
The Scrum team makes its own decisions during the Sprint.
"Least" manager intevention !
Ideally, once a Scrum team has committed to a Sprint, they should be left to focus on delivering what they’ve committed to. Constant changes to priorities prevent a development team from being fully productive and in the worst case can prevent a development team from delivering at all.
Priorities can be changed during the sprint but cost of completing it should be double the actual cost because it disrupts the teams flow !!

Step 8:
Daily Scrum meeting:
1. What have they achieved since the last meeting? (yesterday)
2. What will they achieve before the next meeting? (tomorrow)
3. Is anything holding up their progress? (‘impediments’)
Keep to 15 minutes
ONLY the scrum team + scrum master meets.
Scrum master should help in removing impediments be it technical or business.

Step 9:
Burn-down chart
Take all the tasks to be delivered in a particular Sprint in Scrum, i.e. your Sprint Backlog . On your Sprint Backlog, enter the estimated time to complete, which of course at the beginning of the Sprint is the same as the original estimate.
Each team member can be responsible for updating their own ETC’s on a daily basis before the Scrum.
Be honest!
Plot progress visually on a graph
You get to see where the project really is, every day, in all its techni-colour glory!

Step 10:
Review and correct mistakes at the end of scrum


Groovy – Operator overloading

July 1, 2009

Yeah. this is one of the things that promotes a language from “ah ! I use it”  into “ah ! Look what I can do!” Among other cool things to groovy up your work, operator overloading is an absolute must know if you plan to fascinate yourself (and of course your PM) . Cutting to the chase here is the sample code

class Money{
    int amount;
    String currency;
    Money plus(Money m){
        return new Money(amount:(m.amount+amount),currency:currency)
    }
}
Money m= (new Money(amount:1)+new Money(amount:2))
println m.amount

 

Ok. unfortunately groovy doesn’t support specifying operator character in method signature and this stems from the limitation from java [ groovy has its roots at the jvm ]. The example above may not provoke more than mere “thats cool” but implications of this can be seen in GDK (groovy dev kit) with includes some extensions for java libraries. So when you say,

list=new ArrayList()
list<<1  // adds the element to the list

here the operator << corresponds to the leftShift method being overloaded in the arrayList . This is groovy’s style of saying   “ list.add(1) where List should have Integer generics” as you say in java. Yes you guessed right :  “autoboxing” is something groovy provides out of the box.

Not yet groovy? Combine the operator overloading with the use construct.

class FakeAdder{
    static Object plus(Integer a,Integer b){
        return a*b   //this is not a bug!!
    }
}
use(FakeAdder){
    println 2+5
}

Output: 10

The operator + has been overloaded in the specific context to multiply numbers rather that standard add. Very powerful indeed. Try it yourself and share your comments.


Get in the Groove.. Groovy Style

June 27, 2009

Groovy . besides the funky name is a really cool dynamic scripting language to learn. Let me ask you a question: Do you key in all your code in java ? if you answer ‘yes’ then you are 50% groovy expert already. otherwise, well its never too late to be productive. If you are like me coding  in java and following the ancient write –> compile –> execute cycle over and over again until you see what you want / your PM wanted . Then you walk proudly across the office corridor to the PM’s room and say : “This is what i was working on this week/month/year and there you go”.  This is a usual routine in software development. The sooner you can bring the smile on your manager’s face the sooner you will be appreciated. With groovy you can bring it on in hours/ days.

As much as i like java and appreciate its realization of OO concepts deep down there are things I hate in java. If you are thinking & coding in java 24×7 chances are, you will stumble upon those annoying things soon. One such annoyance: clashing of class names imported from different packages say java.util.List and java.awt.List . You may end up prefixing one of the class usage with package path. Welcome to groovy world. Here you will find that you can do something like,

import java.util.List as UtilList
import java.awt.List as AwtList
UtilList list=new ArrayList ()                                                                             
list<<1

Surprise,surprise this code actually runs if you run groovyc or groovy on the file (although it might output empty []). I am going to miss my late friend : “ public static void main“ .

If you are a python  programmer you may not be impressed by the above but guess what : your language doesn’t run on a JVM and embed with java code without compromising  performance greatly and don’t even get me started on Jython.

Surprisingly you will notice that your code can be compiled to a corresponding java class file [ jad classFile   - to see the generated file ]. from that point on jvm sees everything as class. This gives enormous edge for groovy over other dynamic languages because undeniably a significant number of organizations use java for developing their products. You may not regret spending weekend learning groovy. I am sure most of the things you learn in groovy ( be it currying, meta programming ) will make you cry “ duh!! wish i had known this before” . Have fun groovying around :)


Copying is Not an art

October 16, 2008

When was the last time you got caught copying..? Once in our lives knowingly or unknowingly we tend to copy others. Copying is a creativity killer in places like music industry . Copy cat music directors have to be put to shame before law and people. Recently i heard a copy cat song – “unakena naan..”  by vijay antony in kadhalil vizhundhen tamil movie that made my blood boil like lava. These are exactly the kind of things that keep me away from listening to tamil music. Lack of orginality and greed to get famous drives such artists to fame. Should we allow them.? is in our hands!

Imagine a lazy student and a brilliant one appearing at an exam. The brilliant guy just thinks creatively to answer the questions but the dumb guy peaks at the brilliant guy’s answer and writes down all the answers when the inviligilator comes back after a coffee he looks at the dumb guy’s paper first and gets impressed. If the tamil music lovers want to “see” music and shell themselves from the rest of the world.. well… thats all that can be done. Anyone can play existing music and plugin their own lyrics but it takes creativity and innovation that makes a music director . If vijay antony can’t deliver that.. he is probably not fit to be one..

This blog may sound outragious but the last thing i want is one crack MD copying a song i love and make it sound even worse… Someone should put him out of his misery please.!!