11/1/15

Agile Open Northwest 2015

Agile Open Northwest 2015 (AONW) was held in Portland last February.  It's an Open Space conference, which means the agenda and discussion are self-organized by the attendees.  It's an interesting process, and if you have the opportunity to attend an Open Space conference I suggest you try it out.

Registration for the 2016 conference in Seattle is about to open, which made me realize I had not yet posted my sketchnotes from 2015.  Click on an image to see the larger version.

Mob Programming - The Coding Kata - hosted by Chris (?). During this talk we practiced mob programming, which is where one person runs the keyboard, and a separate person (or even the whole team) directs writing the code.  The practice is meant to exercise both the muscle-memory of writing code (keyboard) and the analytical skills required to explain the code to someone else (the director).  Using unit tests, iterative enhancements, and good coding hygiene, both the director and the keyboarder share their skills and knowledge. Then they swap places.  Reference: mobprogramming.org.

Pushing Practice to Proficiency was organized by Matt Plavcan from Intel. Similar to mob programming, his talk was organized around inoculating the team with the culture of lean engineering, and then using this to infect surrounding teams. The end result is a more proficient company.

No Estimates, led by Woody Zuill, discussed better ways of delivering the desired functionality within a given time. 

A group of people discussed Combating Technical Debt: What's acceptable, how to manage it, how to mitigate it.  The phrase Technical Debt was first coined by Martin Fowler.

During the Backlog Grooming session people shared their tips for effectively and efficiently managing the project backlog.  This is something I definitely need to revisit from time-to-time.

Arlo Belshee lead at least two sessions.  The first session, Microskills & Key Mindshifts, listed his top mental models for taking coding and project outcomes to the next level -- and then he listed the levels.  Some key points included refactoring, metrics, agile experiments, and cultivation of corporate culture.  

Arlo also presented his thoughts on refactoring legacy code.  Much of what he began to describe at AONW has be elaborated in his blog posts "Naming is a process, not a single step."  He also included mob programming in his demonstration of refactoring.

Agile Practices for Support and Maintenance organized by Shirley Hewitt raised some good ideas for managing maintenance development.  I liked the idea of creating swim lanes to provide visibility on technical debt maintenance or items that are broken in production.


PNSQC 2015 - Day 2

Here are my sketchnotes for the second day of the Pacific Northwest Software Quality Conference 2015 held in Portland, Oregon.  Click on an image to see the larger version.

Ken Pugh, author of "Prefactoring, Interface-Oriented Design,"  spoke about effectively communicating using acceptance tests.  His talk outlined how the triad (developer, product owner, QA) work together to write acceptance tests that become the specs for unit tests, code, and automated regression tests.  This talk was accompanied by a hands-on workshop the following day.

Wayne Roseberry from Microsoft posed some interesting question: Microsoft has a lot of data regarding automated crash reports.  Can this data be used to identify which have already been reported?  Can it help identify areas of code that need refactoring, or have high bug results?  He developed a system using the Microsoft Azure Machine Learning engine to process the bug reports.

Keeping with the theme of the conference, Ron Thompson used the metaphor of how the product owner influences the resulting system in the same way a particular strain of yeast might affect brewing beer. 


Lucy Chang from Intuit gave an amazing technical talk about using Amazon web services with Wiremock to inject stubs and proxies into a distributed system. 

Click here to see the notes for Day 1 of the conference.

PNSQC 2015 - Day 1

The theme of the 2015 Pacific NW Software Quality Conference (PNSQC) was "Brewing Quality Software." That theme alludes to Portland's notoriety for great beer and coffee (and tea), but also ties in the focus on quality software in the Silicon Forest and beyond.

Last year I learned about developing functional unit tests, and this year I hoped to learn more about writing acceptance tests, and feeding these into unit tests.  I was also looking for tips on integrating unit testing in Continuous Integration (CI) environments.

Last year I tried sketchnotes for the first time. This year I focused on simplifying the notes.  I skipped trying to draw the speaker, except in simple cartoon form. I also found that a lot of my notes were simply transcriptions, so I focused on grabbing images from the talks and putting these into the notes. Sometimes these were actual images from the presentation, but more often they were metaphors or images used while speaking.

All these sketchnotes were done live. As a result, I often had to process and understand the section before I could make a note. I think this helped me get a better understanding of what I understood, and what I didn't really grasp.

My tools were my iPad, an app called Paper by 53, and a Musemee Notier Stylus. Click on the images to see a larger version.



Casey Rosenthal from Netflix presented his talk on Chaos Engineering. The basic premise is that future (and current) distributed systems will be so complex that system architects and development engineers will be ineffective without the help of other systems.  Chaos engineering will help build confidence in these systems by providing "turbulence in production," and creating new ways to visualize the systems.

Julie Green from Con-Way Enterprises talked about using pre-mortems as a way to elicit risks in the project.  She says "A Pre-Mortem meeting creates a safe environment where the sole purpose is to predict failure. Instead of a gripe session, the Pre-Mortem is structured so that attendees are asked for a few areas where they think issues will occur...Using the Pre-Mortem strategy you can stop these failures from occurring."


Dwayne Thomas and Kevin Swallow from Crowd Compass presented a session on using coding clubs at work to improve the understand between development and QA.  

Bhushan Gupta raised everyone's awareness on the need for secure web applications in his talk.  Some key points were the owasp.org list of threats, and the NIST800-30 Threat Modeling Risk Assessment. 

Click here to continue to Day 2 of PNSQC 2015.

9/17/15

Tillicum vs Tilikum

Tilikum Crossing opened last week (09/12/15). It was the first new bridge built across the Willamette in the Portland area since 1973, and also the only bridge in the U.S. which isn't for cars, but carries light rail trains, buses, streetcars, bicyclists and pedestrians.

Despite all the hoopla, I was surprised when I walked across it. The bridge name is Tilikum. Until I saw it spelled out, I had been thinking "Tillicum." I wondered why, and did it matter how it was spelled?

Tillicum is a Chinook jargon word that was used with various meaning for a century or more. Chinook Jargon was a trade language based on Chinook, the language spoken by the natives who inhabited what is now the Washington and Oregon coast. The language was used mainly in the 19th and early 20th centuries.

According to Oregon Geographic Names
by McArthur & McArthur, Tilikum in "early Chinook referred to people or tribe or even relatives. With the passage of time the word came to mean also friendly people or even a friend. It also means friendly or agreeable, as in the case of Tillicum Creek. The older Chinook jargon word for friend, applied to persons rather than things, is siks or six."

The word may have changed over time, but did the spelling matter? Is the word simply a transliteration of the spoken sounds? In English, the difference between a single- and double-L is arbitrary, as well as the difference between K and a hard C.

With some online research, I found a free edition of a Chinook Jargon dictionary. Here are the entries that have tilikum, tilicum, or tillicum.
elip tilikum, the first people
Konaway tilicum, everybody.
Kunsih tilikum mitlite? how many people are there?
Til-i-kum. People.
Cultus tilikum, common or insignificant persons.
Huloima tilikum, strangers.
Nika tilikum, my relations.
Hul-o-i-ma.Other; another; different. Ex. Huloima tillikum, a different tribe or people;
Hy-iu. Much, many, plenty, enough.
Hyiu tillicum, a crowd; many people;
This article here mentions that the words were probably spelled phonetically, along with simplifying everything. "Grammatical forms were reduced to their simplest expression, and variations in mood and tense conveyed only by adverbs or by the context."

Tony Johnson on this site has an interesting point about how Chinook jargon, what he calls Chinook Wawa, was different from the traditional Chinook language.

Interestingly, I found that English speakers may unknowingly use some Chinook jargon, for example muckamuck.  People may call a politician or a lodge leader a "high muckamuck."  In its proper Chinook form it's "hyas muckamuck" (pronounced "high-ass" -- ha!).  Sometimes it has degraded to "high mucketymuck."  Many English speakers recognize this to mean the big boss.  In Chinook it means a "big feed" or an "important banquet."

Also, the word and concept of potlatch has been integrated into US society.  In Chinook Jargon it means a ceremony among certain tribes involving food and exchange of gifts.  We sometimes use the term to refer to a potluck dinner, or sharing personal stuff with friends. There are more examples of popular Chinook jarogon here.

Tri-met states "Tilikum is a Chinook Jargon word meaning people, tribe, or family, and the name is intended to honor the Multnomah, Cascade, Clackamas, and other Chinookan peoples who lived in the area as long as 14,000 years ago."

But it is also a way to bridge between the ages and peoples.  The Chinook Nation still exists today. People in the area will use the bridge every day.  Hopefully, this bridge will be a reminder of the people who were here before us, and the legacy that we and the people around us leave for the future.

9/11/15

Haiku: A template for error messages

I see quite a few tongue in cheek references to Haiku versions of error messages. For example:
Program aborting:
Close all that you have worked on.
You ask far too much.

Many people know that Haiku require a certain meter for the phrases: 5 / 7 / 5. In English the meter is equated with syllables, but in Japanese it's called "on" which is more the beat of the languange. In English, Haiku also have other requirements: the use of a word that lets you know the season (kigo), a cutting word that divides the poem (kireji), and often specific references to nature.

I ask people to think like a reporter when writing a software change request or a bug report. A newspaper reporter needs to cover the 5 W's: who, what, why, where, when and how. If you're writing a bug report, then act like a reporter:
  • Who got the bug?
  • What was the problem?
  • Where in the program did they get the problem?
  • When did it occur? Is it time dependent?
  • Why were they doing this and why is it a problem?
  • How can they recreate it and how did they work around it?

Another basic template is the user story in agile development: As a (who?) I want to (what?) so that I can (why?). The (why?) is usually associated with a value statement.

So, why am I writing all this? I had an idea that we need a template for error messages. With all the interest in Haiku, it would seem that software developers might catch a clue in writing better error messages. Just

What's wrong
Why it's wrong
what to do about it

8/30/15

Giant Apartments of Philip K Dick


I recently took a trip to New York City and was walking to the High Line when I was surprised to see an improbably immense apartment building.  Then I happened onto another, and another.  They were huge, each one consuming a NYC city block.  I'd never before seen anything like it, even when visiting communist countries like Czechoslovakia or East Germany.  The buildings were small mountains in the city, like something out of science fiction.  In fact, what they reminded me of most were the buildings in Philip K Dick novels.


In the movie Blade Runner, the Tyrell Corporation building is a huge pyramid in new LA, but in the book "Do androids Dream of Electric Sheep" the more shocking setting is the large empty decrepit apartment building where the fugitive androids meet John Isidore.  Most of Earth's population has emigrated off world, and only genetically damaged people like Isidore, who is a chickenhead, remain. They live in decaying apartment buildings meant for hundreds of people, now housing only a handful.  Blade Runner hints at this when it uses the Bradbury Building in LA as a stand-in for JF Sebastian's mostly empty apartment building.

Dick's early novels often had the protagonist struggling against oppressive buildings.  In "The Man Who Japed" the apartment committee is in charge of tracking moral offensives (such as missing a building committee meeting) and reporting the offenders to the government.  The hero, Purcell, subconsciously nonconforms by performing his japery, which only gets him into more trouble with the building.

The residents of the "great communal apartment building, The Abraham Lincoln" also have to deal with a heavy-handed governing committee in "The Simulacra," except in this case the committee also reviews tenant talent, and pits them against acts from other buildings in a competition weirdly reminiscent of Star Search or American Idol.  The winner of the local competition gets a chance to perform for the president of the US, "Der Alte", and first lady, the lovely Nicole.  People who don't supply talent for the competitions risk losing their apartments, and also their status as citizens.

In "The Penultimate Truth" the apartment buildings are almost a mirror of the image of the skyscrapers of the 20th century.  The elite Yance men live on large spacious estates, while most of the citizenry live in underground bunkers, ignorant of the true mechanics of their government. One of the sub-plots is the power struggle between the Yance-men and a free agent called Louis Runcible who builds apartment buildings for the occasional refugees that manage to escape to the surface.  The penultimate truth is that people have been tricked into believing that they want to live with security, at the cost of their freedom.


In "Martian Time-slip," the oppressive building is planned by the United Nations as part of Earth's colonization of the red planet. The complex will be called "AM-WEB", a contraction of the German phrase "Alle Menschen werden Brüder" (All men become brothers) from Schiller's An die Freude (Ode to Joy).

Meanwhile, Manfred Steiner is an autistic boy living on Mars. It is said that he can predict the future.  But Manfred's greatest fear is a future that only he can see.  Mars is derelict and the AM-WEB is a dumping ground for forgotten people like him, where he will eventually be confined as a decrepit old man to a bed on life-support. I've read enough PKD to believe that AM-WEB is a reference to the German concentration camp slogan "Arbeit Macht Frei" (work will set you free). But, it's unclear whether PKD means AM-WEB to be an allusion to the Nazi concentration camps, or whether it is a metaphor for the fear of schizophrenia.  The feeling of despair is there regardless.




In many of the novels the buildings are ominously present, but passive.  Two of PKD's works have buildings that play active parts in the plot.  The killer building in "A Maze of Death" first appears a tiny model, but then grows into full-sized structure which appears to the colonists on Delmak-O.  Something is written above the entry to the building, and each person each perceives the words to mean what they most hope or fear. One person sees WINERY, another reads WITCHERY, and one character interprets the word as HIPPERY HOPPERY, a place where they have people hop onto animals for “youknowhwat.”  The building has permeated both their consciousness and subconscious mind, representing their hopes and fears.

In a similar way, Heldscalla, a mystical cathedral embedded on the ocean floor of Plowman’s Planet in "The Galactic Pot-Healer" also represents hope, but it speaks to faith.  An omnipotent being, the Glimmung, gathers a group of artisans and craftsmen from Earth to help raise the sunken cathedral.  Each person has their part to play in the project, but as they proceed they learn there's a black Glimmung and a counterpart black cathedral also lurking under the sea.  The team begins to wonder whether they are working on the right side, and whether the project is even possible.  The obvious religious quandaries become even more frustrating when mixed with an unhealthy dash of Dick's paranoia.

In all these novels, the buildings are institutions: a hospital, the government, a church, a bygone way of life, a mental institution. They reek of the impassive face of authority. In all of Dick's stories he obviously preferred people over institutions.

Can we find the roots of this theme of the impassive building vs the all-too-human protagonist?  When Dick was in high school in the mid-1940s he underwent intensive psychiatric treatment for agoraphobia and other psychological troubles.  He wasn't institutionalized, but perhaps he felt a building would be a good metaphor for this combination of school and therapy, or for any authority figure.  Regardless of the source, it seems an apt image: the human against a faceless, massive, stone edifice, something that we think of as permanent.


In the end, PKD was all about humanizing his characters. Bringing a massive story such as colonizing Mars, World War III, or the corruption of the US government down to a personal level: a boy in a hospital, a man trying to find lifesaving supplies for a friend, or two guys who just want to get the jug band back together.  At that's what all good science fiction is about, taking the amazing and larger than life, and asking how does this affect me?

8/22/15

How to Achieve Flow

Have you ever been working on something that's so enthralling that when you pause for a moment you suddenly realize that hours have passed?  It may be well past lunch and you're hungry, but your work session was productive, focused and you felt good about it.  Maybe you wrote ten pages of your novel, or completed a software routine, or wrote a jingle, or just painted a picture, but while you were working, it felt effortless.
"During single-minded work time, people are ideally in a state that psychologists call flow. Flow is a condition of deep, nearly meditative involvment. In this state, there is a gentle sense of euphoria, and on is largely unaware of the passage of time."

That passage is from "Peopleware" by Tom DeMarco & Tim Lister.  The book is a thesis on what later became one of the tenets of the Agile Manifesto, that individuals and interactions are valued over processes and tools.

They discuss the benefits of flow, which are:
  • Total focus, no interruptions
  • High energy work, maximum productivity
  • Finding passion and fun in the work
  • Minimal effort to continue working
This sounds great, but the question is "How do I achieve flow?"  Here are my tips for getting to a state of flow.


Before you start, listen to your inner voice and see if the task in front of you is really what you need to work on.
  • Make a list of ten things you have to do.
  • Prioritize them by urgency and value.
  • Cross off nine of the things.
  • The remaining item is what you need to work on.
  • Throw away the list so it doesn't distract you.
Next, evaluate your task. Is this something that you can do by yourself, or do you really need more research or conversation with other people?  Be honest, but flexible. If you think you can accomplish 80% of the task alone, then go for it.  On the other hand, if you only have 20% of the knowledge, then maybe you need help.  For now, let's assume you have enough resources to accomplish most of the task.

Now that you know what you're working on, and have the right knowledge, you are ready to begin working.

Steps to achieving flow:
1. Get your butt in the chair.
If you're not in your workspace, you're not going to get any work done.

2. Make sure you're comfortable.
Adjust your chair if necessary. Make sure you're not too hot or too cold and the light isn't blinding or too dim.  Get a snack and take a bathroom break before you start.

3. Prevent interruptions.
Hide your cell phone in a drawer. Turn off notifications in your web browser and email. Put your desk phone on standby. Close the office door. Turn your chair away from the window or TV.  Put up a "Do not disturb" sign.

4. Create an audio wall.
Play some background music to reduce distractions. Choose music that you know, but it may not be your favorite. I prefer jazz without vocals.

5. Give yourself permission to work.
Set a mental tickler that says: I am now focusing.

6. Just start working, even if it's not productive.
If you fear starting, write for 5 minutes about what you think you're going to work on. This acts as both a warm-up for the real work, and also helps organize your thoughts.

7. Relax.
Don't try to hurry flow. According to "Peopleware" it will take at least 15 minutes, maybe more.  If you're going to be interrupted in the next hour, you will need to go back to step #3.

8. Focus.
Ignore the voices in your head that lead to other tasks. You've already dealt with that.

9. Let go.
Don't edit yourself. Flow is like falling asleep. You don't realize you're in the spell until it's broken. There's time to edit later.

10. Start.