Home

Hello, I’m Veronica

The sky is not completely dark at night. Were the sky absolutely dark, one would not be able to see the silhouette of an object against the sky.

  • ,

    Are you a Resultant?

    I was reading through some old notes this evening and ran across this idea:

       Consultant:
       – Delivers Reports
       – Retains skill

        Resultant:
        – Delivers Results
        – Transfers Skills

    While I don’t think I want to be called a “Resultant,” I like how simply this places a focus on generating valued results and outputs. It also reminds us that it’s not just about doing for and to clients; we are most valuable when we help clients achieve results that they can successfully repeat themselves.


  • ,

    Agile on a Single Page

    One Page Agile PosterI like the one page agile poster from VersionOne (click it to enlarge). It conveys principles and execution concepts that are central to agile development and it gives sequence to their relevance. It captures the essentials that help ensure success regardless of any specific methodology that a team or organization adopts. In a single view, it sequences agile development across its stages from product concept to delivery. Teams would do well to check their practices against the concepts it depicts.

    It also comes without any explanation of its terms or meaning around its values. I will be exploring some core values of agile in the next post from this poster, and two other one page summaries of agile: the Agile Manifesto and the Declaration of Interdependence. In preparation for analysis, these two statements are also presented here with some background about their creation.

    Agile Manifesto:

    We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:

    Individuals and interactions over processes and tools

    Working software over comprehensive documentation

    Customer collaboration over contract negotiation

    Responding to change over following a plan

    That is, while there is value in the items on the right, we value the items on the left more.

    The team further identified 12 principles agile methods should follow:

    ·         Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.

    ·         Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.

    ·         Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.

    ·         Business people and developers must work together daily throughout the project.

    ·         Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.

    ·         The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.

    ·         Working software is the primary measure of progress.

    ·         Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.

    ·         Continuous attention to technical excellence and good design enhances agility.

    ·         Simplicity–the art of maximizing the amount of work not done–is essential.

    ·         The best architectures, requirements, and designs emerge from self-organizing teams.

    ·         At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.

    These statements were formulated in early 2001, by seventeen representatives from Extreme Programming, Scrum, DSDM, Adaptive Software Development, Crystal, Feature-Driven Development, Pragmatic Programming, and others. This statement represents the group’s finding of common ground in what they saw as a shared desire communicate to the need and support for an alternative to documentation driven, heavyweight software development processes.  This manifesto has since been adopted by the Agile Alliance.

    Declaration of Interdependence:

    Agile and adaptive approaches for linking people, projects and value

    We are a community of project leaders that are highly successful at delivering results. To achieve these results:

    ·         We increase return on investment by making continuous flow of value our focus.

    ·         We deliver reliable results by engaging customers in frequent interactions and shared ownership.

    ·         We expect uncertainty and manage for it through iterations, anticipation, and adaptation.

    ·         We unleash creativity and innovation by recognizing that individuals are the ultimate source of value, and creating an environment where they can make a difference.

    ·         We boost performance through group accountability for results and shared responsibility for team effectiveness.

    ·         We improve effectiveness and reliability through situationally specific strategies, processes and practices.

    This statement was formulated in 2005 by the founding members of ALPN, an organization dedicated to “making people great project leaders.” Each of the value statements conveys what this group thinks are the most important aspects of modern project management, and they also attempt to differentiate an agile-adaptive style of project management. Two of the fifteen authors of this statement also participated in the creation of the Agile Manifesto four years earlier.


  • ,

    4th Law = Eliminate Variability

    The first law of development, dictates the basic relationship between burn down rate, iteration time and number of story points being processed.

    I start this post with the fourth “law of agile physics:” Increasing variability in a process always increases iteration time and reduces burn down rates. Which modifies the first law in a simplified model to approximately:

    Iteration Time = Story Points in Progress / Burn Down Rate + n s

    Where s (sigma) is an absolute measure of standard deviation of the iteration time
    and n normalizes the variability relative to the best case performance at a given story point level: n = (story points in progress – 1)/(story points in progress * burn down rate)

    The effect of variability then is to push iteration time above its best case possibility and decrease the burn down rate of otherwise equivalent processes. Using the first law scenario, impacts are easily in the range shown below:
    Variability decreases cycle time and increases wip
    Also, the magnitude of variability relative to the best case iteration time, will greatly impact the resulting iteration times from the process: more variability means less throughput and more wip
    And, simulation shows that variability itself often grows as the number of story points in a process gets larger making the impact even more pronounced in large iterations:variability grows as wip grows

    Variability is inevitable.  The ability to understand, control and strive to eliminate variability is essential to maintaining a healthy development process. This is the focus of six sigma initiatives – when processes operate at a six sigma level of control, there is less than 1 defect in 3 million iterations of the process.  So, let’s define the causes of variability and assess ways to limit the impact of each.  Causes of variability in a development processes are generally from:

    • Natural Variability
    • Road Blocks
    • Re-work or Quality
    • Setup
    • Availability
    • Bottlenecks

    These are discussed below.

    Natural Variability – this is a catchall bucket that includes variability due to normal human behavior.  Included in this category are inherent differences in the nature of completing similar tasks, differences in skills and capabilities, differences in the time to problem solve, and other random impacts. I include in this category both variability between different people doing similar activities and between different activities for a single person. 

    Probability theory shows that breaking work into smaller independent elements reduces the impact of natural variability.  Without all the math, consider that there is a greater chance of a large task that completes in 1 hour on average to grow to 100 minutes (15% probability*) than for say 10 smaller 6 minute tasks with the same distribution all to grow by the same percent (0.1% probability.)   By breaking a big job into smaller pieces, we reduce the overall variability by orders of magnitude and make the development process more predictable. 

    Iterative agile development then, by its nature, helps reduce natural variability by forcing larger projects to be delivered in smaller pieces.  Other ways to reduce natural variability include skills training, modular design, and use of standards and templates.

    Road Blocks – this category is the equivalent of machine breakdowns in manufacturing and can have a large impact on process times.  The development process can stop because tools break (a computer crashes,) but more often they are blocked because critical problems and issues cannot be quickly resolved.  Unlike natural variability where the longer one works, the more likely they are to limit impact, road blocks can grow large and out of control quickly. 

    It is important to note that a few big road blocks can have a greater impact on project burn down rates than an equivalent number of smaller ones.  A two day road block yields the same availability as 8 two hour road blocks; however, the longer down-time from the first scenario has down stream impacts that are far greater.  Other activities dependent on the delayed work are likely to be stopped by the one larger road block, where multiple shorter roadblocks typically will allow other story point work to continue in downstream development.

    So, identify road blocks early – preferably while they are still only risks – and implement mitigation approaches to keep them small.  Don’t just track risks, but actively manage them and implement strategies that eliminate them while alternatives are still available. The format of the daily stand up meetings also plays to limiting road blocks by having a daily forum where one key focus is on openly identifying them so that timely resolutions can be applied.  Close collaboration also helps limit variability from this cause by surfacing issues early. 

    Re-work or Quality – To deliver quality, we look to the customer to understand what is required and we look to the development process to ensure it is delivered.  For the purpose of this discussion, let’s focus on quality as a measure of delivering features without the need for rework or fixes.  The critical thing to note here is that the impact of rework is highly non-linear to the fraction of work that is reworked.  With no rework, the impact is zero.  As we approach 100% rework, it grows to infinity and nothing can be completed.  For our forth law equation, the standard deviation of burn down rate can be significantly reduced as the rework percentages decrease (from 50% to 33%) in the example below: variation decreases as recycle decreases
    The implication is that errors should be eliminated at the source.  Thus slogans like “build in quality” and “zero defects”.  Often the focus in agile is on mistake proofing the development and build activities using techniques like test driven development (TDD) and pair programming.  These help to build quality code, but used alone, they lose connection with the voice of the customer

    Quality and mistake proofing need to spread across all activities of development: requirements, design, development, test and deployment.  Thus, we start and end with the voice of the customer in agile development.  They get the first word in iteration planning and the last word at closeout and retrospective meetings.  Customers typically only know whether you’ve met their requirements when they see the results, so create user stories to catalog requirements, grow them throughout the development process and validate them as soon as possible by releasing product to customers. In product design, the concepts of design for manufacturability ensure that the product designs can be built in a quality manner. In software development, where product manufacturing is the creation of new software, the concept translates to design for extensibility: using modular design, design patterns, coding standards, and comments to simplify maintaining, extending and refactoring code.  Quality testing begins with defining acceptance criteria before the build process and ends with user agreement that the criteria have been met. Acceptance and unit tests are automated whenever possible and the test base is grown throughout each iteration.  xUnit tools, page emulators and other test harnesses allow developers to literally “build in” testing and therefore quality.  Continuous integration, automated deployment and packaging product in each iteration limit variability in release activities.

    Setup – this is delay or added work resulting from a team or an individual changing focus. It is also sometimes know as ramp-up.  Obviously, there is setup at the beginning of a project when new people are brought on and new tools are configured.  It is often overlooked within other development activities, but there are also setup delays any other time focus changes.  This happens between iterations, when switching between unrelated activities, when working on multiple projects, at handoffs and when there is task fragmentation.  Each of these requires time to physically and mentally prepare for the new focus.  There may be different tools and programming languages to use, different requirements to understand, different standards to apply, and other adjustments to be made before the new task can start.

    The mitigation approach here perhaps differs from that used in manufacturing.  Flexible people, like machinery with short setups are essential to agile’s success. They are slightly faster in shifting focus and maintain better morale, but they have limited impact on maximizing burn down rates. And all people have a limited ability to flex. To maximize burn down, first focus on ensuring people are as fully dedicated to one project or initiative at a time as possible.  Plan each iteration based on priorities at the start, then do not change those priorities within an iteration. Maximize the span of control each person has in the development process so that story point features are delivered with few handoffs.  If multiple people are needed to deliver a feature, they should collaborate closely from the start to ensure understanding prior to any handoffs.  Finally, focus on keeping standards as similar between projects as possible so that transitioning, when needed, is less difficult.

    Availability – variability in availability can be caused by vacation, sickness, not being able to concentrate, interruptions and by the timing and percentage of a person to a project.  The impact is similar to that of road blocks. Strategies to mitigate the impact should be fairly obvious.  Of note here is that we should strive to maximize the team or organizations availability, not each individual’s.  So, this should not be taken as justification for skipping daily stand-up or impromptu collaboration meetings in name of minimizing interruptions.

    Bottlenecks – are typically caused because of a specialty skill that is in short supply or is over allocated.  Approvals also often fall into this category in development projects. The impact is effectively to reduce the team’s burn down rate to that of the bottleneck capacity.  Cross-training, Collaboration, and self-directed teams are proactive approaches to mitigate the impacts.

    Credit: Again, this post is developed from Wallace Hopp’s and Mark Spearman’s great book Factory Physics, Foundations of Manufacturing Management, Mcgraw-Hill/Irwin, 1996. 

    * For finish rates in a process, an Erlang-2 distribution better approximates the variability than a normal distribution.  This distribution always has a coefficient of variation squared equal to 1/2.


  • Measure Outputs for Success

    results graphI’ve responded to comments from clients in the past asking why they did not see certain contractors on-site at their project as often as they expected. This even on fixed fee engagements. When pressed, the managers usually could site no direct impacts from the resources not being there.  At project retrospectives, all parties felt objectives of the project were fully met. So, why the complaint?

    It’s just easier and more comfortable to measure inputs. This is a common theme and I think it is one reason time and material contracts continue to be a norm in consulting.  Employment is essentially an input measured profession. Short of major mistakes, most employees are paid for showing up. Thus the corollary, “I paid for the consultant, I want him/her here.” Having contractors work on site creates an input you can see and that seems real. It is also one of the least important measures of project success.

    I know projects can be successful even when teams are fully distributed. In 2006, prior to the Sun acquisition, MySQL employed 320 workers in 25 countries, 70 percent of whom worked from home. Even the company holiday party was held online. I’ve personally delivered successful projects where in the course of a 6 month engagement, consultants were on site with the client only a few scattered weeks for critical touch points. In these cases, the focus is more squarely on measures that ensure success.

    If you want to ensure success in any endevor, focus on measuring outputs. Track deliverables completed or burndown. Measure quality. Ensure risks are being mitigated. Measure tangible impacts to ensure value is being delivered. Measure stakeholder confidence and user satisfaction.

    Contractors and consultants that are billing by the hour would do well to use contribution to output measures as a yardstick for whether any hour is billable. They would do even better to tie their compensation more directly to a value proposition and bill according to an output measurement.


  • 3rd Law = Tell Me a (Short) Story

    There’s an implied assumption in waterfall methodologies that there is value in creating requirement specifications for development.

    Aside from the already discussed costs associated with delay, there are a few inherent flaws in assuming that dedicating time early in the development process to detailed requirements adds value:

    1)       We must know who the users are

    2)       Users must know what they want

    3)       Users must be able to communicate what they want and we must understand them

    I challenge each of these underlying assumptions.  The first difficulty is one that all projects must overcome to find success.  Chapters could be written on how to find and involve your users.  I’d maintain, however, that nothing brings out users like releasing a product into the wild.  Wrap a beta release with a forum or wiki and you’ll soon discover users you never considered.

    The second is another where whole books are written about how to “elicit” or “capture” requirements from users.  It sounds, perhaps appropriately, as if we are trying to coax them like a shy kitten from the corners of users minds.  In my experience, unless you are porting an existing application to a new platform, users will only have a notion of what they need to be successful.  Show them something that they can use, and they start to understand the possibilities.

    Finally, how many times have we heard, “but, that’s not what I meant.”  Even if users had a clear vision of their needs they may not communicate it clearly with words.  Even if they communicated clearly, a product owner or business analyst may not understand it.  Even if they understood it, the developer may not interpret it correctly. And so on, like the childhood game of telephone.

    So, what’s a product owner to do:  Collect stores like a good investigative reporter.  Stories are the voice of your customers. Use stories to help define the product vision.  Use them to define the product’s value and to give it a personality.  Use stories to define who will use your product.  Create personas for each user role – give them names, add pictures and a life and spell out why they love the product.  Use stories to create initial estimates of how big the effort is.  Use stories to determine priorities – absolute priorities about what is critical for the users to gain value and relative priorities to help plan releases.  Use stories as a reminder to have another conversation when it is time to develop how a feature will work.

    Use the format from Mike Cohn’s book User Stories Applied:

    As a <role>, I want to <goal> in order to <value>

    But, only gather enough stories with just enough detail to accomplish the above tasks.  Stories are the raw materials of development.  They should stay high-level and short until they are released into an iteration.  After stories are released, develop them to gain abundant detail.  Only then should you add the details: how will they look, how will they integrate with already created features, what architecture is needed to support them, what tasks must be done to create them, what acceptance criteria and test scenarios are needed to error proof them, and what as-built and user documentation is needed to support them.

    Thus, my third “law of agile physics”:  Wait until the last minute to finalize decisions and eliminate choices. The value of detail increases as its release becomes imminent. Or, you know what you need when you see it, until then, make up a good short story.


About Me

The sky is not completely dark at night. Were the sky absolutely dark, one would not be able to see the silhouette of an object against the sky.

Follow Me On

Subscribe To My Newsletter

Subscribe for new travel stories and exclusive content.