Monday, June 10, 2013

Agile Velocity welcomes Mark Spitzer!

Agile Velocity is pleased to announce the addition of Mark Spitzer to our team as an Agile Coach. Mark is a practicing Agile Coach and Software Craftsman. He believes in doing things right, doing the right things, and having the organizational courage to address tough issues. Having served as a principal engineer for many years, he is a strong advocate of software craftsmanship and clean coding.

Mark has helped software companies and IT organizations build strong engineers, produce quality software, and delight customers through a repeatable approach. He enjoys staying current with technology and its application in creating great products. Mark understands and promotes the value of culture and fun in a collaborative work environment.

Wednesday, June 5, 2013

Why Decomposition Matters

As children we were told by adults to take smaller bites when eating. We didn’t always understand the risk of choking that they saw, but ultimately it was easier and safer to chew those smaller bites. In some cases, taking smaller bites made the difference in finishing more of the meal. But have we translated that lesson to other things in our lives?

Often we try try to tackle things that are too big to sufficiently understand, estimate, or complete in a reasonable amount of time and we suffer for it. We don’t always see the risks that hide in more complex items and thus don’t feel compelled to break them down. Other times we fail to break things down due to unknowns, ignorance, uncertainty, pride, optimism, or even laziness.
Ijad Breakdown

Variation in Software

Delivering software products is a constant struggle with variation of size and complexity. It’s everywhere, from the size of user stories to tasks to code changes to releases. It is present from the moment someone has an idea to the moment software is deployed. We strive to understand, simplify, prioritize and execute on different types of things that are difficult to digest. The more variation we see, the more we struggle with staying consistent and predictable.

Because of this variation, we need to be good at breaking things down to more manageable sizes. This need is so pervasive, I propose it be viewed as a fundamental skill in software. I don’t think most teams recognize this and certainly don’t develop the skill. Many people on Agile teams exposed to concepts like Story decomposition don’t often realize how often they need to apply similar practices in so many other ways.

Why Decomposition Matters

My example of eating small bites was simplistic. In developing software, there is a lot more to gain but it is still ultimately about reducing risk and making tasks easier.

Progress

According to The Progress Principle, a strong key to people remaining happy, engaged, motivated, and creative is making regular progress on meaningful work. Not surprisingly, we want to get things done, but we also want to feel a sense of pride and accomplishment.

Of course, stakeholders and other parties are interested in seeing progress from those they depend on. When we are able to make more regular progress toward goals, we provide better measurements and visibility for ourselves and others to know how we are doing.

It should be no surprise that smaller items enable quicker progress toward goals, if done right. We certainly need to take care to avoid dependencies and wait time. Smaller, more independent goals allow more frequent progress and all the benefits that come with it.

Collaboration

As we have more people working on something, is it easier to put them all on a larger, more monolithic task or divide and conquer? Usually we prefer to divide and conquer. Yet how we divide is important as well because dependencies and other kinds of blocking issues create wait time and frustration.

Decomposition can be one of the easier ways to get additional people involved with helping accomplish a larger goal. By breaking up work into more isolated items to be done in parallel, we are increasing the ability to swarm on a problem.

Complexity

complexity
Complexity is one of the greatest challenges in software development. With more interactions, operations, and behavior,s we are more likely to have edge cases and exposure to risk when anything changes. Large goals are easier places for complexity to hide. The larger the task is when we try to accomplish it, the more details we have to discover, understand, validate, and implement.

Focusing on smaller units of work can be a helpful constraint we place on ourselves. Why add our own constraints? When we constrain ourselves to work on a small portion of a larger task we are trying to limit the complexity that prevents us from accomplishing something. We want to avoid a downward spiral of “what if?” and “we are going to need” scenarios that, while important, can slow the task at hand and lead to overthinking and overdesigning and accumulating work we may never need. We are trying to avoid Analysis Paralysis.

Control

By looking at Kanban systems we can see wide variations in size can impact lead times. If we can be more consistent with the size of items flowing through a system then we will have more consistent throughput and cycle times. By breaking down work items more frequently into items of similar size cycle times become more stable and the average size (due to whatever size variation remains) becomes more useful for forecasting due to the law of large numbers.

Clarity

It isn’t a coincidence that Break It Down is also a slang phrase appearing in music and pop culture that also relates to our goals. Urban Dictionary defines “Break It Down” to mean: To explain at length, clearly, and indisputably. By looking at the pieces of a larger whole individually and in more details we can often gain more clarity and understanding of the bigger picture than if we had never spent the extra effort.

Summary

Software Development is a continual exercise in dealing with variation of size and complexity. From early feature ideas, to low level code changes we have work that can be difficult to understand, manage, and predict, especially when it is large. Decomposition helps us make this work more manageable. 

So, we need to remember to Break It Down. It is all about decomposition. And in software, decomposition is everywhere, yet so many struggle with recognizing the need and applying it well. I believe decomposition should be considered one of the most fundamental and critical skills in software development. Getting better at it takes a combination of discipline, practice, and learning but can pay off immensely.

To be effective, even this post required decomposition. We are going to continue with a series of posts exploring many of the individual types of variation in software and how lean/agile teams cope with these different situations.

Tuesday, June 4, 2013

Do you Divide and Conquer or Swarm?

Imagine you have 6 developers and 6 features to build, estimated at 1 month each. Leadership says they are all top priority. Traditional managers would optimize on individual efficiency and assign each developer 1 feature to focus with minimal interruptions.


Here is the problem: Something is going to change.





What if half way through the month a new higher priority feature is assigned to the team? Do you take someone off of their feature and absorb a switching cost? What happens when the developer goes back to their original feature weeks later? Do you double the load of your best developer and ask them to be a hero?

Or what if Feature 3 turns out to be twice as big? If all of these features are on the same code base, then all of the features may be delayed waiting for the long straw.

What if instead of starting all 6 features at the same time we just started working on 2? What would be the impact to change now?


If halfway through we learn of a new priority, we still have the option of delaying the whole thing but we also have the option of deprioritizing one of the original features without much switching cost.
By swarming the team on a few problems and working collaboratively (instead of in silos), not only do we get the benefit of less Work in Progress allowing more agility to absorb changes, but we also benefit from increased knowledge transfer.

Swarming and collaborating are new skills agile teams must learn in order to be highly effective with Scrum or Kanban. Don't focus on trying to optimize the efficiency of one individual's output, but instead focus on optimizing to achieve great outcomes.

Wednesday, May 29, 2013

Qualities of a Good Team Player


The word "team" in Agile Team is hugely important and something we rarely give much thought to.  I recently browsed the web to discover and define what really makes a good team player.  Part of my personal journey is to improve as a member of my team.  I look to these words for inspiration. 

Coming together is a beginning.
Keeping together is progress.
Working together is success.



None of us is as smart as all of us

Dependable, reliable, and consistent

You can count on a reliable team member who gets work done and does his fair share to work hard and meet commitments.

Communicates Constructively

Teams need people who speak up and express their thoughts and ideas clearly, directly, honestly, and with respect for others and for the work of the team.

Shares openly

Good team players share. They're willing to share information, knowledge, and experience. They take the initiative to keep other team members informed.

Asks "What can I do to help the team succeed?"

Team members who function as active participants take the initiative to help make things happen, and they volunteer for assignments.

Listens

Teams need team players who can absorb, understand, and consider ideas and points of view from other people without debating and arguing every point.

Cooperates

Good team players, despite differences they may have with other team members concerning style and perspective, figure out ways to work together to solve problems and get work done. They respond to requests for assistance and take the initiative to offer help.

Flexible

A flexible team member can consider different points of views and compromise when needed.

Problem-solver

They're problem-solvers, not problem-dwellers, problem-blamers, or problem-avoiders. They don't simply rehash a problem the way problem-dwellers do. They don't look for others to fault, as the blamers do. And they don't put off dealing with issues, the way avoiders do.

Considerate

Team players treat fellow team members with courtesy and consideration — not just some of the time but consistently. They care about the team winning.


When observing the best teams, it is difficult to identify leaders.


  • The creative type who generates ideas called the Plant
  • The extrovert who has good networks (the Resource Investigator)
  • The dynamic individual who thrives on the pressure (the Shaper)
  • The person who soberly evaluates the usefulness of ideas (the Monitor-Evaluator)
  • The cooperative team player (the Team-worker)
  • The ones with specialist skills (the Specialist)
  • Those who turn ideas into solutions (the Implementer)
  • The person who get issues completed (the Completer-Finisher)
  • The person who keeps the team together effectively (the Co-ordinator).


Tuesday, May 7, 2013

Avoid Surprises at Sprint Planning, create a Definition of Ready?

There has been a lot of talk over the years about having a definition of “Done” or “being Done”, but I think it is just important to have a definition of Ready.




Have you ever been in Sprint Planning and been surprised to find out the requirements aren’t clear or the team has no idea how to implement it?

The original Scrum writings stated that Sprint Planning should be done in two parts:
  1. Review the scope and understand the stories
  2. Task the stories
More and more, I see teams conduct part 1 earlier, during the previous Sprint in backlog grooming sessions. The goal is to work ahead just enough to limit the number of surprises during Sprint Planning and consequently, the Sprint. To know what is just good enough, you should define your Definition of Ready. i.e. What does it mean for your team to be ready to start a Story in a Sprint?

I recommend teams spend up to 10% of their time preparing for future Sprints. This may involve activities such as the following:
  • Reviewing Epic or MMF (Minimally Marketable Feature) stories and breaking them down into Sprint Sized Incremental Stories
  • Having conversations with the Product Owner (PO), Stakeholders and/or customers to understand their needs and working with the PO to document the Acceptance Criteria 
  • Discussing new stories and providing a rough sizing estimate so they can be prioritized
  • Thinking about what will be needed to implement the story: New HW or SW? New Knowledge? New Architecture? Paying off accumulated Technical Debt?
  • Working on just enough design to keep things flowing. It is common for UX Designers to work about a half a Sprint ahead of the rest of the team.

So if your Sprints have a lot of surprises, you might consider working with your team to form a Definition of Ready and allocating time to work a little bit ahead. Your Sprints should flow like a track relay where the next runner is already running as the other one starts. Don’t start your Sprint’s flat footed.

For further information, see our Evolution of a User Story post to learn more about how to get your stories ready.

Austin DevOps Events Summary - Culture is Important

Last week some of our team attended several DevOps related events here in Austin. We had a great time learning and interacting with other technologists attending both  PuppetCamp Austin and DevOps Days Austin.



This edition of the annual DevOps Days event in Austin (which also takes place in other cities each year) was declared the biggest. There were great discussions, Ignite talks, and Open Space sessions as well. And while there is always much conversation around technology, there was a noticeable focus on culture.

Many of the talks on both days had a strong cultural component. On the second day, the organizers even mentioned feedback from some attendees to move past the culture stuff and on to tech talks. But it was obvious from the sessions that a large number of people felt the cultural conversation was important. Those of you in the Agile community who haven’t looked closely at DevOps will recognized these are similar conversations to those occurring about Agile in general.

Some notable takeaways:
There were too many great talks to highlight them all here. You can see all the recorded talks on Vimeo. You should also look back through tweets to see what people were saying during the conference.

If you haven’t attended one of these events, you should definitely try to attend at least one they put on each year.

Monday, April 15, 2013

Announcing: Behavior-Driven Development with Cucumber Workshop June 4 & 5

Our goal is to change the way you think about building software. 

Behavior-Driven Development (BDD) employs the approach of specification by example. Instead of talking in abstract terms about what the system will do, the team collaborates to create specific examples that specify what the system should do from the user's perspective. These executable specifications function as acceptance criteria for the user stories the team is developing. The team specifies as concretely as possible what the specification is, and then the developers code enough of the system to make the test pass to satisfy the acceptance criteria for that specification.

Cucumber

Cucumber is such an amazing BDD tool because it’s so good at mapping stories and acceptance criteria to automated functional tests. Product Owners and BA's write acceptance criteria in business language. Developers and testers unobtrusively automate tests for them.

Taught by expert instructor Paul Rayner, coauthor of the upcoming Addison Wesley book, BDD with Cucumber, this 2-day hands-on workshop is designed to get you productive with doing BDD with Cucumber in the shortest time possible.

Class Schedule:

Day 1: Introduction to BDD

  • Introduction to agile background and process
  • Feedback loops: vicious & virtuous
  • Building quality in
  • Understanding the place of BDD - the agile testing matrix
  • Outside-in testing
  • Why test automation?
  • Build the right product using specification by example
  • Creating a ubiquitous language
  • Writing scenarios with Cucumber

Day 2: Creating Value using Cucumber

  • Using Cucumber for using specification by example to test web applications
  • Best practices for Cucumber test scenarios
  • Dealing with scenario data
  • Adopting BDD with Cucumber - emphasize learning and focus on value

Who Should Attend:

All delivery team members:

  • Testers and QA staff
  • Developers (Ruby, Java and .NET)
  • Project managers
  • Product owners (Business Analysts, domain/subject-matter experts)
  • Software architects

Requirements:

Attendees should bring a laptop for the class coding exercises. A pre-configured virtual machine image will be provided for class coding exercises.


Registration