The New Year Cleanup Sprint, a post-mortem

What came before

At the end of last month, I transplanted THE OCTOBER GAME to a fresh app template. For the next week, I fixed lots of niggling little bugs, did more code cleanup, then another round of tweaking artwork. I also added a graphical display of lives, progress and score to the Play screen.

The last week or so was dedicated to rebuilding the Settings, Scores and About screens.

I’d implemented quick & dirty versions before but now was time to flesh them out and get the art style up-to-date. These areas were simpler than the Play screen since they didn’t have to manage a lot of real-time animation. Even so, art had to be planned, built, processed and revised over several iterations.

A sneak peek

Next, I wanted to get a feel for the project as a whole. I’m visually-oriented so I thought I’d start out with a dependency graph of all the classes. Unfortunately the Class Model feature was removed from Xcode 4. Luckily for me, Nicolas Seriot wrote a very useful python script called objc_dep.py to generate a GraphViz file showing dependencies.

The raw graph it creates is a bit, ahem… dense.

I hand-edited it to take out most cocos2d classes and that cut the node count by half.

Muuuuch better. Yet it was still hard to get a clear picture. While the alternative graph editor yEd offers better layout controls, it doesn’t read GraphViz formats (.dot or .gv). To convert it, I found another python script called dottoxml.py by Dirk Baechle. With some jiggery-pokery in yEd, I got it looking more organized.

This helped me get a feel for the app structure. Then I was able to do some refactoring to clarify the intent of the code. I found a few loose ends. OCD says what?

Other than a memory warning, there haven’t been any real surprises in this last sprint. I’m sure writing that will, in no way, come back to haunt me.

What I learned

  • It helps to break down future tasks a day in advance.
  • Planning is a task in itself and takes a lot of mental energy.
  • My master chart helps me stay focussed on the right work and not go on tangents.

What went right

  • Held my productivity to 80% of my peak. Suck it, regression to the mean.
  • Learned to break down tasks even more finely, whenever I felt stalled.
  • Kept focus by frequently referring to my master task chart.
  • All screens are fully functional. If you put a gun to my head, I could release this month. With no music, no marketing and a few sound bugs, so no.

What went wrong

  • If I finished a task, like artwork creation, it was very hard to switch to sound editing or coding in the same day. I’m not sure how to overcome this yet.
  • Performance problems keep recurring on older hardware (iPhone 3G, I’m looking at you). I’m a hair’s breadth from dropping support for older devices entirely. A good cutoff point seems like the iOS 5 barrier. I would probably have to buy a iPod Touch 3rd-generation to test on. How I suffer for my art.

What’s next

  • Building out and play-testing levels.
  • Polishing the background art.
  • Product landing page on the web site.
Posted in Technical, Uncategorized, iDevBlogADay, process | Tagged , | Leave a comment

Jeepers Veepers

An #iSketchADay entry revisited.

Gel pen on index card. Colorized in Photoshop CS4 Extended.

Posted in Ideas, creative, sketch | Tagged | Leave a comment

Toothy little critter

Where this came from, I do not know. Better inside your head than mine.

ViaCAD Pro 7 glass render preset with tinting in Photoshop.

Posted in shiny, sketch | Tagged , , | Leave a comment

The Game Core Transplant, a sprint post-mortem

After regenerating all the art assets, it was time to move THE OCTOBER GAME core to a fresh app template. The game architecture had changed over the months, leaving the project with lots of cruft. Classes had unused methods, or had been superseded. Many, many obsolete variations of artwork and sounds were cluttering up the Resources folder. The AppDelegate had accumulated tons of helper functions…you get the idea.

By moving into a new Xcode project I could consolidate and toss old stuff without taking the risk of breaking the app. Getting your game into an unusable state is really terrible for morale, even temporarily. I didn’t have any experience with source control until recently, so all my exploratory development was done manually, like an animal. For instance, I’d rebuilt the audio and multitasking managers in a separate app to isolate them. Now they were tested and ready for re-integration.

This was also a chance to try out new ideas on how to be more productive. By keeping a daily running average and doing my coding earlier in the day, I essentially doubled my productivity compared to last month. I also did more fine-grained time estimation, but that was less effective. Most subtasks took twice as many steps as I predicted beforehand. Improving that is an ongoing project.

The master progress chart I started this summer is finally shrinking instead of growing. Here’s what I just got done with:

And the remaining work (as far as I can predict). The real story is in the end nodes.

Progress!

Posted in Technical, Uncategorized, iDevBlogADay, process | Tagged , , | Leave a comment

Rabbit

Since it has short ears and no dark markings, I guess it’s a rabbit, not a hare.

from reference

Posted in sketch | Leave a comment

Hot Coils

Cool! An article using one of my Creative Commons pictures.

How to Calculate the Surface Area of a Coil.

This is exactly why I allow some of my art to be used. Here’s the image link on flickr.

Hot Coils

The source is an circle extruded along a NURBS path in Maya, the shader is Blinn with a ribbed diffuse and bump map, plus a chrome environment map. I set the camera to a wide angle for the extreme perspective effect and used the depth of field setting. I brought the rendering into Photoshop and hit the center with a color mapping layer set to a blackbody palette. It was an experiment to recreate the Organic Steel look of the X-Man, Colossus.

Posted in Uncategorized | Tagged , | Leave a comment

Roosting bird

I indulged myself by getting a new art pad and some pens.

It’s certainly easier to pull an autotrace line from a clean original.

Even with a handheld iPhone. Still need to work larger than my habitual 2 inches across. Bad habit.

Posted in Ideas, process | Tagged , | Leave a comment

A bird’s nest

  • has a bowl shape
  • has thick walls
  • is made of many short, straight sticks tangled together

To really sell it, throw in some eggs.

Posted in creative, process | Tagged , | 1 Comment

Game Art Regeneration Sprint: a mini post-mortem

At the end of October I started on a sprint to regenerate and rework all the game artwork.

Partly to upgrade to Retina resolution and partly to match the character art more closely to the user interface style. Less retro pixels & more children’s book illustration.

I estimated about 100 items of work that would take a week if I did 12 items a day. It took nearly 5 weeks. Doh!

What went wrong?

Disorganized source files. My asset organization system was a mess. I’d started out with neat nested folders but as the game evolved, the original categories made less and less sense. If I needed to do some exploratory art development, I’d put the files in a temporary location, then pull some of those into the game as a concept gelled. Some art needed extensive batch processing steps, like rendered animations. There were photos, scans, Illustrator paths, 3D files in several formats, render files and presets. Even so, it just got worse over the months and I knew I’d eventually have to overhaul the whole system. Eventually became now. Luckily I’m a digital packrat and rarely delete intermediate files.

Rusty illustration skills. What can I say, all the money I’m living on while I write THE OCTOBER GAME came from digital retouching, graphic design and 3d rendering. Yet I’ve let my hand-drawing skills deteriorate in a quite shameful fashion. It took many, many hours of painful scribblings before I got something I could live with on screen. I forgot how long it took to warm up the drawing muscles. I also forgot that if you’re not working from reference, you’re wasting time.

Work-like activity. In an attempt to stave off burnout, I sometimes took a few hours to practice UI design, prototyping and programming with little side-projects. It might be a game mechanic or maybe implementing a particle system. The things I learned weren’t a waste of time per se but I could only stand to be on the computer for so long each day and these projects burned up that time. These activities feel like work but they shouldn’t displace work. I’ve resolved to do game tasks before any other kind, going forward.

Low overall efficiency. Besides getting 60% as much done as I would predict, I typically underestimated complex tasks by 4X! The result? An exhausting number of things to do and a demoralizingly long list that grew over time instead of shrank.

What went right?

Getting better at planning. I’ve made great strides with the maxim “Measure twice, cut once” and “Third time’s the charm”. Before writing code, I write the problem down and I come up with at least three ideas. I break the work down until I can clearly visualize each step, then I try to predict how long it’ll take. I’m getting better at it each month.

Logging everything. You can’t improve what you can’t measure. Each and every day since July 6th, 2010 I move the cursor down to a line that reads “eliolhan work done – “. If I’ve moved my business forward, I put the information there. If not, I type “none” and I resolve to do better the next day.

Increased software writing skills. The code I’m producing now is significantly shorter, faster and has fewer bugs than work I did six months ago. Bug fixing now takes hours where it used to take days. I don’t throw away all that old code, though. I refactor and rework it.

What I learned?

Clearly I have to plan better, estimate better and work smarter. I’ve started by tracking efficiency on a daily, rather than monthly basis. I’m also tracking more fine-grained time estimates to build up a better baseline for later analysis. In the last ten days I’ve done as much work as the previous month, by keeping a closer eye on how I spend my time in front of the computer. We’ll see if it’s sustainable.

Next steps

I’m currently extracting the core classes in the game and placing them in a fresh app template. Along the way I’m doing some cleaning up and lots of bug fixing of older code.

Posted in creative, iDevBlogADay, process | Tagged , | Leave a comment

Work blocks: Their causes and remedies

I listen to the Merlin Mann podcast Back To Work. One topic was Getting Unstuck (time 1:18:00 to 1:20:15). I recognized some areas where I’ve made progress. Let me show you them.

Too many options

I list options on paper to take them out of my head. Then I quickly prioritize them. After about an hour, I review the list and pick an item to work on.

Expectations are too high

I have to remind myself that I’m nowhere close to being an expert after only two years of coding. I give myself permission for a crappy first draft, knowing I’ll do at least two more passes to polish the work.

Can’t see the core or the real story behind the work

I make a quick mind map to find nodes with high connectivity. That quick brain-dump is usually enough for me to re-focus.

Can’t trust your own motives

I list the first five project justifications that come to mind. Then I list some more. This lets me drill down past my surface thoughts to the underlying motive. I’ll take a look at my Core Values statement and compare them. I’ve learned the hard way that a subconscious, unexamined conflict is an endless source of self-sabotaging behavior. You can’t exert your full effort if the work isn’t compatible with your values.

Afraid of mistakes

The road to confidence and expertise is paved with mistakes. I record mine to document my flawed thinking process for later review. I also use them as fodder for blog posts. Hopefully, it’ll help someone improve their own processes. In this way, I extract value even from my errors. There’s no avoiding mistakes, so you might as well make them pay rent.

Afraid you lack some needed skill

It’s impossible to know what hidden talents you may have. Time and again, tasks I thought would be difficult turn out to be easy. While I don’t expect this to happen every time, I have less anxiety about it than I used to. It never hurts to dedicate a single whole day to trying something new. If you’re lucky, you’ll discover a hidden aptitude. Or you might be able to generate a useful approximation on the fly. Or you might find a weak area that can be shored up by a short course of study. Or you find an area of permanent incompetence that has to be routed around by outsourcing or avoidance. In any case, you can’t predict the nature of these unknowns in advance, so just try first.

Take it easier on yourself

Pathological Perfectionism is Private Pride. Deep down you think you’re like the protagonist in stories. Born with a destiny. Hidden superpowers. Unlocked after the first exposure to the Grand Challenge. This is especially true if you were recognized as a gifted child. It turns out you can substitute a Destiny for Greatness with stubborn, obsessive, sacrificial, relentless, aggressive, perceptive, repetitive, bare-knuckled, savagely-controlled effort. Did I say take it easy on yourself? I meant, get over yourself.

Now get back to work.

Posted in iDevBlogADay, philosophy, process, rants | Tagged , , , , , , | 2 Comments