Agile

What it takes be an Ittecan. 3

Some of you might not know, but here at Itteco we do our work applying Project machine principles. In theory, project machine is a certain structure of people, communication methods and collaboration between team members, who are ready to solve project tasks and problems in a stand-alone mode and on their own, without nagging control of the manager.

Project machine is not a methodology, like agile or SCRUM, it doesn’t cover the risk management process, requirements gathering, bug-fixing, analysis, QA, defining complexity or priorities. Project machine is rather an organizational layer on top of any methodology.

Manager has a significantly different role in the project machine approach. He is not a lead developer ­– he is the person responsible for continuous process flow with no glitches and stops.

Project machine defines and shapes team members, who should possess certain qualities:

  1. self-contained developers, who are apt in flying solo;
  2. talkative and sociable team workers;
  3. result oriented and motivated individuals;
  4. perpetually polishing their skills and learning something new;
  5. possessing the same sharing passion.

Continue reading…

“Done” = “I am proud of it” 2

‘’Done means DONE” is the fundamental assumption of all agile software development methods. Agile does not address the need for re-work or repair orders, assuming it is close to 0.

I believe, Definition of Done (DoD) is one of the greatest challenges for agile teams and one of the most often reasons agile teams fail.

There are multiple checklists available for “Done”, for example here or here. Checklists are great as they formalize the requirements for the coding practices qualities. Yet, it still does not necessarily lead to avoidance of failure.

What we therefore assumed as DoD has been “Done means Shippable”. Well, it does not disambiguate the DoD much. Moreover, in my experience, it does not necessarily lead to the amazing products being developed either.

This said, I would like to change the DoD to “Done means I am Proud of It”.

I believe it would work great for both product owners, scrum masters and team members’ motivation as well as will bring much superior results than quality expectation of “done means shippable”.

We also would need to put a checklist together for coding practices, but it would need to develop this main theme.

What do you think?

Lean Software Development 4

Scrum is fast and controllable, but sometimes such a speed is not enough…

As you know, until the software or set of requirements has been deployed to the production environment it passes several stages:
1. Analysis
2. Development
3. Testing, bug-fixing and integration
4. Deployment to production

It could take some time to analyze set of requirements, develop, test and deploy them to production. After that the product owner
can’t really be sure that the feature gives the same business value as it was originally planned.

Even in scrum with the very short sprints, like 1 week it still gives the concerns about the benefits…

Although, scrum is focused on delivering the highest priority business value as defined by the product owner, sometimes the
deliveries every sprint time is not enough. The world is changing very fast, so you need go live with your ideas as fast as possible.

What if (Let’s put several assumptions to your application)

1. Your system is already running on production.
2. You prefer to see feature by feature on production rather than having a weekly demo with all the features planned to be developed in the sprint. Generally, as soon as the feature is ready, you would like to see it on production.
May be after you see the feature on production you’ll come up with some more ideas that have much more business value than the user stories in your current sprint backlog.
3. Your developers are very talented and professional. You are sure that they will deliver at least 80% of your story. The last 20% – bugs and misunderstandings.
4. The business value of those 20% is 1-3% of the whole user story.
5. The value of the bug or mistake that your team can do is insignificant. If your team has deployed something to production that works only for 80% – that is fine for you.
6. You are sure that deploying new feature will not break down your system. The most terrible – it can lead you to some usability issues on your back-end which can be easily fixed withing one day.
7. Even if the feature has been deployed with several bugs, the business value it brings to your system is more than the price of the bug.
8. So, you are not afraid of deploying your functionality to production.
9. You care more about the delivery than about the complexity. You are sure that your team will always do their best to deliver your user story as fast as possible with the maximum possible quality. So you don’t care how precise did the team put the complexity. Anyway the story has been delivered as fast as possible (You will need the complexity only for making measures, to make your process even faster).

Than you probably can get more benefits from the approach called lean software development.

Examples of the systems which can be under those assumptions:
1. Web site with a backed, 3-5 workers working with the backed
2. eCommerce systems with not more than 50 requests/operator.
etc.

How to accomplish that? You can start from the most important things:

1. Stop working in parallel. If you have several features to be developed, let your developers on all the features together.
If your developers are good enough, than the development of the 3 features (even if is very small, like 5-6 man-hours) with 3 people when they work altogether on feature 1,2,3 sequentially, should be almost the same as if every developer will work on his own task.
But the benefit of seeing the feature live as soon as it ready is enormous, instead of seeing 3 feature together in some weeks. As soon as the feature is on production it starts to help you in earning money, which you can you for developing new feature. So you don’t need to have a big budget for your project.
2. Make your user stories as short as possible – (try to make them not more that 16 man-hours).
3. Install the continuous deployment process

You can get a very interesting explanation here: Reduce lead time

Stay Lean 2: minimize waste, shorten lead time

A while ago, I put up a praise for staying lean. This week, I stumbled about surprisingly clear guidelines on how to transform to being lean in 12 steps by Stephan Schmidt (Grab the eBook now, it won’t last, I assume).

Among the must-have and priority steps for us, I would take the following:

  • Increase quality (which for me is an equivalent of re-defining the criteria of what ‘Done’ means)
  • Stop working in parallel
  • Continuous deployment
  • We have worked on “No single point of failure or bottleneck” lately, yet it still needs a bit of effort

Generally, it is all about minimizing the waste to get the shorter lead times. While pure lean management is not perfect for all of the outsourcing projects, the engineering practices is what needs to be inherited.

We will try to achieve the ultimate goal of continuous deployment on Itteco’s in-house projects. It would really be an awesome accomplishment. So, we’ll try, and you may try with us.
Start minimizing the re-work, which still accounts for most of the waste in our projects. Then go into automation of the deployments to staging servers. Itteco’s project repositories are built to enforce the deployment automation from the day one, and you could check with our Ruby/Rails guys how they are doing it. There is also a good deal of deployment related posts at the Rocket Science blog. Once this is done, we’ll work on the unit/integration tests coverage and minimizing the QA cycle.

Continuous deployment, here we go!

Long story short: Fixed price & Agile

Long story

The “Fixed Price in Agile Projects” tale is long enough. There are multiple views, which all dance around unbinding Price/Time-Scope-Quality triangle as agile projects are much less predictable in conventional sense (“conventional” meaning delivery of the predefined scope within predefined period time, whereas agile approach sets another convention – deliver what is really needed).

Martin Fowler has the simple answer – don’t fix the scope, but you may fix the price, time and quality. It is because of the fixed scope mirage and scope limbering which happen all the time.

Greg Young is discussing the issue at different angle: legal commitments cannot just end up being “we will do our best” statement in most corporate cultures. And even such legal conclusion is confrontational and opens both customer and delivery company up for legal fun, should issues arise. Therefore, the advice is not to go agile on fixed price (and for sure have clear “completion” criteria in place on paper).

And even though some still reasonably advocate that agile is about being efficient, and, therefore, it still makes lots of sense to be agile on fixed price contracts – there seems to be no silver bullet on Fixed Price vs Agile.

I for one have put my thumb up on all the reasons provided. Yet still live forces to come up with the solution on how to tackle this challenge.

Short

Well, we have tried one approach in a number of projects and it seems to be working great for both client and delivery company. And does not at all unbinds Price-Scope-Quality triangle. It keeps it. Yet it is agile (more accurately – Scrum).

My answer is – shorter commitment periods:

  • We still would have fixed price per sprint. As sprint is fixed time-boxed anyway, it is comfortable for delivery company. Maximum sprint length is 1 month…
  • We would have the Must Haves, Could Haves, Nice to Haves within the sprint backlog. We legally would agree to Must Haves delivery. As Scrum team commits anyway – it is natural for them. Yet it makes customer more comfortable to commit financially. If Must Haves are not finished within sprint, it is still the responsibility of the delivery company – but as the time commitments are shortened, the risk is not as huge at all. And the further we go with development, the better we work together with the client
  • We would still have regular demos to set up the expectations and to discuss our common approach on vague requirements definition when it starts to come together.

This approach makes us achieve one of our major objectives – collaborate together with the client, not just work for them. Well, it means – better products are built and stronger relations are created.