RSS

Tag Archives: practices

Why do organizations limit their agile focus to just development?

Seems like I’ve been suffering from frequency illusion (aka blue car syndrome) recently. I’d been mulling over the fact that a majority of clients I serve don’t invest wisely in DevOps or simply don’t know how to proceed. A recent one, for example, has been crafting a DevOps strategy for over a year with nothing to show for it. Sadly, the DevOps initiative and group is considered separate from all the teams doing agile. Interestingly, I suddenly started seeing lots of data supporting my belief — most likely, I was primed to see it crop up everywhere.

Forrester’s 2014 report, “How Can You Scale Your Agile Adoption?” and Cloudbees’, “Four Quadrants of DevOps Maturity” reinforce the notion that the late stages of the software development cycle are usually given the short shrift.

We know that software development entails more than just development. To keep the discussion simple, software development can be thought of a sequence of activities (and associated information and work product flows) encompassing understanding customer and stakeholder needs, planning, designing the offering, coding, building, integrating, testing, releasing/promoting, deploying, operating, and getting feedback for the next cycle.

While a decent percentage of companies are focusing their agile efforts on the pre-integration stages, less than 15% have introduced agile principles, techniques, and practices in the integration and post-integration steps. So, while companies get better at developing software they still are gated and held back by unnecessary delays in the later stages of the life-cycle.

As an aside, I’m not considering funding, sequencing of work across the stakeholders, and requirements being pushed to teams without regard to their capacity and ability to deliver here — areas that still need tremendous work in most organizations. Also, SAFe has rightly emphasized attending to the team structures but often overlooked in agile transformations are the facts that teams don’t have all the skills needed, team membership is unstable due to shortage of necessary skills, there is a lack of focus on minimizing dependencies (highlighting dependencies is not the same as minimizing them), and the business and teams aren’t often aligned.

This issue of lack of agility, post-coding manifests itself in a few major ways:

  • Teams struggle with lack of environments for developing, integrating, and testing.
  • Extreme risk aversion in the second half of the cycle at times often precludes teams from promoting their own code — they then face significant challenges in testing their work in a timely manner.
  • Deploying to higher environments can at times be a cumbersome, bureaucratic process — infrequent promotions and deployments delay defect discovery and slow down feedback. Consequently, feedback cycles of 2 weeks or less in development balloon to weeks and even months in the latter stages.
  • In a handful of cases, development organizations start using tools (whether open source or not) that Operations does not have the skill or personnel to support.

Quite a few companies treat DevOps and Operations as separate from development. Most don’t treat DevOps as a function but as a team. DevOps teams with managers are just another silo and a significant number of people think they do DevOps just because they have a team called DevOps. Even worse, I’ve far too often seen QA, Automation, and Development as separate groups with their own goals and agendas. Throw in the fact that different vendors (often competing for additional business) often perform each of these activities and you just make the situation worse.

So, here are a few things to think about:

  • How can we change the mindset of the folks doing and managing the second half of the activities to be more agile?
  • How can we create a true DevOps function, where the business, development teams, and operation staff collaborate from the start? How do we break down the boundaries between these roles?
  • How can we encourage larger organizations to start their agile journey with aligning on a DevOps strategy quickly and improving the DevOps function to immediately address the huge delays and waste?
  • How can we make it easy for developers to request and get environments to build and test against?
  • How can we help companies recognize that a repeatable infrastructure and application deployment process is extremely necessary?

We would love to continue the discussion and talk about our experience in making Agile work for DevOps. Please reach out to us (Jon at 702-389-8160 or Alex at 949-667-1008), or if in Las Vegas, attend a DevOps centric meetup (more information at http://hatech.io/community.html#meetups).

 
Leave a comment

Posted by on February 20, 2017 in Agile, Improvements

 

Tags: , , ,

Three things that matter when embarking on an Agile transformation

When it comes to transforming an organization to Agile, it is far too easy to get caught up in the details of implementing a methodology and its associated practices and lose the focus on realizing desired Business value, i.e., to lose sight of what you are trying to achieve and why. The goal of a transformation is never to implement Scrum, or XP, or SAFe, or what have you; rather, the goal is always to get better at achieving the value that matters to the organization. Having well-defined outcomes and a plan for achieving those outcomes is key to keeping the transformation effort on track.

Simply training employees on the mechanics and implementing the recommended practices often does not lead to, nor guarantee, the desired business results. In our experience helping companies transition to Agile at scale, we’ve found that they struggle to achieve desired outcomes when they start out focusing on the “how” and fail to appreciate the “whys” that underlie the practices. These organizations frequently do not understand which bits can be adapted, which can be jettisoned, and which practices and tools could enhance the process. As Al Shalloway, CEO of Net Objectives says, “Practices are designed to solve a problem in a context. When challenges occur, look at the intention of the practice. Then, using principles, look for an alternative to the practice.” To that, I would add, “Finally, make your decision about what to do next, but define your expected outcomes before starting your experiment (or implementing the countermeasure).”

Nearly all organizations want to improve business measures that matter and the best way to do so is to improve flow, quality, and value delivered. When we reduce the principles of Agile and Lean to their essence, we discover that the goal is to focus on, and continuously improve, the effective, efficient, and predictable delivery of customer value — development teams strive to delivery more-and-more value with minimal waste; managers in turn seek to create an environment of dependable, unimpeded, measurable flow. Success, therefore, requires a focus on three critical aspects: flow, quality, value. These are not one-time improvements, but a never-ending series of small improvements.

1. Focus on: Flow and Predictability

Flow is the regular, never-ceasing, forward progress of products, services, and information to the customer, who might be an external client or user or an internal stakeholder. It is work moving from one step to the next, within the value stream, without delay or rework. Improving flow often involves removing roadblocks that delay or prevent the continual forward motion and throughput of work.

Closely related to flow is predictability. Predictability implies the ability to accurately answer, “When will it be done?” Making your processes more predictable and being able to reliably and consistently meet delivery commitments is the first step in building trust with business partners, stakeholders, and customers. However, before worrying about predictability, you first need to ensure that there is complete transparency and visibility so that managers and team members can see what is really happening in order to make informed decisions.

Without visibility, it is nearly impossible to make and keep commitments with any degree of certainty. Attempts to improve flow simply become shots in the dark and it is not possible to see and evaluate the effects.

The last aspect of flow is the notion that people are engaged and productive when there is a match between their skills and the complexity of work required — lack of required skills can lead to fear and stress; mundane work to ennui. Self-organizing teams should keep this in mind when allocating or self-selecting items to work on.

2. Focus on: Quality

Quality is assessed by the customer. By definition, the quality of a product or service is the degree to which a set of inherent characteristics fulfill a need or expectation that is clearly stated, generally implied, or obligatory. It is more than simply being free of defects. Quality involves meeting customer expectations. And yes, some of these expectations can be subjective. Interestingly, performing higher does not necessarily mean higher quality if the buyer balks at buying the unasked for add-on functionality.

It is a common misconception to believe that you have to proceed slowly in order to produce quality work. But, speed and quality are not dichotomous options and they should go hand-in-hand — you can get better quality and a higher rate of work completion. Companies that invest in automation and in preventing defects (vs. finding them at the end of the development cycle) find that quality does not have to be compromised for speed. Quality affects flow. When work is not done right the first time, when quality is not built into the process (vs. checking for defects after the fact), and when the product or service does not meet the customer’s need, we end up with rework and defects that have to be addressed. This unanticipated rework makes it harder to be predictable, impedes flow, and delays completion of work. Speed and quality are not mutually exclusive.

3. Focus on: Value

Value can be a fuzzy concept. It can be viewed from different perspectives: customer, business/organizational, operational, and individual and each will have likely have a different understanding of value. Imagine how each perspective might think about a “pizza delivery business.”

  • A pizza maker competing with other pizza makers for a single job at a local pizza store
  • The manager of the pizza shop
  • The owner of the pizza shop to whom the manager reports daily or weekly
  • The customer who ordered a couple of pizzas to be delivered to her home

What is perceived to be “value” by one role may not be by another.

Some companies make the mistake of losing sight of who they are building the product or service for — delivering business/organizational value is important but being uninformed about what customers’ value is extremely dangerous. To complicate matters, value is not constant — things can become more or less valuable over time depending on the circumstance.

Once you’ve agreed on what value means and who is being provided that value, you need to define the minimal cohesive increments of functionality that together will meet the needs of the target customer by either solving a problem she has or by making her work easier, better, or faster. To do this, you have to take the time to understand your customers and stakeholders, their problems, their needs, their actual usage of the product or service. This practice of customer discovery is deceptively simple: form hypotheses about the product, about the problem that your product solves, and test these hypotheses with those who could be your potential customers to verify, iterate or exit. An “I already know what customers want” attitude, based on their perception of market opportunity, is a good indicator of failure. Additionally, you need to verify or refute your product’s value proposition, its sales roadmap, business model, etc. After all, you don’t want to develop something if it isn’t worth it to your enterprise.

Lastly, defining a clear value metric across all the portfolio of work being considered makes it possible to sequence the order of implementation of the minimal cohesive increments based on Cost of Delay or another mechanism.

 
2 Comments

Posted by on February 8, 2017 in Agile, Improvements

 

Tags: , ,

Simple work priority guidance for #Kanban teams

The following is a very simple suggested order of work for #Kanban teams that has worked for me in the past:

  1. Fix an unhealthy increment (broken build, recently introduced defects, etc.)
  2. Help remove a flag (Block)
  3. Help an existing swarm move their work forward
  4. Refill a queue (if low before the bottleneck) but don’t exceed the WIP Limit
  5. Start a new item. However, if all at limits, join an existing swarm

The guiding principle is to start new work if and only if you cannot contribute to the completion of an item already in-progress.

 
Leave a comment

Posted by on September 28, 2015 in Agile

 

Tags: ,

Using #DevOps Blueprints instead of Stories

With the DevOps group mentioned in an earlier post, we also decided to not use Agile stories (as a …, I want to …, so that …). Instead we decided to create “blueprints” that we augmented over time. The team took an iterative approach to adding functionality, often starting with a basic blueprint and then writing a new one to build on the functionality of the first one. The blueprints weren’t assigned story points; the team would take on 2-3 blueprints that they thought they could complete in a week — blueprints could take more than a week to implement though it was rare.

For example, the team’s very first blueprint was to build a POC completely manually, which the team was able to demo one week later. For the next demo they built on that by adding automated windows builds. We found that this process lined up well with the concepts of iterative development and progressive elaboration by allowing the team to refine and improve as the business goals themselves became clearer.

Sample blueprints available at Check Point Firewall POC Blueprint and Zenoss Blueprint

 
Leave a comment

Posted by on September 24, 2015 in Agile

 

Tags: ,

Andon cord influenced DevOps 20/45 practice

Andon cord or call button influenced 20/45 rule — Problem Swarming

A few years ago, I coached a high-performing DevOps team. This was the company’s first foray into building a more collaborative environment between development (who built embedded software for slot machines) and operations (responsible for ensuring the slot machines worked flawlessly on the casino floor). Additionally, the technology stack was large and new to the company — they had wisely decided to move to a cloud based ecosystem for managing the slot machines and games on those machines remotely without having to send a technician to the casino every time there was a glitch or software needed to be updated. As such, yokotenkai (horizontal/lateral sharing of knowledge, ideas, best practice) was a very important secondary goal.

This group borrowed practices from Lean and adapted them to suit their purpose. One of the practices they made their own was the use of an “andon cord.” An andon cord is a way of signaling a problem (whether real or suspected) and alerting the team that they need help. This team implemented a “20/45” rule — if a team member was stuck for 20 minutes and didn’t have clarity on how to proceed, he was expected to pull the cord, i.e., ask for help. The team (and not just the team leader) would respond immediately and everyone would pitch-in to solve the problem. They had 45 minutes to determine a way forward before going back to whatever else they were working on.

This sounds like a very inefficient practice what with the constant interruptions. However, this turned out to have a number of beneficial side-effects:

  • Whole team attention was brought to bear immediately on a pressing issue.
  • By definition, in-process work is more important than work that hasn’t yet started; consequently, completing what’s in-process trumps new work. This ensured that team members were always focussed on moving existing work items forward.
  • Quality was built-in (team caught problems before they were cemented in place).
  • No one person knew the complete technology stack and experimenting and learning were critical to team success. Consequently, someone not pulling the cord for a week was a red flag. Either the person (1) wasn’t stretching and trying something unfamiliar and uncomfortable, (2) had a fear of being vulnerable and asking for help, or (3) had a tendency to work alone and figure out a solution by himself (wasting significant time, not utilizing the team’s existing skills and brainpower, and often ending up with a suboptimal solution).
  • Everyone’s level of knowledge increased every time the cord was pulled and team brainstormed approaches. Over a two-month period people’s understanding grew by leaps-and-bounds and team members became comfortable with being uncomfortable.
  • The agreed upon way forward was usually better as different perspectives and approaches were considered.
  • Everyone on the team knew what was going on and what challenges they were facing.
  • Team members felt completely empowered to determine the way forward.
  • Team members demonstrated vulnerability by asking for help and loyalty by helping each other complete their work.

It’s now been 2 years since I coached at that company. I recently heard that all Agile teams there are taking this approach — Yokotenkai at it’s finest!

 
Leave a comment

Posted by on September 22, 2015 in Agile, Coaching, Improvements

 

Tags: , ,

Practice “X” doesn’t work for us so let’s throw it out.

A few months ago I had an opportunity to informally assess a team that had been doing agile (using the term very loosely here) for 4 months. During my 1-on-1 conversations with the team members, I kept hearing the same refrains along the lines of, “The <choose an agile practice or ceremony> doesn’t work for us so let’s stop doing it.”

If a practice isn’t working for a team and they want to change the practice that’s fine as long as they recognize why it isn’t working. But this group had a knee jerk reaction to throw practices out instead of inspecting, reflecting, and adapting. The questions that they should have asked themselves before reaching a decision:

  • Other teams sitting nearby seem to find this practice very valuable. What are we doing differently?
  • Are we doing this the right way?
  • Did we inadvertently modify the practice to fit our context without realizing the benefits we would lose?
  • Did we try and learn from the instances where the practices didn’t seem to bear fruit? And did we then change the way we worked?
  • Were we disciplined in following the practice or using the technique? Or did we cut corners or drop-off bits because it seemed too hard?
  • Do we have a tendency to blame the technique/practice/method first and not even think about how we are contributing to the problem? Do we see failures as problems with the practice instead of looking at failures as feedback mechanisms on our approach?
  • Is the practice not working because we have serious organizational dysfunctions that are getting in the way?

Have you encountered similar behavior before? How did you handle such situations?

 
1 Comment

Posted by on August 20, 2014 in Agile

 

Tags: ,