Tag: Agile

Jidoka and Captured Knowledge

In manufacturing, you likely know the problems to look for; broken threads, misshapen parts, etc.. In software, you may have no idea what kinds of problems you may create by changing code. In this way, practicing jidoka is invaluable. It’s how later developers know what can break, what is broken, and offers wisdom about how to fix bugs without breaking something else. How? Captured Knowledge. Each automated test represents knowledge captured from previous engineers about how the system was expected to operate in various scenarios. This is actionable knowledge that all future engineers can make use of. It lets future engineers test their changes and immediately learn what (if anything) has been broken without first needing to learn all the nuisances of the software. It is the period when learning how the software operates that greatly extends engineer ramp up, because too often even simple debugging requires direct use of the application and guessing through which scenarios may invoke the altered code. Without that captured knowledge, the future engineer has to re-learn everything that was known in the past because the raw code does not capture the nuances of what is expected or required. In this way, the knowledge in the tests acts as a safety net. It’s also knowledge the engineer does not need to fill her brain with by memorizing, because he test can be relied upon to act as an institutional memory. Actionable Knowledge This is not documentation for documentations sake. It’s a used and actionable part of the process that cannot be ignored. If you fail a test, the build should fail and block your progress. Unlike an external document, which simply becomes out of date. In some ways, that build break acts as an andon call, alerting you to having missed a standard step (documenting the behavior of your code). Flexibility Creates Choices (and agility) By offering the wisdom of all engineers who previously worked on the application, we greatly reduce the learning curve needed for an engineer to become a productive team member. This means that we have much more flexibility in terms of how many add to (or take from) an application. If we add engineers, the drain on those already on the app will be more modest. The tests provide a safety net which can enable a bit more autonomy win confidence. We can also add more than just a few since the bank of knowledge from which they can draw isn’t limited to the brains and mouths of the senior engineer on the team. If we remove engineers, we shouldn’t need to lose too much sleep over having them forget their current application. The test bank should go a long way in preserving the most critical information. By making this investment in our code today, we gain flexibility around where to invest our effort for the biggest wins tomorrow. That is the heart of agility. Pursing our greatest opportunities today in a way that won’t stop us from pursuing better opportunities tomorrow. Foreshadowing There is still more to say about how they enable speed. We will look at that next time.

Jidoka (automation with a human touch)

The two pillars of lean are just-in-time, and jidoka. Today we’ll look for jidoka in software development. What is jidoka Often translated as “automation with a human touch”, some people also use the word autonomation. The principle is rather simple. When designing a process, find opportunities for the process to self identify errors and stop so that the problems can be fixed at the source. With this in place, human attention can be focused on either finding and eliminating root cause for the error or improving the task itself. This means we’re investing the human mind where it will do the most good. Example Perhaps the most common example of jidoka is the looms made by Sakichi Toyoda. These had the ability to detect thread breakages and stop. This meant that humans could then intervene to fix the issue and let the loom resume. Until there was a break, the advanced looms could be monitored, with many looms sharing one operator. This was a vast departure for it’s time, when any one loom required a great deal of energy from a single dedicated operator, whom may fail to notice thread breakages due to the many other aspects of weaving that required their attention. Software & Agile The parallel in software delivery is hopefully rather obvious; automated testing. This can be in the form of unit tests, integration tests, or most anything else that will allow human creativity to be applied to novel situations and the automation can be left to handle the monotonous work of simple testing. If our QA team members automate a common test, they can now spend their time looking for more subtle errors, problematic interfaces for humans, or other validation. Just like the loom operator, that test gives them the ability to use their human mind on more valuable things that a machine cannot so easily do (like building more automated tests).

Muri, Kaizen & Retros

When do you most need a retro? When you feel as though you don’t have the time for it. Muri In lean, the feeling of stress (or the impossibility of your task) is called “Muri”. It should serve as a powerful indicator that something is terribly wrong. If you feel this as a member of the team, it is your duty to stop what you’re doing (pull the metaphorical andon cord) and have a serious conversation. In common agile parlance, that is a retro, but it could just as easily be called kaizen. There may be many reasons for such a feeling. Perhaps your deadline is unreasonable with the current scope. Perhaps you are trying to centralize something on a small team that cannot support the load being put upon them. Perhaps you feel like you’ve nearly solved a problem, but have felt the same way for days and the solution continues to be elusive. Problems Just as your problems don’t nicely conform to a script such as “what went well” and “what didn’t”, your retro does not need to be so narrow. Be willing to reflect on what you’re doing, how you’re doing it, how you feel, and “why”. Be willing to have an open conversation about all these topics whenever necessary. Problems may not always arise on a two-week schedule and if they can be solved sooner then everyone is better off. Remember that the retro is also about finding solutions (or starting toward them). If you consistently talk about the same issues but take no action, that can be a source of muri! Beware of Justification Metrics and intrinsic motivation can deceive you. Your desire to “just finish it” can undermine your long term success. Your drive to do things “this way” despite lacking the time or team can make you sound like a victim. Don’t allow these justifications to enable muri. Listen to how you feel. If you feel that something is wrong, you may be telling yourself something your brain cannot yet comprehend. When tackling problems, be careful of “solutions” that justify your stress or avoid unpleasant conversations. You must be willing to accept the possibility that your perspective may be ill suited to this specific context. You must be comfortable being uncomfortable so that you can engage in the conversations that must be had. A great many problems can be solved by merely achieving a common understanding. Conversations, especially those that are unpleasant, can be the best tools in achieving this. Mirages & Solutions The solution may not be to bring in more people help the project get back on track. That can make things worse. You may be better off having the hard conversation about scope or dates. At the least, this can help you understand the relative costs of delay between the deliverables so that wise trade offs can be made. The solution may not be to expand the centralized team substantially so that they can manage all deployments for an enterprise. You may not want to staff a team of release engineers like a call center so that every deployment request can be handled quickly. You may be better off having the centralized team act as consultants to the de-centralized doers rather than doing the work themselves. This can empower the team and accelerate the progress they were aspiring to. The solution may not be to hire a consultant to solve the problem for you. Rather, all the talent you need is probably already there and you simply need to discover how to find it. This does not inspire confidence quite like rented credentials, but it gives you a chance to better learn about the team, it gives someone a chance to showcase their ability, and it gives someone within your team a growing and learning opportunity that you had been giving to the consultant. When do you most need a retro? When you feel a pit in your stomach whenever you think about it. When you cannot find the time due to the amount of work that needs to be done. When you’re dreading the conversation and just want to avoid it. When you’ve tried a dozen quick fixes and none of them have fixed it. These aren’t signs to delay. These are signs at you’ve delayed too long.

Working with OVER working for

What does it mean to work with a client as opposed to working for one? Handling Unknowns Consider a situation when there is a question or some uncertainty about how to solve a client issue, what does the conversation look like? Is it just you? Does the delivery team have a meeting? Do a few analysts have a debate? If you’re answering “yes”, then you’re working for a client. Rather than talking amongst yourselves, you should be talking with the client. Bring them to you to show them the actual problem. Have a conversation and decide together how to proceed. 4. Business people and developers must work together daily throughout the project. By discussing it without your clients, you’re making their decisions. You’re assuming you know the trade offs they want made. You’re assuming you deeply understand their problems. Stop assuming. They know their needs better than you do. If you disagree, try talking less. When you talk, you are only repeating what you already know, but if you listen, you may learn something new. J. P. McEvoy Scope Creep If you’re anticipating things your clients might need someday, then you’re working for a client. Why not spend time with the client to explain the problem you see and the solution you propose? It may not be a problem to the client. They may simply not share your concern. Alternatively, they may see the problem now, and appreciate your candor. 6. The most efficient and effective method of conveying information to and within a development team is face-to-face conversation. Regardless of the outcome, you shouldn’t be deciding to add anything, especially not because the client may want it later or because “clients don’t know what they want”. For your own sake, always keep in mind that your time is limited. Make sure that whatever you’re doing will have the biggest impact possible. It may be that the problem you see, the client has already seen. They may have made the conscious choice to not do it because your time is precious and there are other things they want more. By talking, you can learn these things and they can learn from you. Together you can make sure that the right things (and only the right things) get done. 10. Simplicity–the art of maximizing the amount of work not done–is essential. Show & Tell When you have a show and tell, are you showing and telling or showing and talking? There’s an important difference. You’re telling if you’re using a rehearsed script, glazing over rough spots, embellishing the good things, and generally trying to deliver a message. You’re taking if you’re forthright about the gaps, seeking feedback, and trying to make sure the client understands where you are and you understand what they think of that. Our goal with the show and tell is more than just a demo. It’s making sure that the client’s needs are getting met and if not, that we’re adjusting. 1. Our highest priority is to satisfy the customer through early and continuous delivery of valuable software. Keep in mind, if you’re really working with your client, there will be few (if any) surprises at the show and tell. If you’re accustomed to seeing surprised expressions, rethink the relationship you share. Try working with them. Challenge Do you reach out to your clients often, or do you try to find ways to delay or get out of client conversations? Do you think the client is an important part of the process, or do you think the client needs to get out of your way and let you do your job? Do you think you know best and your client needs to follow your lead? Do you think that the best knowledge comes when considering your expertise and the client’s perspective?

User Stories as Lean

User stories are a useful and well established agile tool. Could they also be thought of as a lean tool? Definition We’re not going to do what’s been done a million times. If you aren’t familiar with stories, check this out. For more information, google it. How Stories Support Agile By avoiding the “how”, the story does a few things: Stories invite a conversation. 6. The most efficient and effective method of conveying information to and within a development team is face-to-face conversation. That conversation can be had only once the story is prioritized high enough. This means there are a lot of conversations we’re not having (work we’re not doing). 10. Simplicity–the art of maximizing the amount of work not done–is essential. Analysts and product owners largely wait for the conversation rather than trying to build a full queue to keep engineers busy. This lets them stay in the here-and-now and focus on what’s needed today rather than on what might be needed tomorrow. This helps everyone focus on delivering now. 3. Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale. This keeps everyone focused on what really matters (software for the client) rather than building a big backlog. 7. Working software is the primary measure of progress. If written very well, stories allow us to execute the backlog in an arbitrary order. This leaves the order completely up to customer desires every sprint. 2. Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage. We avoid having upstream stakeholders designing the solution. 5. Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done. 11. The best architectures, requirements, and designs emerge from self-organizing teams. Once we’re ready to act on the story, we can bring the team and client together to solve the most important problem of the day, today. 4. Business people and developers must work together daily throughout the project. All told, a story is a great way of bringing an agile mindset to your backlog. How Stories Support Lean By avoiding the “how”, the story does a few things: It invites a conversation. By relying on a face to face conversation, we minimize the number of times people are going into documents and work tracking systems. By reducing these transactions (inefficient knowledge transfers), we eliminate a lot of waste from our process. Reduce Transport Waste That conversation can be had only once the story is prioritized high enough. This means there are a lot of conversations we’re not having (work we’re not doing). By not having these redundant conversations, we eliminate decisions that will be rendered obsolete (or forgotten) as changes continue to unfold. Reduce Motion Waste Analysts and product owners largely wait for the conversation rather than trying to build a full queue to keep engineers busy. This lets them stay in the here-and-now and focus on what’s needed today rather than on what might be needed tomorrow. They avoid just keeping themselves busy trying to keep other people busy. Reduce Over Production This keeps everyone focused on what really matters (software for the client) rather than building a big backlog. By not building that big backlog of documents, we have much less knowledge waiting for action. Reduce Inventory Just in Time If written very well, stories allow us to execute the backlog in an arbitrary order. This leaves the order completely up to customer desires every sprint. This makes it possible for us to deliver exactly what’s needed as close to the need as possible. This quick feedback loop helps make sure that we’re doing only what’s necessary today. If we’re wrong, the quick feedback makes sure we don’t invest too much time into something that our client doesn’t need (or needs very little of). Reduce Over Processing We avoid having upstream stakeholders designing the solution. This means we can bring in the valuable perspective of those doing the engineering into the solution creation process. This taps into the talents and training of the entire team to make sure we pursue the best (and most minimal) solution rather than the best solution that one person could think of. Maximizes human creativity Once we’re ready to act on the story, we can bring the team and client together to solve the most important problem of the day, today. It’s important for teams to recognize that they are not the client. The client is the client. When it’s time for the conversations about how to implement a solution, that’s the time to bring the client into that conversation to make sure it fits the need with the least amount of work. This can mean a conversation, or it can mean going to where the software is used and truly understanding the need that is driving the story rather than just the request itself. Genchi Genbutsu All told, a story is a great way of bringing lean to your backlog.

Microsoft as Agile, but not Enterprise Agile

Microsoft is a dominant player in IT. But is it agile? Does it display enterprise agility? Organization Microsoft has gone through some re-orgs in the period we’ll look at. The most recent re-org created 5 engineering groups and a bunch of non-engineering groups. Those engineering groups are largely responsible for themselves are are: Operating Systems (Windows) Cloud & Enterprise (Visual Studio) Applications & Services (Office) Devices & Studios (x-box) Dynamics (ERP) Each of these has done a very good job competing in their respective markets. The x-box has given the PlayStation a run for it’s money. Visual Studio tends to defeat eclipse when put to the test. Office is king in productivity software. As for operating systems, Windows is still getting by with something like 90% of the market. Microsoft tends to win in every market in which it decides to compete. Within each market, Microsoft tends to display agility. However, there are shortcomings. When we take a broader view of the entire organization, it falls far short of the type of enterprise agility we saw with Apple. Operating System Inventory To start, we’ll consider Microsoft’s flagship product; Windows. As previously stated, Microsoft has about 90% of the consumer operating system market. Despite that dominance, Microsoft has clear indications of not being agile in the market. To understand, let’s look at a picture with data provided by net applications as of March 2015. This is a pie chart of the current market share of each version of Windows according to how many years ago it was released. What’s clear, is that every 2~6 years Microsoft releases a new version of Windows. Operating systems are a complex product, so perhaps this is the shortest sustainable pace. If that’s true, then the Windows team is doing an alright job at iterating and releasing new software. What’s the problem? The two most popular versions of Windows are 6 and 14 years old. Does that mean that the more modern Windows operating systems are lousy? Not at all. What it does tell us is that the more recent Windows products aren’t solving problems that people care about. If it’s not solving any problems for me, why upgrade? The windows team can keep being agile and delivering frequently. They could even become more agile and keep delivering more frequently as they’ve been doing so far this decade (an average of a 2 year release cycle). This, however, is not enterprise agility. If there were a lean system being used by Microsoft then the problem is clear. Microsoft is staying busy and building a big inventory of new OSes and there is no demand for what is being produced. From a lean perspective the message to Microsoft is clear. Stop what you’re doing. Just-in-Time Operating System For comparison, let’s take a look at that diagram for Apple’s OS X. How often does apple release a new OS? Just about every year. Even in this domain, Apple displays a truer agile principle: 3. Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale. The adoption of Apple’s OS is also quite heavily weighted to the newest version. More than half of Macs are running an OS that’s less than a year old. Fully 90% of Macs are running an OS that is newer than Microsoft’s most popular version of Windows. What does this tell Apple? People are finding value in their newer operating systems. Applying the update is valuable enough to be worth the hassle and risk. Should Apple invest more into the OS team? Maybe. A case could certainly be made for that. At a minimum, they shouldn’t slow it down. People clearly find a lot of value in what they’re producing. More Agile < Enterprise Agility As Microsoft demonstrates, you can have agile characteristics in a team or a division and not have enterprise agility. You can even be dominant in many industries and not really demonstrate enterprise agility. What would enterprise agility look like at Microsoft? I don’t know. What is clear is that instead of investing so much talent into the Windows platform, they should be applying those talents to other problems that exist in peoples’ lives. People are telling Microsoft that they care less about the operating system updates than something else. It’s up to Microsoft to find out what that something else is, drop less valuable products, and focus their vast and immensely talented workforce to the problems that people would value having solved. Microsoft has the talent to do almost anything they desire. But do they have the discipline to demonstrate enterprise agility?

Agile, You’re Doing it Right

For all the attention people apply to not being agile, or needing to be more agile, there is a distinct possibility that is often unaccounted for. That you’re already agile. Of course, you could have a better process, but that’s always true. Recognizing that you can be better is at the heart of agile (and lean). Lean uses kaizen and PDCA for incremental improvements. In agile, there’s the principle: 12. At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly. The fact that you want to be more agile is usually a misrepresentation of your desires. Most teams say things like “more agile” or “leaner” as a euphemism for “better”. That sort of drive is a key characteristic of being agile. We Don’t Look Agile There is no one way to be agile, so stop worrying if you don’t have the scrum ceremonies or roles. You can be agile without a “product owner”. Lacking a “scrum master” does not diminish your agility. There is nothing in agile that says you must have a stand-up, or a sprint, or a prioritized backlog. There are good reasons for these, but that doesn’t mean they’re good for you. Don’t judge how agile you are based on how closely you follow any specific playbook. Look at these for ideas, not rules. Especially in large scale companies there are no shortage of guides such as the scaled agile framework (SAFe) or scaled scrum that talk about how to be an agile enterprise. Enterprise agility a bit of an industry buzz word right now, The great irony of these is that they put a lot of emphasis on the process. Why is that ironic? Individuals and interactions OVER process and tools It’s critical that you know your client and work with them. Having a formal process to facilitate that can be nice, but find a process that works with what you have. Stop evaluating how agile your enterprise appears to be based on some theoretical process that was created without considering your unique context. Go ahead and look at it. It probably has some good ideas. Understand it. It was made by smart people to solve problems. But consider, are the problems it solves problems you have? Look for ways it may help you, but recognize that it doesn’t understand your people, your clients, your processes, or your culture. Your way may be better for you. It may even be more agile. Project Managers Don’t fire your project managers, and don’t re-classify them as scrum masters. Contrary to popular belief, good project managers need not impede agility. Their plans provide a reference point for how much we expect to invest and when our time boxes end. These can help us create visual management, so we can see when we are out of standard and fix it. When things do change (discoveries by the team or new client needs) the PM skillset can help us and our clients understand the trade offs so that expectations remain aligned and decisions are made that are respectful of (sometimes) fixed dates and the needs of others. Consider what is one of the most well known agile shops around; Menlo Innovations. Do they have scrum masters? No. Do they have product owners? No. Do they have project managers? Yes. Are they agile? They are among the best for agile software delivery and their project managers help make that possible. The only problem with project managers is that sometimes you find a bad one. What is a bad project manager? Someone who thinks it’s their job to protect the plan from change rather than using it to facilitate a well informed conversation about the inevitable changes. The problem here isn’t project management, it’s a bad project manager. Don’t confuse the two. Agile and lean processes benefit from having a plan so that way we can check ourselves against it (PDCA) and make trade-offs explicit. Plans are worthless, planning is everything.Dwight D. Eisenhower Evaluating Your Priorities. Are you driven to satisfy your clients or are you wrestling with them? Are you excited to show them what you’ve built and get their opinion, or do you want to be left alone for a few more weeks to perfect it? Are you trying to deliver often or do you want to cut down on deliveries to reduce fixed costs like QA? If you gravitated toward the first statements, you’re probably fine. Stop looking for a whole new way of doing things and just try to get better; one step at a time. If you gravitated toward the latter statements, then you may need an agile intervention. But here’s the trouble. The problem isn’t your methodology, it’s likely how you think about your role and your relationship to the client. Until you fix that, all the scrum ceremonies in the world won’t help you. Worse, having those ceremonies may give you the feeling that you are agile, but you may be fundamentally doing it wrong.

Finding the 8 Lean Wastes in Software Development

Any talk about lean should always include the 8 wastes, so we’ll look at how these apply to software development (or any knowledge industry). Rather than creating a whole new list of wastes, we’ll find that the originals apply just as well; we just need to shift our perspective a bit. Muda, Mura, Muri Before we dive into the 8 wastes, it’s important to put them into perspective. When we’re talking about improving a process within lean, there are 3 primary problems. Muda: Waste Mura: Variability Muri: Stress When we talk about the 8 wastes, we’re only talking about muda. There are two other broad categories that are at least equally, if not more, important. These other problems in a lean process are often under appreciated compared to muda, and in other posts we will look at them in depth. For today, here are the 8 wastes. Defects This is the easiest of the wastes to translate because we’re all familiar with it. Any time the software does not behave as intended, it’s a defect. Defects are costly to our reputation, take time to diagnose, and are preventable. Motion In manufacturing, this would be unneeded movement such as reaching for tools, or walking around to get parts. In the software development, there are many sorts of motion waste. Being required to do double data entry is an unneeded activity. Holding meetings that serve no purpose may be another. There are many examples of this, but you can often identify it because you can feel the waste. You question why you’re at the meeting or doing some activity. You feel that it’s taking your time and not adding value. All of those unnecessary activities are merely motion. Waiting This one is what it sounds like. This is also the same in every context. If you’re just sitting around waiting for something, you’re wasting time. Over Processing In software vernacular, this may be called “over-engineering”. This is when we’ve simply done more work than we needed to, either because we didn’t understand the need or felt that it was worth growing the scope. There are numerous reports of just how many features are not used in a typical software solution. The number varies, but it’s typically quoted as being over half of all features. All of this work whose output is not being used is over-processing. Over Production Most people take issue with this as a waste. They simply cannot understand the problem of having too much new software. Unfortunately, that’s not usually how this waste manifests itself in the software industry. Over production can occur anywhere in the software delivery lifecycle (SDLC). Over production occurs when requests for features come in at 20 a day but only 10 per day are reviewed. Over production occurs if analysts are creating 10 spec documents every week and engineering can only implement 3. The analysts are over producing. Over production occurs if the software engineers are going to complete 3 features this week but the lone DBA can only complete her work for 2 of them. The engineers are over producing. Over production occurs if the the engineers and DBA are finishing 2 features per week but QA can only handle one. The engineers & DBAs are over producing. Inventory This is the manifestation of all that over production. All those U reviewed ideas aging in a suggestion box are inventory. That share point drive full of year old specs are inventory. The engineering team’s backlog is inventory. Those features waiting for database changes are inventory. Those features waiting for QA are inventory. Developed software waiting for six months for the next release is inventory. Wherever someone is over producing, we get inventory. If we have inventory, someone is overproducing. Transport This is the waste that is most difficult to understand in the world of software. In manufacturing, it’s easy. Needing to truck parts from one plant to another, is transport. Needing to have forklifts moving parts to work stations is transport. Taking output from one station and adding it to an internal warehouse is transport. Pulling from that warehouse for a later work station is transport. The trick to understanding this in the world of software is understanding what is being transported. In traditional manufacturing, it’s physical goods. In software, it’s knowledge. When a customer puts their idea into the suggestion box, they’re transporting knowledge. When the analyst reaches out to the client to understand the idea, the resulting meetings, phone calls, and conversations are all efforts to transfer knowledge. The spec written by the analyst is an effort to capture that knowledge in a refined way that is more easily transported. When engineers pull work from their backlog, they’re extracting knowledge from a database just like a manufacturer pulls parts from a warehouse. Software engineering itself is the transformation of one type of knowledge (a human need) into a different kind of knowledge directions for a computer). They take in knowledge, apply more knowledge, and the output is refined knowledge that benefits society in some way. Being that it is a knowledge industry, once you understand that knowledge is what we transport thou begin to see that the most costly thing we do in software is transport knowledge. And we do it a lot. Anything we can do to decrease the number of transfers, or acclerate them, will certainly have the effect of leaning out our knowledge-based supply chain. More on that later. Unused Creativity This waste is also rather easily understood as it applies to software. Despite the reputation some ascribe to us, software engineers are very creative people. Software engineering itself is as much art as science (yes, there can be beautiful code, and that beauty can be across several dimensions). Giving software engineers a solution and telling them to do it, is ignoring a wealth of creative talent. Not encouraging them to improve their own processes, wastes human creativity. Forcing unnecessary motion, wastes human potential. There are a myriad of other ways human creativity is wasted in software delivery. Perhaps you can think of some you have personally experienced. Challenge Can you see these wastes in your environment? How would you act to get rid of them? Can agile be a tool to address these 8 lean wastes in software delivery?

Stand-ups & Standards & Kaizen Oh My

Odds are good that you’re familiar with the classic 3-question agile standup.  Have you ever wondered what a lean standup might look like?  Because it’s lean it’ll just be faster, right?  That’s what lean is really about, isn’t it?  Maybe we can do it in 2 questions if we’re leaner?  By looking at the standup (something we know) from a lean perspective, we’ll gain a better understanding of what lean really is.  We’ll get a better sense of how it compliments agile.  We’ll also begin to see how lean is different, but doesn’t conflict with agile.   As a basis, we’ll need to know about lean standards.  Feel free to check this out if you’d like a quick introduction or refresher.  Knowing that, let’s look at our standup. In Case You’re Unfamiliar If you don’t know what a stand-up is, or you don’t know what the “3 questions” are, then this section is for you. Imagine arriving at work every morning and among the first things you do is get in a circle with the rest of your team members.  Everyone then takes turns answering the following 3 questions. What did I do yesterday?What am I going to do today?Do I have any impediments? This will give everyone a sense of what everyone is doing.  It’ll give us a sense of whether we’re on track.  It’ll give us a chance to ask for and hopefully receive help. After this is over, we disband and go about doing the things we said we were going to do for the day. Stand ups & Standards & Visual Management When arriving at a stand-up, the first thing I want is a visual indicator of where we are against the standard.  I don’t want to ask 3 questions.  I don’t want to ask 2 questions.  I should not have to ask any questions.  I want to see where we are against the standard right now. The best thing I’m likely to have is a burn down chart with an ideal line.  This shows me the current state (how much is left to do as of now), the standard (how much should we have left to do as of now), and I can compare them. If my burn down is at or below the ideal line (our standard), I’m good. If my burn down is above the ideal, I’m out of standard.  I have more work to do than I should at this point in the plan.  I have a problem.   I have an opportunity for kaizen in order to return the system to the standard.  Our standup can be exactly the forum for that conversation. I look at the burn down and I see we are out of standard; we are behind schedule for this sprint.  What are we going to do today to fix this?  What other questions are necessary?  Are any questions necessary if we are within the standard? What Don’t I See? One important question you could ask at this point may be, Is there anything you know, but is not reflected in the burn-down and may disrupt our plan? That would be useful to know.  If anything ever comes up then you have a kaizen opportunity.  However, it’s not likely the kaizen opportunity you’re thinking of.  If there is a problem that someone knows about that is not visible in our visual management system (our burn-down), then we have a problem.  Why can’t I see the problem?  Why are we hiding it? Perhaps it is not work you must do, but a blocker or risk of some kind.  A server needed for testing is unavailable, work another team was doing for you was not deployed on schedule, etc.  No matter what these are, they deserve visibility, too.  Unlike manufacturing or other environments where the job itself provides visibility, in a knowledge industry the problems are things we know.  It is up to us to make them visible.   Either on your burn-down or on the board next to it, any impediments should also be made visible.  More than just having the space, people must be willing to take action to make problems visible (putting them on that board) so that they can be fixed.  This way, anyone looking at this information can see that there are problems.  If we can all see the problem, then we can see the kaizen opportunity and can bring our skills to the table in getting things back on track. Continuous PDCA A good perspective on the standup is that it is a continuous planning meeting; a way to reevaluate ourselves against the plan and make adjustments as necessary. The three question standup seems to serve the same purpose, but it gives a script rather than guidance as to the purpose.  Worse, the script ignores the use of visual standards to indicate a problem; this makes it easy to hide problems by just not saying them aloud.  When talking is the objective, we’ve set a meaningless goal that is easily achieved.  When we set our objective as looking for problems and making any corrections needed to get back on track, then we have a reason to invest the time.  Now the trick becomes setting ourselves up for success, so that we can do these things.  Visual management with a burn down provides a very useful method for fulfilling this purpose. This also provides a great argument for breaking backlog items into tasks and estimating hours.  It is not that the plan itself (the tasks) have much value, but by building that plan we’ve built ourselves an ideal target and can visually inspect our progress toward our goal as best as we know it today.  This also shifts the perspective of the estimate.  It is much less about how long I think this will take, but rather I think that if I haven’t solved this in 6 hours I should be asking for help.  I’ve given myself a time-box and I’ve given my teammates a visual indicator to know that I need help even if I don’t say it out loud.  If we leave our work as just the backlog items we’re working on, we have no way to inspect and adapt.  We can just make sure we’re busy. If we think of our daily cycle as a PDCA loop (plan, do, check, adjust) then 3 of these activities take place in the standup, making it a critically important function.  We CHECK our current progress against the sprint goal.  If there is a problem, we ADJUST.  We PLAN how today will keep us on track.  The rest of the day, we DO as planned.  Tomorrow, we’ll CHECK how we did with today’s plan.  Without a plan, we have nothing to check, and won’t know when to adjust.  We just do, and then we’re back to mere busyness. Stand-ups for Kaizen, Kaizen for Building Human Capability The objective is not to use a burn-down versus a build-up versus any other sort of sprint tracking tool  The key is having the discipline to do something and make it visual.   There should be a PLAN that we can see before going into the sprint.  For every day in our stand up, there should be a standard.   In our standup we should CHECK our progress against the standard.  If there is a problem, we should ADJUST.  We should PLAN a day that will keep us on track DOing the most valuable things we can.  We repeat this paragraph every day, creating a visually managed PDCA loop that makes use of a standard and kaizen.  It may feel slow and not be sexy.  But, if done deliberately it will build capabilities that are needed to become a highly successful and predictable software delivery team.   That, after all, should be the goal of a ritual like the stand up.  It isn’t just keeping us on track today.  It’s teaching us disciplined execution.  It teaches us to work with our eyes open and to be honest.  It teaches us to help each other.  It creates an environment where problems will abound.  Each problem is an opportunity for kaizen.  Each kaizen event is a chance to build the skills of our team members that go beyond just designing, coding and testing.  That is really the end game; creating a system for building better software by building the skills of our people every day. The ideal lean organization is a learning organization.  The daily stand-up is a venue for highlighting more problems than any other in agile.  Because it will surface the most problems, it is the ceremony that offers the most learning.  However, it will only do this if you let it.  You must make sure that it’s meaningful.  You must make sure you can see the things you need to see.  You must make sure that everyone is bringing to light all the things they know, since that is the only way we can become aware of a problem in a knowledge industry. It takes time to do this and it will feel slow.  Don’t be afraid to be deliberate and go slow; it’s the only way to go fast. Challenge In your stand-ups, is everyone actively engaged or is everyone just waiting for their turn to talk?  How many cell phones are in use? Right now, can you see the current status of your team in reaching your sprint or release objectives? Do you deeply understand what you’re looking at?  Do you trust what you’re seeing? Can everyone on the team see the status and do they all know how to interpret what they are seeing?  Do they trust it? Are problem solving opportunities found in the standup handled like explicit learning opportunities for team members? Do the leaders monitor how the problem was solved to make sure that people were being deliberate and learning rather than just patching and running?

Cross-Functional Teams & Production Cells

Prior to lean thinking, Taylorism was the dominant managerial philosophy in industry (and it is still a powerful influence).  Labor efficiency is a pillar of this approach.  To achieve that goal, a common practice was to group together all sets of similar equipment (lathes, drills, presses, etc.).  This allowed the technicians to specialize, allowed for redundancies in case one machine went down, and provided a very easy set of metrics by which each set of machines could be measured for success (output, utilization, machine up-time, etc.).  Now our leaders are equipped with metrics that tell us about how well their investment is being managed and we have specialized people working with specialized machines that are being fully utilized.  Clearly, this is going to maximize the amount of value we’re creating, right? The same philosophy underscores many software delivery organizations.  People are put into functional groups (BA, QA, architect, developer, etc.).  Each of these groups is measured for productivity based on hours worked (something like machine up-time) and output (code, tests run, designs written, etc.).  It’s the functional manager’s job to make sure that his group has a full queue of work from which to pull at any time in order to make sure that everyone is fully utilized.  If all of these expensive humans are constantly doing their thing, we’re definitely delivering the most value, right?  Let me tell you a story about this approach and unintended consequences.  A few people create a new factory for creating chairs.  There is a single loading bay at which trucks regularly deliver foam and fabric that is used by the looms and trained techs on Phil’s team to create the sitting surfaces.  From the same loading bay, different trucks regularly drop off metal and matte black plastic used by Mary’s team to create the chair frames and covers.  Adam’s team is the final stop.  They assemble the chairs and prepare them for sale.  All told, this is not a complex process and has been modeled below. This seemed to work for a few batches, but shortly after the first few clients received their chairs, defects were reported.  We had hoped to be our own QA, but Phil, Mary, & Adam were so focused on getting things done that they neglected to really scrutinize their own (or each others work) and quality suffered.  They had a long talk with senior management about the quality problems, and decided that it’s best if these leaders keep their focus on execution and we’ll hire Connor to lead our new QA team. That seemed to work out pretty well, but Adam’s team kept pulling ahead of Mary’s team and the metal frames.  As a result, Adam’s team wasn’t well enough utilized and he missed his bonus for the month.  Mary managed to get some more machines in place to fix the problem going forward, but then one of Phil’s looms broke down and Adam ran out of material again.  After a second month with no bonuses, Adam decided to fix the problem once and for all.  He idled his team for a week so that Phil & Mary’s teams could build a buffer. Now he had a full week of seating surfaces and frames that his team could run through.  If any of Phil or Mary’s machines went down, Adam would not be impacted for almost a week.   Now we have a slightly more complex process.   Unfortunately, Adam and his team underestimated the difficulty in storing and accessing all of these components.  They ended up needing to invest into a somewhat expensive storage solution and a few forklift drivers who could ferry components from the trucks to Phil & Mary.  The drivers would then take batches from Phil & Mary and put them into storage.  As Adam’s team started to get to the end of they’re materials they’d call the forklifts to have them pull more frames and seats from those storage spaces and bring them over for final assembly. Our real process now looks a bit more like this. When we organize functionally, it’s easy to paint a very simple picture about how those systems feed each other.  Unfortunately, it’s rarely the complete truth. Organizing functionally creates point efficiencies in an inefficient system.  As pictured above, that system looks more like a warehousing operation than anything else.  It is.  There’s much more inventory on those forklifts and in those queues than is in any of the actual value-adding steps (remember, we’ve optimized those).   What’s worse, QA is happening at the very end.  Because we want to make sure that Adam won’t be stopped by upstream issues, if there is a problem with the seat frames, the flaw may have already permeated through a full week of seat frames.  Now we’ll need to decide what to do with a week of defective parts.  We will either need to be fix them all (expensive), throw them away (expensive) or we’ll just accept the quality deficiency (expensive). Lean manufacturing challenged the traditional mindset and introduced the idea of a “production cell”, something now generally referred to as cellular manufacturing.  Within a production cell, we would expect to find all of the machines and equipment necessary to produce a collection of similar products that will be passed onto the client.  This had several important consequences.  However, before we go any further it is worth highlighting that the machines are organized based on how they add value, not what they do. If our factory implemented production cells, maybe we end up with two.  The first cell has all of the machines and team members needed to take foam, fabric, metal and plastic in order to create chairs.  The second cell may have the exact same configuration, but operates in parallel.  If we want to expand capacity, we simply add another cell. A side effect of the production cell is that these machines won’t be as highly utilized. The same people operating the loom may also be handling the metal and they’re only going to be doing one thing at a time.  The machines utilization will go down.  Counterintuitively, this produces something that is more efficient.  We’ve essentially accepted point inefficiencies for system-wide efficiencies.  Where did all of that inventory go?  It’s gone.  Our need for forklifts is also nearly eliminated. Now consider our quality problem. If anyone in our cell produces a defective piece, we have one defective piece.  We can fix it, educate the person, and move on.  We are all responsible for all of the machines and pieces in our cell, so nothing is out of bounds for our own improvement process. Our incentives are also likely to shift.  Rather than measuring machine utilization or up-time, we’d be much more apt to measure the cell based on it’s purpose; the value we’re generating for the client.  In this case, perhaps the number of chairs produced.  And now, back to agile software development. Have you ever worked in a world where there is a queue of requests stored somewhere on a server?   Perhaps it’s in a CRM or ERP system by the name of TFS or JIRA.  Maybe it’s just an Excel workbook.  Either way, your computer is your forklift and the backend for that system is your warehouse.  Odds are good that every day you open that tool to find out what needs to be done (the forklift pulling material from the warehouse).  You’ll do your thing and when you’re done you go back to the tool and update the state of the task to indicate that you’re done (the forklift putting the material in the storage queue for the next stage).   Our raw material is information and the database is our warehouse.   Now let’s talk about a software delivery firm that has a few functional teams; DBAs, designers, and developers.   On day 1, our DBAs pull from that queue and start working on the schema.  After all, no proper development can begin without a schema so we need to make sure that our DBAs are working at least a week ahead of our developers. Perhaps also on day 1, our designers start mocking up the UI and getting some feedback.  We can’t let them wait until everything else is done to get started because they’ll have to go through far more iterations than anyone else once the client begins seeing it.  They simply can’t afford to wait. Our development leader will be monitoring the progress of these teams, and once the schema is done and UI is mocked up, he’ll find a developer who has capacity.  That developer will be given the task of picking up those pieces, adding some business logic, and making sure everything works together as expected. Lastly, our QA team is monitoring that queue and deployment reports to see which tasks have been promoted to beta.  Once something new pops up, they begin testing new work and executing routine regression tests. Sound familiar? If not, does it look familiar? In agile, there is the notion of a cross-functional teams.  An agile team is designed to have all of the skills necessary to deliver the value expected by our client.   Moreover, we encourage agile teams to measure they’re productivity not by hours worked, but by the delivery of software.  After all, working software is the primary measure of progress.    Sound familiar?  How about a picture? I’ve used work tracking systems to illustrate the system-wide inefficiencies of a functionally segregated IT organization.  There is truth in that, but it’s not quite the truth.  If that’s not it, then from where does the improvement come? Cross-functional teams gain system-side efficiency by reducing or eliminating explicit knowledge transfer (read: handoffs). Each handoff consists of wrapping up work in a pretty bow, which takes time.  It is usually done electronically.  This means that there is usually some notes added to a backlog item or simply a closed task.  This tells the next person things are ready, but that’s it.  There is no context.  There is no warning of what things may be incorrect and need another look.  No one knows the assumptions that were made but the person who did the work and that is rarely shared.  The next person must re-learn much of what the previous person discovered, but they must re-learn it on their own.  This cycle of learning, doing, handing off, learning, doing, handing off, learning, doing, handing off is ripe with inefficiencies and opportunities for miscommunications.  Try asking a QA team member who has worked in a functional organization how often they spent days testing something only to learn that it was actually not ready and the engineers were still working on it; they simply forgot to update the task. There is much more that can, and will, be said about knowledge transfer as a large factor in software delivery organizations.  Ignoring knowledge transfer can be done at the peril of leadership.  But for our purposes, that’s not needed to see that an agile cross-functional team and a lean production cell are essentially the same solution to the same problem. In both cases, we accept point inefficiencies in order to collect system-wide efficiency.