Friday, July 26, 2013

Three Steps to Safer Development

Eric Ries has suggestions on why/how to move your engineering practice forward and gain speed and reliability while you're at it:


So how can I help the engineering manager in pain? Here's my diagnosis of his problem:
  • He has some automated tests, but his team doesn't have a continuous integration server or practice TDD. Hence, the tests tend to go stale, or are themselves intermittent.
  • No amount of fixing is making any difference, because the fixes aren't pinned in place by tests, so they get dwarfed by the new defects being introduced with new features. It's a treadmill situation - they have to run faster and faster just to stay at the level of quality/features they're at today.
  • The team can't get permission from the business leaders to get "extra time" for fixing. This is because the are constantly telling them that features are done as soon as they can see them in the product. Because there are no tests for new features (or operational alerts for the production code), the code that supports those new features could go bad at any moment. If the business leaders were told "this feature is done, but only for an indeterminate amount of time, after which it may stop working suddenly" they would not be so eager to move on to the next new feature.

Sound familiar?

Interested?

Read The Engineering Manager's Lament 

Wednesday, July 24, 2013

Tests and Immersion in Code: The relationship

There is a relationship between how slow tests are and how much we interact with the tests while we are developing software.


  • If the tests run instantaneously, I'll run them constantly.
  • If the tests run in 30 seconds, I will run them 3 times in any 5 minute window of coding.
  • If they run in 1 minute, I will run them 3-4 times per hour.
  • If they run in 10 minutes, I will run them maybe 3 times a day.
  • If they run in an hour, I'll run them 5 times a week at most.
  • If they run for a day, I will almost never run them.


If the build/test cycle is not incredibly fast, I will not participate in the code as fully and richly, instead falling back to rely on my IQ and memory and good intentions more.

This is why tools like Infinitest for Java, sniffer for Python, autotest for ruby, and the like matter so much.

It is also why there have to be build servers and test servers for any significant project.

It is also why manual testing is not a replacement for automated testing via scripts and tools.

It is also why it is better to test below the user interface; it is too slow to stand up a live version of the application with all its services, resources, and infrastructure and test through the UI.

I am happiest and most productive when I'm interoperating fully and richly with my application environment. Waiting or batching work are practices that take me out of the environment.

Wednesday, July 10, 2013

It Can Still Be Awesome...

Let's talk about flying.

Airplanes are incredibly cool machines. Heavier-than-air, faster than cars, all thrust and lift and control and high tech. Most have massive jet engines on the wings and/or tail. They are hotrods THAT FLY.

It's cooler than that if you let yourself think about it. You're 35,000 feet in the air, moving at 500 miles per hour, looking at the tops of the clouds. THE TOPS OF THE CLOUDS!

When I was a kid, we liked to park near an airport and watch the planes take off and land. Yeah, we didn't have video games or cable back then. It was cool, and the closer you could get to the end of the airstrip, the better. At night, you could watch the lights zooming over your head and feel the thunder. It really is amazing.

So let's talk about airports.

The old grass strip airports used to be places of wonder and amazement, and plane fans would spend spare time showing up and looking around and maybe having a cup of joe with the operators or pilots. There were aviation fans and airplane geeks.

Modern airports are loaded with bars, restaurants, stores, video presentations, and often include history or art museum exhibits. Objectively, these should be considered great attractions.You would think that airports would be great places to hang out. People go there to fly! It should feel a lot like the opportunity to ride a great roller coaster or attend a concert.

As Loius C.K. says, "Everything is awesome, and nobody is happy."

Sadly, airports are islands of stress and frustration. People stand in line and follow lots of rules while voices yell at them over overly-loud intercoms (I've measured over 90 dB). Recordings constantly remind us that the people around us are probably thieves and terrorists and that the police are waiting to take our luggage away from us.

There's too many of us. We're packed too tightly on the plane. We have too little room for our stuff, our knees, or our elbows when we try to eat a micro-meal (provided our flight still includes a micro-meal). We pay fines for luggage and premium prices for coffee. Our waiting area is cramped and poorly ventilated. Our seats are crowded, and we don't have electricity where we need it. This makes our fellow passengers extra-grumpy.

Let's talk about software.

This should be the coolest thing in the world. We take ideas, and turn them into algorithms, and turn that into working code that actually does stuff. Nobody could do this sixty years ago.  Software is pure brainstuff. We turn ideas into reality. We are the music makers, and we are the dreamers of dreams.

By all rights, this job should be full of wonder, joy, simplicity, and clarity. We should come in excited and leave exhausted and happy. We are doing something amazing. Girls and boys should be dreaming about someday doing this job.

But let's talk about software dystopia.

Corporate cube farms are full of people. Their space is too small and lit by low-bandwidth florescent lighting. Most of them don't have (aren't allowed to have) windows. Some aren't allowed plants, or pictures of family members.

They feel they are being pressured to do more than they know how to do, in impossibly tight schedules.  They are pressured to not spend time learning and growing as professionals or individuals. They're told to do as they're told. They're starved of information they need to make good decisions, and they are criticized or even penalized for making bad ones.

Sure this is serious work, but by serious we mean "important and consequential" not "somber." We don't have to be unhappy to do important things. At some point, it should feel awesome.

Official communication is muddy and obscured by political phrasing and they don't have clarity. They are matrix-managed and constantly interrupted. They don't have the simplicity of a single voice to listen to, and the voices they hear are contradictory and unclear.

Inside of all this dystopia a simple, clear, joyful system is straining to get out.

How did we get here?

How do we get back?