People talking without speaking; People hearing without listening

Lyrics from “The Sound of Silence” by Simon & Garfunkel.

Actually, I like the rendition by Disturbed best, but that isn’t important here.

What is important here is that most people do hear without listening. Of course, it doesn’t help that so many people talk without speaking … especially on the internet (more about that later).

Are these distinctions without differences?

Talking is mutual communication and speaking is one way of doing that. The context of the song makes the distinction clear … communication without speech and therefore, presumably silent.

On the other hand, hearing – strictly speaking – is the purely physiological process of receiving sound. Listening means actively apprehending those sounds and making sense of them. To hear without listening is a different kind of silence – the silence of minds.

Soon, a new school year will start.  I will be doing a lot of talking both with and without speaking.  My students will be doing more than a little hearing without listening, but I will make my best effort to help bridge that gap.

There will be time for some sounds of silence in my classroom.  There is precious little silence these days … a different problem than what Simon & Garfunkel (or Disturbed) were indicating.

More anon …

Version Control Part 2: A Version is More than Just a Number

The benefits of version or source control include: history, branching/merging, and traceability.

Sometimes the smallest detail can have an astonishingly large impact … and a version number is such a small thing.

Keeping track of small details tends to be something of a strength of computer systems. Tiny details … even ones that don’t seem to matter. You know what I mean if you have ever used a technical term slightly incorrectly in the presence of a dev-ops engineer.

Let’s consider the benefits of a version control system: history, branching/merging, and traceability.

  • History – complete change history of every file.
    • Every change made by many different people over the years.
    • Changes = creation and deletion of files, edits to their contents.
    • Should include the author, date and written notes on the purpose of each change.
    • Enables going back to previous versions to help in root cause analysis for bugs
    • Crucial when needing to fix problems in older versions of software. (If the software is being actively worked on, almost everything can be considered an “older version” of the software.)
  • Branching/merging – allow team members to work concurrently, but even individuals working on their own can benefit from working on independent streams of changes.
    • “Branching” keeps multiple streams of work independent from each other and provides the tools necessary to merge the work back together. In software, this helps developers verify that changes on different branches do not conflict.
    • To that end, teams adopt a practice of branching for each feature or perhaps branching for each release, or both. We have even adopted the practice of creating branches for correcting specific defects – especially when the defect touches many different parts of the system.
  • Traceability – tracing every change made to the software and connecting it to project management and defect tracking software … annotating the changes with a message describing the purpose and intent of the change – helps with root cause analysis and other forensics.
    • the annotated history of the code aids understanding what it is doing and why it is so designed – this helps developers make correct and harmonious changes in accord with intended long-term design … note that the design itself is a high-value knowledge product that ought to be versioned and tracked
    • this is especially important for working with legacy (in some cases, ancient) code and
    • helps developers to estimate future work with accuracy

It is a poor workman who blames his tools … but tool is only useful if used …

There have been some amazingly expensive failures in IT – even where versioning systems are heavily used. Aviation, for example. The Airbus A380 suffered from an incompatible software issue … but not the avionics (a portmanteau: aviation electronics):

The Airbus issue of 2006 highlighted a problem many companies can have with software: what happens when one program doesn’t talk to another? In this case, the problem was caused by two versions of the same program – CATIA (CAD software that is used for design and assembly).

The Airbus A380, one of the world’s largest aircraft, was a major European undertaking. The problem arose because two organisations in the group – Dassault Aviation and a Hamburg factory – used two different versions of CATIA.

The German factory was using an out-of-date version of CATIA and Dassault used the latest version. Not surprising since Dassault developed CATIA.

When Airbus brought two halves of the aircraft together, the differences in the versions of the same software system meant that the wiring on one did not match the wiring in the other. The wiring was incompatible and had to be changed.

The problem was eventually fixed, but only at a cost that nobody seems to want to put an absolute figure on. But all agreed it cost a lot, and put the project back a year or more.

Moral of the story: even the best version control system on the planet is not going to fix using incompatible versions of tools on the same project.

Which is also why our devops engineers are soooo … picky!

Version Control  Part 1

Version – or source – control is a best practice that tracks and manages changes to software code base. It is especially important for products that are going to be worked on – simultaneously – by many different people in many different places.

Once upon a time, in the land of Pixar, somebody did a “/bin/rm -r -f *” command … and deleted the entire “Toy Story 2” film while it was in production …

In the early days of computing “source control” meant not dropping your deck of punched cards … the first time I saw a grown man cry was when I saw a graduate student with his thesis program strewn all over the floor of the Computer Science building. Weeping. The first time that happened to you, you learned the value of having numbered your cards in the card deck … anyway, things are different now with software systems spanning 10s, 100s, 1,000s of files on multiple real and virtual machines perhaps scattered across multiple continents … but the more they change, the more they stay the same.

I came across the description of the Pixar recursive delete in a recent Quora post and I was astonished that something of such high value as a slam dunk money making animated film would be developed without version control … not to mention nightly backups with redundant off-site storage.

Those can be two things … version control and backups with off-site storage … but the version control itself often includes backups/off-site storage as a side-effect. A distributed version control system (e.g. the tool called Git) maintains a copy of the file tree in “the cloud” where it is typically mirrored and backed up daily as a matter of policy.

Version – or source – control is a best practice that tracks and manages changes to software code base. In my opinion, it should be used for any high-value knowledge product (like an animated film). It is especially important for products that are going to be worked on – simultaneously – by many different people in many different places.

A version control system keeps track of every modification to the product so that the present state of the product can always be constructed … and any previous state of the product can be re-constructed. For example, in most large-scale software projects there is

  • one team of people busily writing new code,
  • another repairing old code,
  • yet another writing documentation, test cases, etc.
  • The version control system makes it possible for them to all work on the same project with a minimal amount of stepping on each others toes.

Could you develop software – or any knowledge product – without version control? Sure. People do it all the time. They shouldn’t, but they do.

It only takes dropping your deck once … one instance of a “/bin/rm -r -f *” event … to spark an ardent desire for version control and a robust backup and recovery process in the hearts and minds of even the most footloose code slingers.

Fear of Improvement

Health and fitness coaches often have to overcome their clients’ resistance to improving. Teams can resist improvement as well.

How many people don’t improve because they are afraid of leaving the herd?

What is culture but the shared beliefs and values of a group of people … because we are talking about a culture of quality we should look into what it takes to move your personal culture to a higher standard.

I have a good friend who is a health coach and she told me about a client of hers that hesitated to make the first step on that “road to improvement” … because she didn’t want her SO to feel like he was a slacker for not getting his own act together.

Health and fitness coaches often have to overcome their clients’ resistance to improving .. not because their clients don’t want to improve … they do. But their clients are afraid that they will embarrass or antagonize their families and/or friends – those who are not improving … or even those who are actively, intentionally spiraling into the turf on their race to the bottom physically, mentally, and spiritually.

Note that this is often what they think might happen when they embark on a program of improvement. Note: if you think that your family or friends are going to resent you for improving then you want to consider whether your opinion of them is lower than deserved … or if you have actually received negative feedback from them because you are trying to improve (so your opinion is justified) then you need to consider what to do about the toxicity of your relationships.

Take one of your favorite recreational activities … do you want to improve at it? I like to play hockey … and chess … both involve checking and boards … but anyway, I want to improve at both of those. I will never be a professional at either of them – so I have no illusion that I could ever be “the best” … but I do want to become better at those activities. So I do the things needed to become better…

On a more personal level, improving physical fitness, losing weight, for example, can sometimes be perceived as a threat to those who may aspire to improve themselves, but lack the strength of will to do so. Those who perceive your desire for improvement as a threat may try to manipulate you into failure … so that they don’t feel badly about themselves.

OK, so how does this apply to quality – especially software quality?

Because software is a team sport, (Yes, all of you techy introverts out there … you have to interact with actual people to get the job done :wink:) … the team’s culture is a mix of the individual cultures people bring with them. A sports team is (well, it used to be) a strict meritocracy – the better you are, the better you make the team, the more likely that you will stay. Individuals on the team have to individually improve and help the team improve as well.

A team that is focused on continual improvement will have members who do not get into a defensive crouch whenever their work product or process is critiqued. Of course such critiques should be directed at the work product and not the producer … but unless your team has mastered the art of “egoless programming,” it is not unusual for code reviews to be perceived as an attack. And if that happens, you can watch your team not just fail to improve, but actively, intentionally spiral into the turf on their race to the bottom technically, productively, and culturally.

Quality Culture – Part 2

If a real culture of quality is one in which the individuals truly care about the quality of their work then it is important for the individuals to actually care. The organization cannot care more about quality than the individuals that make up the organization.

Before you sit back and wait for your organization to adopt a quality culture … look to what you can do on your own!

Last time we looked at a quality culture from the point-of-view of the organization; today we’ll focus on the individual – that would be you … and me.We work with a software system the production version of which was delivered with 2 different UI/UX standards. It is jarring. How could any self-respecting software company release such a thing? There are also buttons that when clicked, result in an error pop-up … even the most rudimentary testing would have shown these problems.

A culture of “it’s good enough” is hard to fight at the individual level. Quickly and carelessly “hacking” code and being rewarded for it because one is getting a lot done quickly creates an environment – a culture – where quality is not valued.

A culture is a social phenomenon requiring group interactions for its expression. The individual either replicates and reinforces the cultural norms or alters and modifies them. Here are three ways that you can participate in those group interactions:

  • Habit – formed in response to a long process of learning and adopting social norms
  • Imitation – where your behaviors copy those of the people around you, like a group walking together that adopts a common gait (have you ever walked “with” somebody who is oblivious to this?)
  • Calculated risk – the power to either strengthen or change cultural norms resides at the individual level, for it is this level where control over the cultural phenomenon resides to the extent that it can be controlled at all.

Digging deeper … what role does quality play in your personal life? Do you demand better from yourself even in – or especially in – your recreational activities? It is not (just) competitiveness, although, for me, there is that … It is a drive for improvement … a willingness to work on improving. If you believe that you deserve “better” then you are also obliged to be – or become – better … or work toward that.

So, perhaps you can take a calculated risk and ask the question: “How can we release this software to our customers when it so obviously ‘draws hard vacuum’?” Well, our release schedule says this has to go out this month. Why is the schedule more important than the quality of the product? Because marketing has promised a new release every quarter. But why would releasing a defective product fulfill that promise? Because …

You see what I did there? As an individual, you can bring the 5 whys to bear on high leverage situations. What if you don’t want to risk raising the quality culture of your organization? Well, why would you want to work in a job where you don’t care about the quality culture of the organization?

Quality Culture – Part I

Quality isn’t just free … it’s profitable.

“A company with a highly developed ‘culture of quality’ spends, on average, $350M less annually fixing mistakes than a company with a poorly developed one.” HBRHarvard Business Review, in an article “Creating a Culture of Quality” from 2014, defined a “true culture of quality” as “an environment in which employees not only follow quality guidelines but also consistently see others taking quality-focused actions, hear others talking about quality, and feel quality all around them.”

The study was focused on big businesses – hence the $350M number – basically, it was discovered that between the bottom 5th and top 5th (quality culture), the top saved $13,400 annually per employee compared to the bottom.

The culture of quality includes four factors that drive quality as a cultural value:

1. Leadership emphasis; Managers are told that quality is a leadership priority. Managers “walk the talk” on quality. When evaluating employees, bosses emphasize the importance of quality.

2. Message Credibility; Messages are delivered by respected sources. Workers find that communications appeal to them personally. Messages are consistent and easy to understand.

3. Peer Involvement; Most employees have a strong network of peers for guidance. Peers routinely raise quality as a topic for team discussion. Like members of a sports team, peers hold one another accountable.

4. Employee Ownership; Workers clearly understand how quality fits with the job. Workers are empowered to make quality decisions. Workers are comfortable raising concerns about quality violations and challenging directives that detract from quality.

How do you know that your organization has weak culture of quality?

  • Lacks formal mechanisms for collecting and analyzing customer feedback
  • Experiences frequent, perhaps minor, setbacks owing to inconsistent quality
  • Training and development do no emphasize quality
  • Performance evaluation metrics have little/no mention of quality goals
  • Managers fail to consistently emphasize quality or resistant to quality initiatives

OK, fine for big businesses, but what does that mean for us, mere mortals? Small businesses? Stay tuned for part II!

Mistake Proofing

The initial term was “baka-yoke,” which means ‘fool-proofing’, but it was changed because the term ‘fool-proofing’ has dishonorable and offensive connotations. We Americans use a similar term: “idiot proofing” … which seems is even worse, but we don’t mind, do we?

Poka-Yoke (Japanese, pronounced PO-ka yo-KAY) which means ‘mistake-proofing’ or more literally – avoiding (yokeru) inadvertent errors (poka) – is the use of any automatic device or method that either (1) makes it impossible for an error to occur or (2) makes the error immediately obvious once it has occurred.

There are a couple of levels where this operates in software

In the SDLC – software development life cycle – we want the processes that are being executed to be as mistake-(idiot-)proof as possible … so we have high confidence that our product will be of high quality.

In the product itself … our requirements, design, implementation processes should ensure that the software product helps the user avoid mistakes.

When should we do this?

  1. when there is a process step where human error can cause mistakes or defects to occur, especially in processes that rely on the worker’s attention, skill, or experience – programming, code inspections, …
  2. At a hand-off step in a process, when output is transferred to another worker … programmer → QA → devops …
  3. Where minor early errors cause major problems later – e.g. getting the requirements wrong
  4. In the software product, where the user can make an error which affects the output
  5. In any case when the consequences of an error are expensive or dangerous.

Myths/Challenges

Because it originated as an industrial – a manufacturing – process, we can be led to believe that it doesn’t apply to software. After all, software is free to manufacture (reproduce) … these days we don’t even provide software on a physical medium (the youngest of you are saying “why would anybody do that?”), but poka-yoke is not restricted to manufacturing.

One software system with which I am extremely familiar, it is not only possible to make a mistake, but then have no way to recover – to fix the mistake – using the system. An expensive consultant needs to get into the database and manually (so to speak) adjust the data.

Even worse, you can get into a situation in the app where you are stuck and can’t get out except by force-quitting the app – we call that an oubliette.

A quick how-to:

Obtain or create a flowchart of the process. Review each step, thinking about where and when human errors are likely to occur. For a software product, use whatever design representation you have … you do have a design, don’t you?

For each potential error, work back through the process to find its source.

For each error, think of potential ways to make it impossible for the error to occur. Look for ways to:

  1. Elimination: eliminate the step that causes the error.
  2. Replacement: replace the step with an error-proof one.
  3. Facilitation: make the correct action far easier than the error.

If you cannot make it impossible for the error to occur, think of ways to detect the error and minimize its effects. Consider inspection methods, setting functions, and regulatory functions expanded on below.

Choose the best mistake-proofing method or device for each error. Test it, then implement it. Three kinds of inspection methods provide rapid feedback:

  1. Successive inspection is done at the next step of the process by the next worker.
  2. Self-inspection means workers check their own work immediately after doing it.
  3. Source inspection checks, before the process step takes place, that conditions are correct. Often it’s automatic and keeps the process from proceeding until conditions are right.

Setting functions are the methods by which a process parameter or product attribute is inspected for errors:

The contact or physical method checks a physical characteristic such as diameter or temperature, often using a sensor.

The motion-step or sequencing method checks the process sequence to make sure steps are done in order.

The fixed-value or grouping and counting method counts repetitions or parts, or it weighs an item to ensure completeness.

A fourth setting function is sometimes added, information enhancement, which makes sure information is available and perceivable when and where required.

Regulatory functions are signals that an error has occurred:

Warning functions are bells, buzzers, lights, and other sensory signals. Consider using color-coding, shapes, symbols, and distinctive sounds. In software we use pop-up warning or error windows (please provide relevant user-focused errors/warnings).

Control functions prevent the process from proceeding until the error is corrected (if the error has already taken place) or the conditions are correct (if the inspection was a source inspection and the error has not yet occurred).

#1 Challenge / thing to overcome

As usual, people. There is a certain amount of conscious reflection needed to apply this technique. Coding on autopilot perpetuates previous mistakes.

To recap …

Poka-Yoke technique is one of the highest value techniques in lean management. It is a way of ensuring quality without actually having a quality assurance process by preventing defects in the first place.

Poka-Yoke may be implemented in any industry – including software development – and has many benefits, viz.:

Helps work get done right the first time

Over time, it makes it more and more difficult for mistakes to occur

It’s “cheap as free” as strongbad would say …

Statistical Quality Control

There are only 7 basic tools needed to implement statistical quality control (and continual improvement); but why would you want to?

You may have heard of “Total Quality Management” or “TQM.”  If you have, you may think that its day has passed.  Well, it hasn’t … reports of its demise are … exaggerated. 

After WWII and even well into the 1960s, “Made in Japan” was synonymous with “cheap junk.”  In 1950, American Dr. W. Edwards Deming went to Japan to advise them on census issues and delivered a lecture to the Union of Japanese Scientists and Engineers (JUSE) on quality control.  Dr. Joseph Juran also delivered a lecture to JUSE on planning and management’s responsibility for quality.

Japanese industry adopted their philosophies wholeheartedly and 20, or so, years later (in the 1970s) the Japanese auto and electronics industries were “suddenly” crushing their American competitors.  Point of order here … Juran and Deming had been preaching their quality message to American industry for years before taking it to Japan.  American industry at that time was not ready to hear it, but getting hammered by the Japanese woke them up.

Consider that American industry had beaten the Germans and the Japanese in part by out producing them … American industry was, in a sense, still fighting the previous war.  But the peaceful war of trade was not being won by sheer volume.  But I digress …

Kaoru Ishikawa – professor of engineering at Tokyo University & father of “quality circles” – proposed the seven basic tools of quality control.  These have become known as the “seven basic tools” or the “seven old tools.”  There are seven “new tools” as well – these are management and planning tools which I will address at a later date.

The seven “old tools” will each be presented in a future post.  They are:

  • Pareto chart or diagram
  • Histogram
  • Scatter diagram
  • Stratification (sometimes replaced)
  • Shewhart’s control chart
  • Check sheet
  • Cause-and-effect diagram (a/k/a Ishikawa or fishbone chart)
  • In lieu of Stratification often either
    • Flow Chart
    • Run Chart

A word about data: collect it.  I guess that was 2 words.  “In God we trust. All others must bring data.” — W. Edwards Deming.  Collecting data can be tedious and the process may then be difficult to sell to team members – especially those who are “coding cowboys.”  The pushback will be that they have “real work” to do.  A bit of unsolicited advice: such people should be (VIPs) very important programmers … on somebody else’s project.  Your tools should facilitate the collection of data, but if they don’t then the folks need to …

To recap, after WWII, the Japanese took the quality control lessons of Americans like Deming, Juran, and Crosby to heart and went from being exporters of cheap junk to the makers of “the best stuff” – to quote Back to the Future.  Using the 7 basic tools of quality control, they rebuilt their economy and became synonymous with quality in manufacturing.  My upcoming mini course will introduce the 7 tools: Pareto chart or diagram, histogram, scatter diagram, stratification, control chart, check sheet, fishbone diagram, and I’ll toss in flow chart and run charts to cap things off.