Field Notes

How do you think about implementation?

November 18, 2014 | In 30 days / teaching

One of the differences between beginners and experts is that experts skip steps. Global Day of Code Retreat reminded me of this when pairing with newer programmers. Our discussion was more about why. More experienced pairs talked about how.

I've thought hard about how one gets from the shallow end of language syntax to the deep end of designing programs. There's a big gap between the beginner tutorial and writing your own projects. I don't know how to lay out that path for beginners. I may be able to spot my shortcuts if I write it out.

To start capturing the process, I jotted these notes as I read through a spec for an upcoming project. This is a first attempt to see, and several iterations from being a prescriptive process.

The vision thing. I read the whole spec once to get the big picture. I notice recurring ideas but don't try to capture them yet.

Once more, with feeling. The second read-through is more detailed.

Groundhog day: Recurring ideas and elements. Some might be graphical: a page structure, a navigation icon. Others are ideas or domain terms.

Plus ├ža change: which elements are dynamic, and which are static? Does the game change depending on your past actions, or do users always take the same path?

Data in, data out. What data does it need and where does it come from? What does the game need to save and report? What other questions will we want to ask about players, for monitoring that the site is up and for business reporting?

Braaaains! Calculations and decisions. Are the formulas straightforward? Will it need extra information, or can it decide from what it knows?

When I nod my head, you hit it. User interactions and animations.

As you like it: What's configurable? Where do settings live?

With great power comes great responsibility. Does everyone have the same permissions, or are there different roles?

It's all fun and games until somebody loses an eye. I look for trouble. Is there magical hand waving where it's not clear how to get from A to B? Are there missing graphics or other chunks of work that should have been specified? Are there risky bits I should follow up on?

It's early to think about implementation details, but not premature. There's a steady subconscious back and forth about implementation details. That thread is a combination of constraints, technology choices, and experience in implementing and living with code choices on similar projects.

I'll have to capture a few more design sessions and deduce the similarities.