A Practical Approach to prevent sprints from becoming mini-waterfalls

Let me admit. Preventing sprints from becoming mini-waterfalls is hard.nature-waterfall

There are interesting articles out there (here & here) which explain how agile sprints are different from waterfalls.

The thing is to break big requirements into small byte sized user stories and deliver a few stories in every sprint. But the essential 4 step sequence does not change –1)  Requirement Analysis -> 2) Design -> 3)Code -> 4) Test

Teams start doing these 4 steps for each story within a sprint.

Update: This is fine as long as you don’t have any new type of requirements, for which the steps 1 & 2 are significantly time taking. Or the estimates are going to be hugely different based on the design. Meaning situations where lets say a new architectural block needs to be brought it, or a major arch/ design change needs to happen.

If you do have to bring in a major change in steps 1 and 2, then there are 2 problems here:

  1. Since the requirement has not been analyzed very well and the technical design is not done yet,  the estimates for these stories are going to be highly in-accurate.
  2. Second problem is that you would want to do related stories together with the intention of solving one ( or maybe two)  user problems in a given sprint.  If these stories are related then step1 and step2 cant really be parallelized for these related stories.

As a result the team would be doing step1 and 2 for the related stories in the initial phase of the sprint. Then the team would get to coding and then testing.  Producing almost waterfall ? Also, there is going to be very little certainty on the estimates & high chances of missing the sprint goals.

The Approach to mitigate the above problems:  Do the requirement analysis and the high level design before your main sprint starts. Meaning, take up these steps as a part of the previous sprint plan.

Here is how it looks:

 

Sprinting nicely

The orange boxes are the key.

Some part of the analysis( in the orange boxes) can happen as a part of the sprint pre-planning exercise and some can happen as dedicated stories for the team to work on.

Obviously, this wouldn’t be possible for when you have completely new stories coming in the next sprint which were not planned in advance but try to avoid that situation from a Product Planning/Scheduling standpoint. Also, stick to 2 or 3 weekly sprints.  The above approach would be very hard to do in-case 4 weekly or longer sprints.

This is what worked for me, would love to hear your thoughts and experiences in the comments section below.

The only way to make 2 week Sprints Effective

(Context: I am talking about software development teams, who ship using agile methods)

There is only one way: Automation. Automate everything – tests, build, deployment, monitoring, failure notifications. Every kind of test.

I have been in various teams / products where we tried doing this and failed. But lately also part of team where we had accomplished this to a great extent.
Here are the usual symptoms of teams NOT able to accomplish this:
  1. There is a ‘code freeze’ and then there is a dedicated time span – about a week for the QA folks to test the coded new functionality. That means only one week’s worth of code is going to get shipped. Isnt that too little.
  2. Another one is that several bugs get introduced in during these rushed releases.
  3. The QA team is under immense pressure to ship within the given timeline.
  4. The initial part of the sprint is where QAs have lots of free bandwidth.
For a heavenly sprint Automate the builds / deploys and automate tests at various levels.
 
Unit tests, functionality / UATs test automation, automate code coverage measurement, automate look and feel testing, automate security and performance testing and setup rules that if any of these produce major failures – then fail the build and send a notification to the developers / whole team.
 
Comprehensive Automation keeps the quality bar really high. At the same time, the developers & testers have to be on their toes to be able to produce such a level Automation.
 
When this happens here is how a typical sprints looks like:
  1. Dev and QA are involved early on during the design / requirement understanding stage.
  2. The sprint deliverables are broken into small byte sized tasks. Most of which can be coded in less than a day / 2 days.
  3. As and when these tasks are coded, QA starts testing them ( including automating their tests).
  4. Towards the end of the sprint only a few ( say 2 ) tasks are still being coded which typically finish on the second last day.
  5. And there is this last day for testing to finish off stuff and devs to fix any bugs.
  6. Last day EOD – release !
So practically the ‘code freeze’ duration is just one day (or less). Heaven, isnt it  ?

Automation is an engineering team’s brahma-astra to achieve God speed.

May automation be with you ( may God be with you 🙂 ) !

Want to be exceptionally successful ? Combine best practices with an open mind

Experiment
Lots of great leaders / academicians / researchers have written texts, helped define standards, practices, concepts that others can re-use and benefit. 

We also call them best practices. Do you think we should always follow them (by the book) ?
I would say ‘mostly’. That ‘mostly’ is for me to keep an open mind and creating space for some experimentation.
Experiment
Lets take a few examples where not following the erstwhile known best practice or the ‘standard’ was key.

#Think about the advent of Low cost airlines. Not serving free food.
#Think about huge transition happening right now in customer service from traditional call centres to twitter / Facebook.
#Think about the transition from classic waterfall software development model to agile and other new models.

Best practices / industry standards change. Are you with me ?

Practices followed by individuals / teams / companies that take leaps of success or become exceptionally successful are later followed by others.
This is what people start calling best practices and then they later evolve into a ‘standard’.
Think about the classic ‘Product Development Model’ of running a startup to the new ‘Customer development / Lean’ way.
The formula of successful folks, becomes the mantra for others. Did I make my point ?  Read that line again. ( What I meant is that these successful people had to invent their own little formula)
So here is my theory  – “If you want to be exceptionally successful, have the courage to experiment. Be open to trying new ways of doing things”

BUT there is a pre-requisite – for you to not adopt best practices, you must know what exactly you are letting go. That implies you must understand why a particular practice is called ‘best’ – why is that so good. What are those benefits of that practice and in what situation that you are willing to let them go. Obviously, you ll have to know why you are willing to let them go. Have a deep understanding before you play your bets. (Otherwise you would be depending on  your luck too much)
Go experiment wherever you want to ! ( And may be you ll get exceptional results 🙂  )

Dont just solve, solve beautifully !

I have been thinking about it for quite sometime, but this tea-cup in the Indigo flight made me write it. Behold –

20140217-010310.jpg

I told the air hostess to give me a very hot cup of tea.She confidently asked me to touch the pot. I did and gave my approval 🙂 The pot was pretty damn hot.
When she handed over the cup to me, I was shocked. The cup was just comfortably warm. There was a grooved cardboard wrapped around the paper cup.
And it was beautiful. I felt like taking it home to show it to my wife( she is very passionate about art and craft, let me tell you).

Created a wow (although momentary) feeling.

It had the indigo logo on it and a message on the bottom. The design of the cup pulled my attention from a business book i was reading( and I was totally immersed in the book) to this message ” the hottest drink on the coolest airline”.

Brand reinforcement.

I think I ve said enough.
Bottom line – When you solve for a problem( that may be just providing a comfortable cup to hold a hot drink), don’t just solve it, solve it beautifully. Create a wow feeling, make an impression ! Its your baby, Leave your signature on it :).

What say?

How to do a Perfect Sprint Demo

I am talking about Product based companies developing software using scrum methodology. And I am talking about the ‘demo’ and not the sprint review.  The sprint review typically happens at the end of sprint with Product Manager(s) & Designer(s), who review the output of the sprint about what was committed & what got delivered. 

Demo

The Sprint demo is about showcasing your work to a wider audience, senior stakeholders, your consumers, operations, marketing, sales people etc.  I have done dozens of these & experimented with some formats.Here is what worked the best for me:

Format 

  • Total Meeting time: 30 mins
  • Walk through a summary Deck: 5-7 mins
  • Show the demo: 5-8 mins (max 10 mins)
  • Q n A: 15 mins.

Preparation

  • Prepare a 3 slider deck.First slide – a summary of all functional stories delivered in the last sprint, second slide  – non functional, 3rd slide – defects & sprint metrics
  • Prepare a video of the demo. If you want to show a web app for example, show what you want to show on the browser and record it in a video. You can use snagit or quick time for recording a screen cast.
  • Now this video is the most important and trickiest bit.   For this you need to first write a small demo script – which would explain what would happen on the screen and what is the presenter supposed to speak at that time. Meaning what are the audience going to “See” and “hear” in the demo. ( its almost like writing screen play of a movie 😉 )
  • Write the screen play :
    • You need to weave all the stories delivered in the last sprint in an easy to follow video movie.
    • Make sure you give enough pause at each step where you can talk about what the audience are going to see next.
    • So things like clicking on a link, expanding a particular section, scrolling down a page – need an explanation as to why you are going to do that and what should the audience expect to see. So keep that in your screen play.
    • Repeating a point sometimes does not hurt.
    • Write a flowy script & tell a story about what real user problems are being solved.
  • Rehearse the script by following the steps on your software. When you feel ready, record the demo video.
  • Ideally you should record your voice along with the video too. ( this would be useful when you share your video with folks offline)
    • While recording your voice – use an excited & happy tone.
    • Give pauses at the transitions, tell them what they are going to see, after they have seen it, repeat what they saw.
    • Go in a flow, but at the same time, be a bit slow so that audience get time to soak it all in.
  • When the video is done, rehearse a bit again – be ready to give your confident voice during the actual demo.

At the Demo 

  • You are at stage.  Be confident. Welcome people with a smile 🙂
  • Set an expectation that questions ideally should be raised at the end.
  • Start with the deck and then quickly get to the video. ( you need to finish both in 15 mins)
  • Ideally, having the deck open in a small window on the side while the video is running helps.The audience can always see on the side to know what all is being covered in the video. ( or you can weave the deck into the video itself  – for a making it even better  )
  • Play the video and give your voice during the demo. ( Although the voice is preRecorded too, but keep that on mute, live sound energy is way better for a live audience 🙂 )
  • Make sure you sound energized and excited !
  • During the QnA round – if there is time left, feel free to call out individual attendees for their questions, comments, cover folks on the phone line too.  ( the names you noted initially would now help).

The above worked wonders for me, what about you ? Please do share your experiences below.

Paytm – you are awesome !

Dear Paytm,
I have been using your service for a year now I think (and have roughly made 50 odd recharges through your site / app).
Not just that, I think I have recommended your services to many many of my friends. The best thing I like about you is that it takes about 20 seconds for me to do a recharge. THAT was great !

BUT then sometime back you had some outages (you were probably doing some back-end upgrades) and I had some trouble recharging.
But I wasn’t worried ( everybody goes through a rough phase I thought)  and  kept coming back & kept trying to recharge. I was somehow sure that my money was safe with you.

AND THEN, I saw the “We r sorry” email you sent me (at the bottom). I just loved it. I loved your care, professionalism and humility ! 
I forwarded this mail to a few  friends of mine (they liked it too. I showed it to a colleague of mine & told him the outage story.  He too was impressed.

I had not written a  post in a while but you forced me to 🙂  You WOWed me & taught me a lesson on treating your customers well!

Thank you !
The email I got from you:

Hi there,

We introduced a change on our website last week (Refresh) and that didn’t go as smoothly as we had planned.

For the first three days, about half of our visitors had difficulty in recharging and about 5% of you experienced Cash refund related problems. Our software upgrade caused a large amount of unanticipated problems despite all of our planning.

Those problems are behind us now and throughout the past week our Care team has reached out to those of you who were affected and addressed your issues. We have solved these software issues and have been seamlessly handling all requests.

Throughout this glitch we have guaranteed that your money has remained safe – your trust in us is the most important thing to us. This was our primary goal.

If you are still facing any issues, do write in to care@paytm.com with the subject line“Fast track”

On behalf of our entire team, I again extend a heartfelt sorry for the trouble we’ve caused you and invite you to give us a chance again. I am amazed to see how many of you love to use Fast Forward so in case you haven’t used it yet, please give it a try.

At your service,
Harinder
On behalf of Team Paytm

Moving from Engineering to Product Management: Challenges, Changes and a few tips.

Role Change
Role Change
(thanks to http://www.pictures13.com for the pic)
Challenges 
  1. Your “things to do” list would be overflowing ALL the time. Even if you take no more things to do and just work on the current task list, it may take you a month to just wrap up those. This would lead to a constant prioritization loop. You would always be prioritizing on whats important for you to do right now, today and this week.
  2. No “Right” / “Correct” way of doing things.  You will need to figure out what works in your role, your product and your organization with your customers, your engineering team etc. This is very different from Engineering where you need to usually solve a mathematical looking problem and come up with the best suitable solution. Incase of Engineering generally the influencing factors (for your choice of solution) would be well understood so you can make a “well-informed” judgements.  This is very hard in a Product Mgmt role, the ‘influencing factors’ in your decision-making would be generally fuzzy. Many pieces of information would not be available.  Many data points would be un-verified. Many data points can be made available, but it would take a huge effort to gather those, and you would not have all the time for that  investment.
  3. Poor understanding  / standardization of the  role. Different organizations, different teams have very different understanding of what the Product Manager should do.  This leads to a lot of confusion, mis-understanding and the going gets tough. For example, I have seen orgs where PM defines what problems we need to solve, the use cases, business scenarios, HTML mocks ( if they are relevant), then leaves it to the engg team to build a system which can accomplish those goals.  I have also seen teams, where the Product Manager provides a requirements document which already defines an engineering approach for the problems to be solved and the engineering team is responsible for building that engineering approach( and does not care about the business use cases, scenarios). 2 extremes. Be careful about this clarity before you sign up as a Product Manager for a particular org (be it an org within the same company or a different company).
  4. Limited learning re-sourcesThere are a LOT of senior engineers to learn from. The knowledge and the wisdom has been gathering in this area for a long time and thus getting induced into this role and growing in terms of learing and executing best practices is rather easier because of the abundance of patterns. Product Management being a new role, has limited resources to learn from.
Changes: 
  1. You own the engineering re-sources now. You are the major influence on what engineering team should focus on. So be very careful in keeping your “hidden geek / developer” instincts under control. Hint: Don’t keep re-writing / cleaning up your software 😉 .
  2. Your tasks may run into several weeks / months (not days / hours) . Learn to live with that, don’t set or commit to aggressive timelines.
  3. There is no real boss now (like there was in the engineering days). You are the CEO of your product and your engineering team. Which translates to the need of a lot of self-motivation, self-confidence and drive. There may be times when you need a bit of appreciation for what you did or how you accomplished a task, but there would be no one appreciating you or watching you so closely (as would be the case in the engineering role).
Tips: 
  1. Learn to live with un-finished tasks.
  2. Learn to live with ambiguity, un-certainty.
  3. Develop a strong decision-making framework – work hard on your guiding principles and clarity on your long-term vision. Write your decision-making framework down – get guidance from your senior peers / bosses and make it concrete.
  4. Develop a habit to retrospect often, gather learnings and document them , share them. Add these to your decision-making framework as notes  / some other form. So that you don’t ever make those mistakes again.
Just my initial set of thoughts on this transition, would love to hear your comments. Please share your thoughts in the comments section.

“Dirt Mode” Software Development for SaaS / internet startups

Dirt Mode

Here is my 6 point definition of  “Dirt Mode” software development which suits developing new SAAS based  products. This is a practical software development style  and in some way supports the lean software development principles.

Dirt Mode
(thanks to http://www.dirtrider.com for the image)
  1. Use a pluggable and adaptive design (adaptable to alternatives in technology). Dont integrate with any one particular technology too deeply.
  2. Don’t try to create a “sophisticated”  design / architecture.  Keep it simple and lean. Assume that you are going to throw it away the next quarter.
  3. Build no automation tests and write bare minimum UTs just for your own confidence on the code. You know that you may end up throwing the technology you are using, and adopt a completely new one.  Take a look at one of my earlier posts to see why it makes sense.
  4. Use Test Driven Development like technique – don’t write automated tests, but create a detailed test plan before writing code.  Spend time review these test plans more than the code. This would ensure that the code delivered in the first go is high quality with few surprises.   You would save a lot of time in code reviews.
  5. Be crazy about measuring software quality and success after launch.  You know that there would be surprises. If you get to see issues in the way it works today, be more than ready to throw away  / re-factor any of your components and do a quick re-write (instead of trying to hammer the same thing too much).  If you miss this one, it would be too late for you to do a re-write / throw away when your customers start telling you how buggy your product is.  So you should know how you plan to check if you software is working as it is expected to in the live environment before it becomes a big issue for your customers and your business.
  6. Be very careful about what technology you choose for your product. Relying on the latest may seem cool and fashionable but in my experience its a very risky thing to do un-less 1) you are developing this product just for the fun of it and you mean to make no serious impact OR 2) You are doing it for experimentation mostly for RnD. Try to use more mature technologies which have plenty of adoption and support.

Once you get a feeling that the design and technology choices you had  made are reasonably right which would happen after a few iterations depending on your initial attempt(s) , you can then start putting in the the heavy-weight stuff like automated tests, extensive UTs, hardening the design by integrating with the technology capabilities more deeply.

Also, the point #6 only makes sense when you have a variety of choices. If you are building something that depends on the latest technology that was released yesterday,  you have no choice.  Take the plunge !

These are my thoughts, I would love to hear yours. Please share your opinions in the comments section.

Effective brainstorming:Five tips to tune your thought process

Hello Again ! Like all other posts of mine, this is no step to step guide to do anything, but a few tips that might prove useful or might bring a new perspective to look at the same thing. Here I am going to write about how you should tune your thinking in a brainstorming session to make it most productive.  The purpose of your session  may be to review an idea or a design or may be come up with a new idea or a solution.

Here are a few tips that are to do with how an individual thinks. It might take you a month or two  to be able to follow these tips:

1.  Articulate agenda, concepts, entities in one line. This is hard and may not come naturally to most of us, but this is something that pays off big time. Try describing your ideas, concepts, entities within your brainstorming session in 1 single line. Try using it and you ll realize the power this practice in clarifying and simplifying things.

2. Try to solve your problem using few entities (less than 4)  and then expand on top of them. Lets say you have a solution and you want to express it on a white-board. I would say start with very few boxes or entities involved in your solution. Generally whenever an idea strikes one’s mind, it does not have too many boxes involved. If there are too many to start with, try to brainstorm further and put them into categories, essentially trying to box multiple into one.

3. Keep track of the starting point(the initial problem) in a long of chain of thoughts. This one needs no further explanation, but in one line – this would help you cover all you wanted to in your discussion without missing any important points.

4.Choose the timing of the devil’s advocate very carefully. This is a biggie. Most of the innovative ideas get shot down in the initial stages. Give your idea or chain of thought enough time before you bring the devil into the discussion.

5. Try thinking in terms of words rather than abstract concepts. This is kind of related to the first point. But thinking in terms of words is very powerful as it enables you to widen your thinking your horizons, get further clarity and understand what you are talking about.