Tag Archives: Quality

Imperfect Action is Better Than Perfect Inaction: What Harry Truman Can Teach Us About Loss Functions (with an intro to ggplot)

One of the heuristics we use at Intelex to guide decision making is former US President Truman’s advice that “imperfect action is better than perfect inaction.” What it means is — don’t wait too long to take action, because you don’t want to miss opportunities. Good advice, right?

When I share this with colleagues, I often hear a response like: “that’s dangerous!” To which my answer is “well sure, sometimes, but it can be really valuable depending on how you apply it!” The trick is: knowing how and when.

Here’s how it can be dangerous. For example, statistical process control (SPC) exists to keep us from tampering with processes — from taking imperfect action based on random variation, which will not only get us nowhere, but can exacerbate the problem we were trying to solve. The secret is to apply Truman’s heuristic based on an understanding of exactly how imperfect is OK with your organization, based on your risk appetite. And this is where loss functions can help.

Along the way, we’ll demonstrate how to do a few important things related to plotting with the ggplot package in R, gradually adding in new elements to the plot so you can see how it’s layered, including:

  • Plot a function based on its equation
  • Add text annotations to specific locations on a ggplot
  • Draw horizontal and vertical lines on a ggplot
  • Draw arrows on a ggplot
  • Add extra dots to a ggplot
  • Eliminate axis text and axis tick marks

What is a Loss Function?

A loss function quantifies how unhappy you’ll be based on the accuracy or effectiveness of a prediction or decision. In the simplest case, you control one variable (x) which leads to some cost or loss (y). For the case we’ll examine in this post, the variables are:

  • How much time and effort you put in to scoping and characterizing the problem (x); we assume that time+effort invested leads to real understanding
  • How much it will cost you (y); can be expressed in terms of direct costs (e.g. capex + opex) as well as opportunity costs or intangible costs (e.g. damage to reputation)

Here is an example of what this might look like, if you have a situation where overestimating (putting in too much x) OR underestimating (putting in too little x) are both equally bad. In this case, x=10 is the best (least costly) decision or prediction:

plot of a typical squared loss function
# describe the equation we want to plot
parabola <- function(x) ((x-10)^2)+10  

# initialize ggplot with a dummy dataset
library(ggplot)
p <- ggplot(data = data.frame(x=0), mapping = aes(x=x)) 

p + stat_function(fun=parabola) + xlim(-2,23) + ylim(-2,100) +
     xlab("x = the variable you can control") + 
     ylab("y = cost of loss ($$)")

In regression (and other techniques where you’re trying to build a model to predict a quantitative dependent variable), mean square error is a squared loss function that helps you quantify error. It captures two facts: the farther away you are from the correct answer the worse the error is — and both overestimating and underestimating is bad (which is why you square the values). Across this and related techniques, the loss function captures these characteristics:

From http://www.cs.cornell.edu/courses/cs4780/2015fa/web/lecturenotes/lecturenote10.html

Not all loss functions have that general shape. For classification, for example, the 0-1 loss function tells the story that if you get a classification wrong (x < 0) you incur all the penalty or loss (y=1), whereas if you get it right (x > 0) there is no penalty or loss (y=0):

# set up data frame of red points
d.step <- data.frame(x=c(-3,0,0,3), y=c(1,1,0,0))

# note that the loss function really extends to x=-Inf and x=+Inf
ggplot(d.step) + geom_step(mapping=aes(x=x, y=y), direction="hv") +
     geom_point(mapping=aes(x=x, y=y), color="red") + 
     xlab("y* f(x)") + ylab("Loss (Cost)") +  
     ggtitle("0-1 Loss Function for Classification")

Use the Loss Function to Make Strategic Decisions

So let’s get back to Truman’s advice. Ideally, we want to choose the x (the amount of time and effort to invest into project planning) that results in the lowest possible cost or loss. That’s the green point at the nadir of the parabola:

p + stat_function(fun=parabola) + xlim(-2,23) + ylim(-2,100) + 
     xlab("Time Spent and Information Gained (e.g. person-weeks)") + ylab("$$ COST $$") +
     annotate(geom="text", x=10, y=5, label="Some Effort, Lowest Cost!!", color="darkgreen") +
     geom_point(aes(x=10, y=10), colour="darkgreen")

Costs get higher as we move up the x-axis:

p + stat_function(fun=parabola) + xlim(-2,23) + ylim(-2,100) + 
     xlab("Time Spent and Information Gained (e.g. person-weeks)") + ylab("$$ COST $$") +
     annotate(geom="text", x=10, y=5, label="Some Effort, Lowest Cost!!", color="darkgreen") +
     geom_point(aes(x=10, y=10), colour="darkgreen") +
     annotate(geom="text", x=0, y=100, label="$$$$$", color="green") +
     annotate(geom="text", x=0, y=75, label="$$$$", color="green") +
     annotate(geom="text", x=0, y=50, label="$$$", color="green") +
     annotate(geom="text", x=0, y=25, label="$$", color="green") +
     annotate(geom="text", x=0, y=0, label="$ 0", color="green")

And time+effort grows as we move along the x-axis (we might spend minutes on a problem at the left of the plot, or weeks to years by the time we get to the right hand side):

p + stat_function(fun=parabola) + xlim(-2,23) + ylim(-2,100) + 
     xlab("Time Spent and Information Gained (e.g. person-weeks)") + ylab("$$ COST $$") +
     annotate(geom="text", x=10, y=5, label="Some Effort, Lowest Cost!!", color="darkgreen") +
     geom_point(aes(x=10, y=10), colour="darkgreen") +
     annotate(geom="text", x=0, y=100, label="$$$$$", color="green") +
     annotate(geom="text", x=0, y=75, label="$$$$", color="green") +
     annotate(geom="text", x=0, y=50, label="$$$", color="green") +
     annotate(geom="text", x=0, y=25, label="$$", color="green") +
     annotate(geom="text", x=0, y=0, label="$ 0", color="green") +
     annotate(geom="text", x=2, y=0, label="minutes\nof effort", size=3) +
     annotate(geom="text", x=20, y=0, label="months\nof effort", size=3)

Planning too Little = Planning too Much = Costly

What this means is — if we don’t plan, or we plan just a little bit, we incur high costs. We might make the wrong decision! Or miss critical opportunities! But if we plan too much — we’re going to spend too much time, money, and/or effort compared to the benefit of the solution we provide.


p + stat_function(fun=parabola) + xlim(-2,23) + ylim(-2,100) + 
     xlab("Time Spent and Information Gained (e.g. person-weeks)") + ylab("$$ COST $$") +
     annotate(geom="text", x=10, y=5, label="Some Effort, Lowest Cost!!", color="darkgreen") +
     geom_point(aes(x=10, y=10), colour="darkgreen") +
     annotate(geom="text", x=0, y=100, label="$$$$$", color="green") +
     annotate(geom="text", x=0, y=75, label="$$$$", color="green") +
     annotate(geom="text", x=0, y=50, label="$$$", color="green") +
     annotate(geom="text", x=0, y=25, label="$$", color="green") +
     annotate(geom="text", x=0, y=0, label="$ 0", color="green") +
     annotate(geom="text", x=2, y=0, label="minutes\nof effort", size=3) +
     annotate(geom="text", x=20, y=0, label="months\nof effort", size=3) +
     annotate(geom="text",x=3, y=85, label="Little (or no) Planning\nHIGH COST", color="red") +
     annotate(geom="text", x=18, y=85, label="Paralysis by Planning\nHIGH COST", color="red") +
     geom_vline(xintercept=0, linetype="dotted") + geom_hline(yintercept=0, linetype="dotted")

The trick is to FIND THAT CRITICAL LEVEL OF TIME and EFFORT invested to gain information and understanding about your problem… and then if you’re going to err, make sure you err towards the left — if you’re going to make a mistake, make the mistake that costs less and takes less time to make:

arrow.x <- c(10, 10, 10, 10)
arrow.y <- c(35, 50, 65, 80)
arrow.x.end <- c(6, 6, 6, 6)
arrow.y.end <- arrow.y
d <- data.frame(arrow.x, arrow.y, arrow.x.end, arrow.y.end)

p + stat_function(fun=parabola) + xlim(-2,23) + ylim(-2,100) + 
     xlab("Time Spent and Information Gained (e.g. person-weeks)") + ylab("$$ COST $$") +
     annotate(geom="text", x=10, y=5, label="Some Effort, Lowest Cost!!", color="darkgreen") +
     geom_point(aes(x=10, y=10), colour="darkgreen") +
     annotate(geom="text", x=0, y=100, label="$$$$$", color="green") +
     annotate(geom="text", x=0, y=75, label="$$$$", color="green") +
     annotate(geom="text", x=0, y=50, label="$$$", color="green") +
     annotate(geom="text", x=0, y=25, label="$$", color="green") +
     annotate(geom="text", x=0, y=0, label="$ 0", color="green") +
     annotate(geom="text", x=2, y=0, label="minutes\nof effort", size=3) +
     annotate(geom="text", x=20, y=0, label="months\nof effort", size=3) +
     annotate(geom="text",x=3, y=85, label="Little (or no) Planning\nHIGH COST", color="red") +
     annotate(geom="text", x=18, y=85, label="Paralysis by Planning\nHIGH COST", color="red") +
     geom_vline(xintercept=0, linetype="dotted") + 
     geom_hline(yintercept=0, linetype="dotted") +
     geom_vline(xintercept=10) +
     geom_segment(data=d, mapping=aes(x=arrow.x, y=arrow.y, xend=arrow.x.end, yend=arrow.y.end),
     arrow=arrow(), color="blue", size=2) +
     annotate(geom="text", x=8, y=95, size=2.3, color="blue",
     label="we prefer to be\non this side of the\nloss function")

Moral of the Story

The moral of the story is… imperfect action can be expensive, but perfect action is ALWAYS expensive. Spend less to make mistakes and learn from them, if you can! This is one of the value drivers for agile methodologies… agile practices can help improve communication and coordination so that the loss function is minimized.

## FULL CODE FOR THE COMPLETELY ANNOTATED CHART ##
# If you change the equation for the parabola, annotations may shift and be in the wrong place.
parabola <- function(x) ((x-10)^2)+10

my.title <- expression(paste("Imperfect Action Can Be Expensive. But Perfect Action is ", italic("Always"), " Expensive."))

arrow.x <- c(10, 10, 10, 10)
arrow.y <- c(35, 50, 65, 80)
arrow.x.end <- c(6, 6, 6, 6)
arrow.y.end <- arrow.y
d <- data.frame(arrow.x, arrow.y, arrow.x.end, arrow.y.end)

p + stat_function(fun=parabola) + xlim(-2,23) + ylim(-2,100) + 
     xlab("Time Spent and Information Gained (e.g. person-weeks)") + ylab("$$ COST $$") +
     annotate(geom="text", x=10, y=5, label="Some Effort, Lowest Cost!!", color="darkgreen") +
     geom_point(aes(x=10, y=10), colour="darkgreen") +
     annotate(geom="text", x=0, y=100, label="$$$$$", color="green") +
     annotate(geom="text", x=0, y=75, label="$$$$", color="green") +
     annotate(geom="text", x=0, y=50, label="$$$", color="green") +
     annotate(geom="text", x=0, y=25, label="$$", color="green") +
     annotate(geom="text", x=0, y=0, label="$ 0", color="green") +
     annotate(geom="text", x=2, y=0, label="minutes\nof effort", size=3) +
     annotate(geom="text", x=20, y=0, label="months\nof effort", size=3) +
     annotate(geom="text",x=3, y=85, label="Little (or no) Planning\nHIGH COST", color="red") +
     annotate(geom="text", x=18, y=85, label="Paralysis by Planning\nHIGH COST", color="red") +
     geom_vline(xintercept=0, linetype="dotted") + 
     geom_hline(yintercept=0, linetype="dotted") +
     geom_vline(xintercept=10) +
     geom_segment(data=d, mapping=aes(x=arrow.x, y=arrow.y, xend=arrow.x.end, yend=arrow.y.end),
     arrow=arrow(), color="blue", size=2) +
     annotate(geom="text", x=8, y=95, size=2.3, color="blue",
     label="we prefer to be\non this side of the\nloss function") +
     ggtitle(my.title) +
     theme(axis.text.x=element_blank(), axis.ticks.x=element_blank(),
     axis.text.y=element_blank(), axis.ticks.y=element_blank()) 

Now sometimes you need to make this investment! (Think nuclear power plants, or constructing aircraft carriers or submarines.) Don’t get caught up in getting your planning investment perfectly optimized — but do be aware of the trade-offs, and go into the decision deliberately, based on the risk level (and regulatory nature) of your industry, and your company’s risk appetite.

Make Strategic Alignment Actionable with Baldrige

It can be difficult to focus on strategy when your organization has to comply with standards and regulations. Tracking and auditing can be tedious! If you’re a medical device manufacturer, you may need to maintain ISO 13485 compliance to participate in the supply chain. At the same time, you’ve got to meet all the requirements of 21 CFR 820. You’ve also got to remember other regulations that govern production and postmarket. (To read more about the challenges, check out Wienholt’s 2016 post.) There’s a lot to keep track of!

But strategy is important. Alignment is even more important! And in my opinion, the easiest way to improve alignment and get “Big Q” quality is to use the Baldrige Excellence Framework. It was developed by the Baldrige Performance Excellence Program, and is administered by NIST.

In Is Good, Good Enough for You? Taking the Next Step After ISO 9001:2015, former Baldrige Program Executive Director Harry Hertz outlines similarities and differences between ISO 9001:2015 and Baldrige. After examining complements, Harry shows how Baldrige helps organizations grow beyond the conformance mindset:

I have not shared all the commonalities of or differences between ISO 9001:2015 and the Baldrige Excellence Framework. Instead, I have tried to show the organizational possibilities of building on conformity assessment to establish a holistic approach for achieving excellence in every dimension of organizational performance today, with a look to the strategic imperatives and opportunities for the future. Baldrige helps an organization take this journey with a focus on process (55% of the scoring rubric) and results (45% of the rubric), recognizing that great processes are only valuable if they yield the complete set of results that lead to organizational sustainability… I encourage organizations that have not gone beyond conformity to take the next step in securing your future.

Read More Here! –>

The Achilles Heel of Customer Journey Mapping

Journeying through western Wyoming in August 2011. Image Credit: me.

Achilles was that guy in Greek mythology whose mother, when he was born, wanted to protect him soooo much that she held him by the heel and dipped him in the power-giving waters of the River Styx — making him bullet proof (and much more; no bullets then), except at the heel, because for some reason she didn’t think about just dunking him a few inches deeper. Maybe she didn’t want to get her hand wet? Who knows. (In the research literature this is called perverse unintended consequences — it happens in business too. You try to make an improvement or protect against a particular hazard and oops, you made it worse.)

Customer Journey Maps (CJM)

I’ve been reading a lot about the Customer Journey Maps (CJM) technique used in marketing (see Folstad & Kvale (2018) for a fantastic and comprehensive review). It formalizes the very good suggestion that when you’re trying to figure out how to engage with prospects, you should put yourself in their shoes. Empathize with them. Figure out what they need, and when they need it. Then, identify how your company can not only meet them there — but connect with them in a compelling way.

CJM also goes beyond conceptual modeling. For example, Harbich et al (2017) uses Markov models to predict the most likely path and timing of a customer’s journey. Bernard & Andritsos (2018) mine actual customer journeys from sales force automation systems and use them in a Monte Carlo like way to uncover patterns. There’s even a patent on one method for mining journey data.

Benefits of Journey Maps

Annette Franz says that “done right, maps help companies in many ways, including to…

  • Understand experiences.
  • Design [new] experiences.
  • Implement and activate new experiences.
  • Communicate and share experiences.
  • Align the organization… get executive commitment for the customer experience (CX) strategy, get organizational adoption of the customer-centric focus, provide a line of sight to the customer for employees, and help employees understand how they impact the experience.”

But like Achilles, Customer Journey Mapping has a vulnerable spot that can wipe out all its potential benefits. (Fortunately, success lies in the way your organization wields the tool… so there’s a remedy.)

The Achilles Heel of CJM

Here’s the problem: creating a journey map does indeed ensure that you focus on the customer, but does not ensure that you’re focusing on that customer’s experience. Diagnosing Voice of the Customer (VoC) is hard [long explanation; shorter explanation], and there are tons of ways to do it! Through journey mapping, you may accidentally be focusing on your company’s experience of that customer throughout the stages of the journey. 

Diagnosing the Symptoms

How can you tell? Here’s a non-exhaustive list of ways to diagnose the symptoms, based on recent research and observing companies who do this since about 2009 (please add in the comments if you’ve observed any other ones):

  • Do you ever hear “How can we move the customer from [this stage] to [the next stage]?”
  • … or “How do we get more customers to join us [at this stage of the journey]?”
  • … or maybe “How can we get customers to [take this action] [at this stage of the journey]?”
  • Does your customer journey address differences in customer personas, or do you have a one-size-fits-all map? Rosenbaum et al (2016) says “We contend that most customer journey maps are critically flawed. They assume all customers of a particular organization experience the same organizational touchpoints and view these touchpoints as equally important.”
  • Do you systematically gather, analyze, and interpret data about what your current customers are experiencing, or do you just kind of guess or rely on your “experience”? (Hint: subconscious biases are always in play, and you’ll never know they’re there because they are subconscious).
  • Do you systematically gather, analyze, and interpret data about what your prospects would benefit from experiencing with/through you, or do you just kind of guess or rely on your “experience”?
  • Do you focus on ease of use over utility? (Just like perfect is the enemy of perfectly OK, easy can be the enemy of possible if you’re not careful. This often shows up in the journey mapping process.)

Like I mentioned earlier, this is definitely not a comprehensive list.

The Solution

What’s the solution? ASK. Ask your customer what they need. Find out about their pain points. Ask them what would make it easier for them to do their job. Finally, ask them if you’re getting it right! And even though I said “customer” — I do mean you should ask more than one of them, because needs and interests vary from person to person and industry to industry. Just interacting with one customer isn’t going to cut it.

Ask early, ask often! (As people learn and evolve, their needs change.)

Improving the Method

How can we improve the quality of customer journey mapping? Share your insights and lessons learned! CJM is a promising technique for helping organizations align around empathetic value propositions, but just like agile methods, it’s got to be applied strategically and deliberately… and then checked on a continuous basis to make sure the map is in tune with reality.

Improve Writing Quality with Speaking & Storyboarding

For a decade, I supervised undergrads and grad students as they were completing writing projects: term papers, semester projects, and of course — capstone projects and thesis work. Today, I’m responsible for editing the work of (and mentoring) junior colleagues. The main lesson I’ve learned over this time is: writing is really hard for most people. So I’m here to help you.

Me, Reviewing Someone Else’s Work

If I had a dollar for every time this scenario happened, I’d… well, you get my point:

ME (reading their “final draft”): [Voice in Head] Huh? Wow, that sentence is long. OK, start it again. I don’t understand what they’re saying. What are they trying to say? This doesn’t make any sense. It could mean… no, that’s not it. Maybe they mean… nope, that can’t be it.

ME: So this sentence here, the one that says “Start by commutating and telling the story of what the purpose of the company’s quality management software is, the implementation plans and the impact to the current state of quality roles and responsibilities for everyone involved.”

THEM (laughing): Oh! Commutating isn’t a word. I meant communicating.

ME: Have you tried reading this sentence out loud?

THEM (still laughing, trying to read it): Yeah, that doesn’t really make sense.

ME: What were you trying to say?

THEM: I was trying to say “Start by explaining how quality management software will impact everyone’s roles and responsibilities.”

ME: Well, why don’t you say that?

THEM: You mean I can just say that? Don’t I need to make it sound good?

ME: You did just make it sound good when you said what you were trying to say.

What Just Happened?

By trying to “make it sound good” — it’s more likely that you’ll mess it up. People think speaking and writing are two different practices, but when you write, it’s really important that when you speak it out loud, it sounds like you’re a human talking to another human. If you wouldn’t say what you wrote to someone in your target audience in exactly the way that you wrote it, then you need to revise it to something you would say.

Why? Because people read text using the voice in their heads. It’s a speaking voice! So give it good, easy, flowing sentences to speak to itself with.

What Can You Do?

Here are two ways you can start improving your writing today:

  1. Read your writing out loud (preferably to someone else who’s not familiar with your topic, or a collaborator). If it doesn’t sound right, it’s not right.
  2. Use a storyboard. (What does that mean?)

There are many storyboard templates available online, but the storyboard attached to this post is geared towards developing the skills needed for technical writing. (That is, writing where it’s important to support your statements with citations that can be validated.) Not only does citing sources add credibility, but it also gives your reader more material to read if they want to go deeper.

Storyboarding

The process is simple: start by outlining your main message. That means:

  1. Figure out meaningful section headers that are meaningful on their own.
  2. Within each section, write a complete phrase or sentence to describe the main point of each paragraph or small group of paragraphs
  3. For each phrase or sentence that forms your story, cut and paste material from your references that supports your point, and list the citation (I prefer APA style) so you don’t forget it.
  4. Read the list of section headers and main points out loud. If this story, spoken, hangs together and is logical and complete — there’s a good chance your fully written story will as well.

Not all elements of your story need citations, but many of them will.

Next Steps

When the storyboard is complete, what should you do next? Sometimes, I hand it to a collaborator to flesh it out. Other times, I’ll put it aside for a few days or weeks, and then pick it up later when my mind is fresh. Whatever approach you use, this will help you organize your thoughts and citations, and help you form a story line that’s complete and understandable. Hope this helps get you started!

STORYBOARD (BLANK)

STORYBOARD (PARTIALLY FILLED IN)

Yes, You Do Need to Write Down Procedures. Except…

近代工芸の名品― [特集展示] 

A 棗 from http://www.momat.go.jp/cg/exhibition/masterpiece2018/ — I saw this one in person!!

Several weeks ago we went to an art exhibit about “tea caddies” at the Tokyo Museum of Modern Art. Although it might seem silly, these kitchen containers are a fixture of Japanese culture. In Japan, drinking green tea is a cornerstone of daily life.

It was about 2 in the afternoon, and we had checked out of our hotel at 11. Wandering through the center of the city, we stumbled upon the museum. Since we didn’t have to meet our friends for several more hours, we decided to check it out.

Confession: I’m not a huge fan of art museums. Caveat: I usually enjoy them to some degree or another when I end up in them. But I didn’t think tea caddies could possibly be useful to me. I was wrong!

When to Write SOPs

One of the features of the exhibit was a Book of Standard Operating Procedures. It described how to create a new lacquered tea caddy from paper. (Unfortunately, photography was prohibited for this piece in particular.) The book was open, laying flat, showing a grid of characters on the right hand side. The grid described a particular process step in great detail. On the left page, a picture of a craftsman performing that step was attached. The card describing the book of SOPs explained that each of the 18 process steps was described using exactly the same format. This decision was made to ensure that the book would help accomplish certain things:

  • Improve Production Quality. Even masters sometimes need to follow instructions, or to be reminded about an old lesson learned, especially if the process is one you only do occasionally. SOPs promote consistency over time, and from person to person. 
  • Train New Artists. Even though learning the craft is done under the supervision of a skilled worker, it’s impossible to remember every detail (unless you have an eidetic memory, which most of us don’t have). The SOP serves as a guide during the learning process.
  • Enable Continuous Improvement. The SOP is the base from which adjustments and performance improvements are grown. It provides “version control” so you can monitor progress and examine the evolution of work over time.
  • Make Space for Creativity. It might be surprising, but having guidance for a particular task or process in the form of an SOP reduces cognitive load, making it easier for a person to recognize opportunities for improvement. In addition, deviations aren’t always prohibited (although in high-reliability organizations, or industries that are highly regulated, you might want to check before being too creative). The art is contributed by the person, not the process.

When Not to Write SOPs

Over the past couple decades, when I’ve asked people to write up SOPs for a given process, I’ve often run into pushback. The most common reasons are “But I know how to do this!” and “It’s too complicated to describe!” The first reason suggests that the person is threatened by the prospect of someone else doing (and possibly taking over) that process, and the second is just an excuse. Maybe.

Because sometimes, the pushback can be legitimate. Not all processes need SOPs. For example, I wouldn’t write up an SOP for the creative process of writing a blog post, or for a new research project (that no one has ever done before) culminating in the publication of a new research article. In general, processes that vary significantly each time they’re run, or processes that require doing something that no one has ever done before — don’t lend themselves well to SOPs.

Get on the Same Page

The biggest reason to document SOPs is to literally get everyone on the same page. You’d be surprised how often people think they’re following the same process, but they’re not! An easy test for this is to have each person who participates in a process draw a flow chart showing the process steps and decisions are made on their own, and then compare all the sketches. If they’re different, work together until you’re all in agreement over what’s on one flow chart — and you’ll notice a sharp and immediate improvement in performance and communication.

There’s a Fly in the Milk (and a Bug in the Software)

Where “software bugs” got their name — the dead moth stuck in a relay in Harvard’s Mark II in 1947. From https://en.wikipedia.org/wiki/Software_bug

As one does, I spent a good part of this weekend reading the Annual Report of the Michigan Dairymen’s Association. It provides an interesting glimpse into the processes that have to be managed to source raw materials from suppliers, to produce milk and cream and butter, and to cultivate an engaged and productive workforce.

You might be yelling at your screen right now. DairyMEN’s? Aren’t we beyond that now? What’s wrong with them? The answer is: nothing. This is an annual report from 1915. Your next question is probably what could the dairymen be doing in 1915 that would possibly be interesting for production and operations managers in 2019?  The answer here, surprisingly, is a lot. Except for the overly formal and old-timey word choices, the challenges and concerns encountered in the dairy industry are remarkably consistent over time.

It turns out that flies were a particular concern in 1915 — and they remain a huge threat to quality and safety in food and beverage production today:

  • “…an endless war should be waged against the fly.”
  • “[avoid] the undue exposure of the milk cooler to dust and flies.”
  • “The same cows that freshen in July and August will give more milk in December it seems to me… because at that time of year the dairyman has flies to contend with…”
  • “Flies are known to be great carriers of bacteria, and coming from these feeding places to the creamery may carry thousands of undesirable bacteria direct to the milk-cans or vats.”

In a December 2018 column in Food Safety Tech, Chelle Hartzer describes not one but three (!!!) different types of flies that can wreak havoc in a food production facility. There are house flies that deposit pathogens and contaminants on every surface they land, moth flies that grow in the film inside drains until they start flying too, and fruit flies that can directly contaminate food. All flies need food, making your food or beverage processing facility a potential utopia for them.

In the controls she presented to manage fly-related hazards, I noticed parallels to controls for preventing and catching bugs in software:

  • Make sanitation a priority. Clean up messes, take out the trash on a daily basis, and clean the insides of trash bins. In software development, don’t leave your messes to other people — or your future self!  Bake time into your development schedule to refactor on a regular basis. And remember to maintain your test tools! If you’re doing test-driven development with old tools, even your trash bins may be harboring additional risks.
  • Swap outdoor lighting. In food production facilities, it’s important to use lighting that doesn’t bring the flies to you (particularly at night). Similarly, in software, examine your environment to make sure there are no “bug attractors” like lack of communication or effective version control, dependencies on buggy packages or third party tools, or lack of structured and systematic development processes.
  • Install automatic doors to limit the amount of time and space available for flies to get in to the facility. In software, this relates to limiting the complexity of your code and strategically implementing testing, e.g. test-driven development or an emphasis on hardening the most critical and/or frequently used parts of your system.
  • Inspect loading and unloading areas and seal cracks and crevices. Keep tight seals around critical areas. The “tight seals” in software development are the structured, systematic processes related to verifying and validating your code. This includes design reviews, pair programming, sign-offs, integration and regression testing, and user acceptable testing.
  • Clean drains on a regular basis. The message here is that flies can start their lives in any location that’s suitable for their growth, and you should look for those places and keep them sanitized too. In software, this suggests an ongoing examination of technical debt. Where are the drains that could harbor new issues? Find them, monitor them, and manage them.

Although clearly there’s a huge difference between pest management in food and beverage production and managing code quality, process-related pests have been an issue for at least a century — and likely throughout history. What are the flies in your industry, and what are you doing to make sure they don’t contaminate your systems and bring you down?

Happy World Quality Day 2018!

Each year, the second Thursday of November day is set aside to reflect on the way quality management can contribute to our work and our lives. Led by the Chartered Quality Institute (CQI) in the United Kingdom, World Quality Day provides a forum to reflect on how we implement more effective processes and systems that positively impact KPIs and business results — and celebrate outcomes and new insights.

This year’s theme is “Quality: A Question of Trust”.

We usually think of quality as an operations function. The quality system (whether we have quality management software implemented or not) helps us keep track of the health and effectiveness of our manufacturing, production, or service processes. Often, we do this to obtain ISO 9001:2015 certification, or achieve outcomes that are essential to how the public perceives us, like reducing scrap, rework, and customer complaints.

But the quality system encompasses all the ways we organize our business — ensuring that people, processes, software, and machines are aligned to meet strategic and operational goals. For example, QMS validation (which is a critical for quality management in the pharmaceutical industry), helps ensure that production equipment is continuously qualified to meet performance standards, and trust is not broken. Intelex partner Glemser Technologies explains in more detail in The Definitive Guide to Validating Your QMS in the Cloud. This extends to managing supplier relationships — building trust to cultivate rich partnerships in the business ecosystem out of agreements to work together.

This also extends to building and cultivating trust-based relationships with our colleagues, partners, and customers…

Read more about how Integrated Management Systems and Industry 4.0/ Quality 4.0 are part of this dynamic: https://community.intelex.com/explore/posts/world-quality-day-2018-question-trust

« Older Entries