Lessons Learned in Software Development

Solid, timeless, and buzzword-free software development advice by Henrik Warne.

Henrik Warne's blog

Here is my list of heuristics and rules of thumb for software development that I have found useful over the years:

Programming bookshelf

Development

1. Start small, then extend. Whether creating a new system, or adding a feature to an existing system, I always start by making a very simple version with almost none of the required functionality. Then I extend the solution step by step, until it does what it is supposed to. I have never been able to plan everything out in detail from the beginning. Instead, I learn as I go along, and this newly discovered information gets used in the solution.

I like this quote from John Gall:  “A complex system that works is invariably found to have evolved from a simple system that worked.”

View original post 1,428 more words

Book: Creativity, Inc.

Problem-solving at its best. The problem at hand is how to build a sustainable creative culture:

What had drawn me to science, all those years ago, was the search for understanding. Human interaction is far more complex than relativity or string theory, of course, but that only made it more interesting and important; it constantly challenged my presumptions.

The book follows the path of Pixar, Inc. Along the way Ed Catmull (one of its founders) both reveals the core of what’s needed for few hundred people to work together to build a great product and shares a lot of tactics that either did or not work for Pixar itself.

If you work or play with groups of people of two or more, I would recommend you have a look at Creativity, Inc.

P.S. You might also want to check out Dave Martin’s 36 Things You Might Take Away From “Creativity, Inc.”

How To Read Self-Help Books

Here are my rules for successfully™ reading self-help books. Like a self-help book, those rules work for me, but they may not work for you.

  1. I am OK if 99% of the book isn’t at all helpful. Since self-help books are written to improve the most basic and important areas of our lives – health, love, family, work, time, happiness – even if I get one habit or one sentence out of the book, it might be a worthy addition to my life.
  2. I automatically disregards any even semi-unrealistic-sounding claims in the book. Just disregard, skip, forget. For example: YOU WILL LEARN (in less than 30 minutes each):How to lose those last 5-10 pounds. Or […] reveals a step-by-step pathway for living with fairness, integrity, service, and human dignity. Or Learn the six ways to make people like you, the twelve ways to win people…
  3. I ask a lot of questions to myself: Why does this technique work? For what kind of people does it work? Would it work for me? Why would it work for me? How hard would it be to try it?

Self-help books are harmful only if we believe in what they say, not if we use them as a motivation to think deeper about how we operate and why we do the things we do.

Ten Years Since My First Open-Source Contribution

Ten years ago Ryan Boren committed to the WordPress open-source project a two-line change I had suggested. I wasn’t ecstatic, but there was this warm feeling of being useful.

Screenshot of the commit message

In the next few years I regularly contributed to WordPress. Not too much, but often. What kept me around wasn’t programming itself or the hard technical challenges, but three other reasons: being useful,  the safe path to learning responsibility, and that everybody was so nice.

I contributed translations and code for the internationalization infrastructure (affectionately known as “i18n”).  Translators rarely know much about code and since a lot of the developers were from English-speaking countries they didn’t know much about encoding, unicode, or how to make texts easy to translate. I was in the lucky intersection of both and that exact place made me useful.

Our jobs often make us work hard to achieve great things together and it’s worth it. But they often fail to make us feel useful in the simplest ways. Not as a part of a big machine stomping ahead, or a part of a great team changing the world, but just as person helping another person with their problem. I helped translators with their formatting problems or developers, who had been struggling with encoding bugs for days. I wasn’t assigned to fix those problems, the fact that it was a human on the other side just felt good.

Then people started to notice. In about a year I became the maintainer of the internationalization corner of WordPress. Now I had responsibilities. But those were responsibilities with training wheels – vague and weak expectations, even vaguer schedule, all the freedom in the world, an easy way out (“I am busy at my day job” works wonders). My task was simple, but I started to understand what it’s like when people depend on you. At the time I was a junior developer at my job and there was always somebody looking over my shoulder and making sure I was making progress. It wasn’t like that with WordPress. If I wanted internationalization to be covered before a release, I had to take the initiative or it wouldn’t happen and many people would be left unhelped.

Motivation and responsibility aren’t usually part of the “contributing to open-source” conversation. And yet, that’s what I learned from my first years of working with WordPress. Most of my programming I learned elsewhere, but contributing to WordPress boosted my soft skills – I learned to write better, I learned to deal with (and ultimately help) random people on the internet, I learned to manage a project, without giving assignments, I learned to be motivated for the right reasons.

Less than three years after my first contribution, I joined Automattic. It is one of the biggest contributors to WordPress and the company behind WordPress.com. I have been working there ever since (more than seven years now), because the culture was built around the same open-source values. We strive to help people for all the right reasons.

I don’t know if you’ll be as lucky as me, but contributing to open-source projects seems worth the try.

What I am Reading Lately

Schedule regular check-ins with your direct reports, so that giving feedback — both negative and positive — becomes a normal part of the weekly routine.

Everything You Need to Know About Giving Negative Feedback by Sarah Green for HBR

Before you begin to write, do you have any pre-game rituals or practices?

Given I write several thousand words each day, there’s no room for “pre-gaming.”

The “game” IS the ritual.

Here’s How Maria Popova of Brain Pickings Writes, interview by Kelton Reid for Copyblogger

Most jobs are mediocre. Most people’s work is mediocre. Most products and experiences are mediocre. Most lives drift to mediocre. When you rise above the mediocrity, people will notice.

Thirty Things I’ve Learned by Nick Crocker

Lois wholly or partially created some of the most exceptional and memorable ads in history. For better or worse, behemoths of consumerism such as Tommy Hilfiger, Jiffy Lube, ESPN, MTV, and many others have ingrained themselves in American culture because of his indelible campaigns. The qualities that set Lois’s work apart from that of today’s advertising industry are a) his stuff was unapologetic and transparent about the fact that it was selling a product, and b) he used ideas to hawk products rather than the other way around.

Geoge Lois, interview by Rocco Castoro for Vice

What I am Reading Lately

I will try to post every month or so what I have been reading lately – books, essays, blog posts, code. Recently inspired by Om Malik’s similar column.

Yet if we look back over the last 400 years to ponder what ideas have caused the greatest changes in human society and have ushered in our modern era of democracy, science, technology and health care, it should be a bit of a shock to realize that none of these is in story form!

Powerful Ideas Need Love Too! by Alan Kay

A good programmer in these times doesn’t just write programs. A good programmer builds a working vocabulary. In other words, a good programmer does language design.

Growing a Language by Guy Steele (video on YouTube, transcript)

It turns out that the key to Apple’s creativity, speed, and adaptability is, on its surface, the exact opposite of the kind of free-wheeling creativity one might expect. It’s a checklist. A really long one.

Any company can copy the keystone of Apple’s design process (Quartz)