Software as a Sitcom

Software development analogies are sometimes fun and potentially revealing. With that being said, I wanted to throw out a small nugget I thought of.

Growing up, I watched a fair amount of sitcoms until I realized the basic plot device. Essentially, something happens where a character on the show makes a choice, is worried about the ramifications of that choice, and is then somehow deceptive. They keep having larger and larger miscommunications and problems as the show goes on, and more problems (and hence hilarity), ensue due to keeping the problems under wraps. Eventually the characters realize the mistake, and the show ends with everyone having learned a valuable lesson.

  • Note: I am not affiliated with any of the sitcoms mentioned below, nor do they support me financially. :)

Full House

At some point, I got pissed because I just thought “Why doesn’t Stephanie just tell Danny Tanner that she wrecked the car instead of trying to hide it for like two more days? I’m pretty sure Danny’s going to flip out and kick Comet and ground you, but at least you get it out in the open. There’s definitely nothing to be gained from hiding it. Why would any rational person do this?”

Anyway, this process happens all the time on sitcoms. But the question that I thought of was: does it happen on software projects?

I suppose that part of this is a human tendency to attempt to delay pain whenever possible. You take a known undesirable and put it out into the future where it may or may not happen. Seems like a good thing, right? Maybe I can fix up the car with my piggy bank and Uncle Jessie’s spare tools, or maybe dad won’t notice the car being missing. Maybe I won’t be working on the project anymore. Maybe we can add a couple of people, that seemed to work for another project that was having similar problems. And maybe we can make it up. Maybe we can pull a few late nights or work some Saturdays to get this project back on track, or maybe we can just cut some corners here and there and fix them later when we have more time.

Unfortunately, by delaying communication, you lose a chance to align expectations early. There is a mental shift cost incurred when a stakeholder doesn’t quite know what is going on. The earlier that you can provide this information, the more time the person involved gets to stew on the information and try to come up with alternate satisfactory solutions or at least understand what is going on. In this sense, having transparency is key. No one likes to come to the end of a project that they thought was going well but see that things have gone amiss.

Unfortunately, in the real software world, hilarity rarely ensues from not communicating the true status of a project. More often money is lost and quality suffers due to a compressed schedule based on unrealistic expectations. People don’t get grounded, they get “let go”.

Home Improvement

Tim “The Toolman” Taylor always took a break around the twenty-minute mark of the show Home Improvement to talk to his neighbor Wilson across the fence about the problems he was facing during that episode. Tim would explain the situation, and Wilson would give him some sage advice that made a lot of sense to Tim. Tim would go back into the house armed with his somewhat rudimentary version of the wisdom that Wilson imparted, and things would get patched up.

It seems like Tim would have benefited from doing retrospectives before the twenty-minute mark (or, as sometimes happens in the software world, after the show, or maybe in the break room.) Maybe looking at the process and decisions made at five minute intervals throughout the episode would have helped to get at the root of the problem before it got worse. By the time that he got to the twenty minute mark, there was like one commercial break and five minutes of show left to resolve the underlying problems that were plaguing his family. They could have taken a kaizen approach to their family relations to lessen the chances that 2/3 of the way through the show the communication process was producing unsatisfactory results. I wonder how Tim’s experience with power tools and the search for ever more powerful tools mirrors some developers’ tendencies.

What this post hopefully stresses is communication of project status and expectations and evaluation of the development process. Do you have a sitcom example of your own?

Open Source Tech Writer

A majority of open source projects have a paucity of documentation. However, they still have value as a working system. I argue that improving the documentation of a codebase intended for general use is one of the highest value activities that a developer can do. Although documentation may not be directly contributing to the codebase, the writer provides a valuable service by understanding the code and imparting that knowledge to others.

I would go so far as to say that there should be open source technical writers. They look for interesting projects to write basic documentation for. While there are a smattering of tutorials for certain frameworks, they are not condensed, are not authoritative, and are often misleading because of changes to the framework or convoluted examples. When the core developers move at the speed of the forum or even IRC, it’s tough for a new person to have anywhere near that amount of knowledge. A centralized wiki with pertinent and up-to-date examples is quite useful.

If you are not yet a badass developer, this kind of project aids you in three ways. First, you gain experience looking at unfamiliar code bases and reasoning about them. This is especially helpful if you maintain code, and also assists you in writing more maintainable code. Second, you get some street cred for being closely involved with the developers on the project and working with them. You’re likely to learn something from the alpha geeks and advance your skills. Third, your writing skills improve, which helps you out in many areas over the long run.

In a nutshell, the kind of people who are building their own system or framework are generally not obsessed with documenting for average people. This could be due to time constraints or general personality traits. But the value that they create is wasted if people are not comfortable interacting with it.

Clojure

There is an interesting thread on the Clojure discussion group about making examples readable and general ways to help developers who are new to the language and want to code idiomatically. One post mentioned the Clojure page on concurrency. If you can read through the example code there and want to tackle concurrency (which is supposed to be a strength of Clojure), then I applaud you. This isn’t a knock against Clojure, it’s just so new that most everyone who’s interested has been playing around with it and trying to understand it better.

One of the most important points in the post is that to get a community rallied around a language or framework, it’s necessary to have good documentation so people aren’t put off by it. The Clojure folks are getting there, as there are a couple of wikis around that people dump stuff into.

qooxdoo

The qooxdoo framework illustrates one of my favorite examples of excellent open source documentation. When I first started looking at it, I was impressed by the amount of examples, pictures, screenshots that were included. The manual is rife with examples and code snippets.

They have a huge demo area that shows how simple effects can be created using at it. Looking at these demos, I started visualizing about how exciting it would be to work with this framework. As another great demo, it has an API documentation viewer, which itself is written with qooxdoo. It must have taken time to generate all of this…

Parting thoughts

On the other hand, one could argue that with a nascent open-source product, having too many people involved early is problematic for direction and quality density. Also, the people who create code which uses the product will constantly have to change their code because the underlying architecture or best practices change. It’s the bleeding part of the bleeding edge.

I’m not saying that I’m committing to doing any of this… :) Just thought that this was an interesting line of thinking.

Justification for reading?

I think I just formalized why I like reading.

A six month project expects approximately

6 months * 4 weeks / month * 40 hours / week = 960 hours.

If you read material pertaining to your project that takes five hours at the beginning of your project, you only need to save 12.5 minutes per week to justify reading it. That’s maybe two or three google searches for trivial topics or a pretty in-depth search if you’re not sure what you’re looking for. I think that the time invested pays for itself pretty quickly.

But what’s more, you learn solutions that are even better than the ones that you might have come up with otherwise because your learning is condensed and you are seeing best practices and rationale.

Review: How to Win Friends And Influence People

Title: How to Win Friends and Influence People Authors: Dale Carnegie Published: 1990 Length: 304 pages

Of the books that I have read recently, this one seemed to be a contentious one. I discussed this book with a friend who is in sales, and we came to completely different conclusions on the book’s premise. His idea was that the book contained a bunch of ways to manipulate people to get what you want, whereas I felt like the book provided methods to better understand, empathize, and work with people.

Throughout, Carnegie displays quite a bit of humor and wit, and gives memorable anecdotes to drive the points he makes home. Some things are trite on the outside, but they are quite useful once internalized. Here are some of the major points.

Carnegie starts out by talking about why he wrote this book. He had been searching for “a practical, working handbook on human relations,” but could not find anything. So he looked through history and tried to figure out how influential people in the past worked with the people in their lives, and wrote this book. Carnegie talks about research done that showed that “even in such technical lines as engineering, about 15 percent of one’s financial success is due to one’s technical knowledge and about 85 percent is due to skill in human engineering – to personality and the ability to lead people.” I thought this was interesting, and personally agreed.

The most important theme that Carnegie emphasizes is that no one thinks that they are wrong. Everyone, even a criminal, acts rationally based on his or her world model. Hence, criticizing people or arguing with them will only serve to harden their resolve and make them less likely to want to be around you. Seek to understand and empathize, and you can see where they are coming from.

The only way to get someone to change their ways or do something you want them to do is to have them want to do it. Giving honest and sincere appreciation and being “hearty in your praise and lavish in your approbation” are two great ways to show someone that you do like what they are doing. However, people have a great skill in seeing through baloney, so the praise you give must truly come from the heart.

Carnegie asserts that you must never complain. No one likes a complainer. He states that there is no better way to ruin a marriage than to constantly nag your partner. I can’t speak from experience, but that seems correct.

Avoid arguments and telling people they are wrong. If you must, do it constructively and explain how you have made the same mistake in the past and that it should be easy to correct. Good people aren’t going to mess things up on purpose. Sometimes it’s just a misunderstanding, and you should be quick to point out when you are or were wrong. If you are to point out shortcomings, call attention to people’s mistakes indirectly and in a private venue.

When someone has complaints, let them vent until they have nothing left to vent about. Show them that you care about their concerns and let them know what you are going to change to fix those concerns.

My friend in sales was somewhat right. There is importance in being able to sell, and this book can help do it well. Although you may not be in sales in the conventional sense, every day you are selling your ideas and opinions. Those who have good ideas and present them well are more respected, those that can’t fall by the wayside. You want to win people over to your ideas, and this book gives concrete ways of doing this.

How Shall I Choose?

In a comment on my last post, Matt asked several exceedingly thought-provoking questions. I was going to respond there, but I had too many thoughts for a single comment. I had to take off my hat because I was getting too warm while thinking about this…

Ah, but what to pick, Mr. Panozzo? The road less taken? The thing that you love? The thing that really could work? The thing you can make a living at? The thing you’re rather disinclined toward but you’re good at and know will have the greatest impact?

Knowing you can pick a couple, sure, but you yourself admitted to 500 possibilities. Maybe one of each, or something that answers more than one question?

What’d you pick?

These deeply resonated with me, as I have thought along similar lines. As an example, in October in some personal notes I wrote the question “What is the highest good man can accomplish?” It seems like some of the questions were along these lines, asking what is the best or highest thing that one can aim for. Can you make the best impact doing something that you are especially predisposed to do, or something that you really just want to do?

As far as “what’d you pick”, I’m not sure if this should expand to “what would you pick” or “what did you pick.” Either way, haven’t quite gotten there yet. :) I’m still exploring these questions myself. With that said, I don’t have answers, but here are some thoughts.

Viewing the questions and possible answers through the lens of existentialism applies almost perfectly here. There is the knowledge that you have limited time and that ideas cannot be implemented without using some of it. There is uncertainty in the value of a decision. What will it will be worth to you, and what will it be worth to other people? What are your weights for these values? There is angst because you realize that you are absolutely free to choose.

Glancing through the Wikipedia article on existentialism, I saw this quote by Kierkegaard, who is generally considered the father of that branch of philosophy. He is a religious existentialist, so you can read it through that filter. In an early writing to another thinker, he writes:

What I really lack is to be clear in my mind what I am to do, not what I am to know, except in so far as a certain knowledge must precede every action. The thing is to understand myself, to see what God really wishes me to do: the thing is to find a truth which is true for me, to find the idea for which I can live and die. … I certainly do not deny that I still recognize an imperative of knowledge and that through it one can work upon men, but it must be taken up into my life, and that is what I now recognize as the most important thing.

I see this as an extremely pertinent comment. Essentially he is saying that he can have knowledge of anything that he desires, but the real challenge is to ascertain is the highest value, ideal, or idea that he can live for. It’s not what he wants to know, but rather what he wants to do with his life. If he knew what to do, he could quite easily figure out what he needed to know to do this. However, only by knowing himself can he know how to live, and only by living can he know himself. Hence the paradox, as I see it. He says that whatever he recognizes as true knowledge must be taken up into his life, which is to say that he must live it.

I came across this gem about existential thoughts. I highly recommend reading the whole thing. Several things that I have previously thought about were contained in it. It’s pretty short and understandable, but one thing that really home with me were the following paragraphs:

When gifted children try to share [existential] concerns with others, they are usually met with reactions ranging from puzzlement to hostility. They discover that others, particularly of their age, clearly do not share these concerns, but instead are focused on more concrete issues and on fitting in with others’ expectations. Often by even first grade, these youngsters, particularly the more highly gifted ones, feel isolated from their peers and perhaps from their families as they find that others are not prepared to discuss such weighty concerns.

When their intensity is combined with multi-potentiality, these youngsters become particularly frustrated with the existential limitations of space and time. There simply aren’t enough hours in the day to develop all of the talents that many of these children have. Making choices among the possibilities is indeed arbitrary; there is no “ultimately right” choice. Even choosing a vocation can be difficult if one is trying to make a career decision between essentially equal passion, talents and potential in violin, neurology, theoretical mathematics and international relations.

Generalizations

It seems like picking “something that answers more than one question” is probably the best choice. There is a continuum here, that anything that you do will satisfy some of the criteria for perceived happiness, but nothing is right or wrong. I think that understanding and leveraging your strengths is a good rough compass of how you can make the highest impact. Your happiness mostly comes from your expectations after your basic needs are met. Maslow suggests that humans need many things to reach highest potential, so ignoring any of the needs is likely to result in suboptimal performance. You might have a noble mission, but if you can’t eat, you won’t be at peak performance.

It seems to me that the highest potential for doing something great comes when you are fully engaged in a pretty challenging activity that has actual meaning, and one especially that you connect with at a deeper level. Flow.

I suppose things depend quite a bit on your priorities or preferences. If you value stability or are risk-averse, a steady job is something that is probably important to you. If you value spontaneity or risk taking, perhaps being a freelancer or entrepreneur is a better fit. Some of the questions are somewhat or exclusively orthogonal. It’s pretty tough to make an impact like Gandhi and hold a steady job. Perhaps your greatest impact on others is your ability to have a wonderful family life, to come up with a new scientific theory, to run a business, or to travel the world and report your findings. Maybe you can do all of these. People certainly differ in abilities, interests, and energy levels.

At some point, you should make a decision. The original intent of the previous article (or at least as it can be applied now) was to say that not making a decision is still making a decision. It is a decision, whether conscious or not, to do nothing or take no action, or take action with something else. Sometimes this is a good decision. Sometimes you will regret it. But you won’t find out what you can do until you try.

There are certainly escape clauses. You can start doing something and realize that it’s already been done sufficiently, or you’re really not learning anything, or it’s really not as neat as you originally thought. I think there’s an analogy that’s apt. A man spends his whole life climbing a ladder and then realizes it’s leaning against the wrong building. If you keep your head down and work hard, you might be going in the wrong direction. I think this is where introspection is key.

Thanks for the comment. I greatly enjoyed reading it and responding. Still don’t have the answers, but thought this was interesting. Note that some of this is written to myself a couple of years ago. :)