Engineering An Update – Part One

I’m finally back doing iDevBlogADay after many months away. This post is the first in a two part series about my struggles and successes while creating the new Trainyard ”Engineer Update”.

A promise

Never promise anything. Seriously. Ok, well at least never promise anything if you’re a game developer, no matter how tempting it is, and no matter how much you think you’re going to be able to deliver it.

So here’s what happened: Back in December I was wrapping up my old job, and I was super excited about finally starting to work for myself as an independent game developer. I was thinking “oh, I’ll get so much work done now that I’m working full-time”.

So I did something silly; I put out a Trainyard update with a video message that was seen by around 80,000 players, and in that video I promised that a massive new Trainyard update with a puzzle editor would be coming in the first couple months of 2011. Whoops.

Dread and fear

January came and for a few weeks I got caught up in a bunch of company-forming stuff, but I eventually started thinking about the Trainyard update. When I began to figure out the logistics of it, it quickly dawned on me just how much work it was going to be. And then I did what most people do when they’re faced with a daunting task: I procrastinated. A lot.

I worked on all kinds of other projects, including a Playbook app, a multiplayer HTML5 Tetris game, and a music generation toy, as well as a ton of game prototypes. The one thing I didn’t do was actually work on the update.

In late March I wrote a post about what I’d been up to for the past four months, where I said I was hard at work on the Trainyard update, although in reality, I hadn’t even started. Time and distractions kept dragging on. In fact, it would take a few more months, until June, when I would finally, actually, for real, start working on the update.


What was holding me back? Aside from being overwhelmed, there were a few tough choices that every other new feature hinged on. One of the biggest decisions was whether I was going to rewrite the backend code from scratch on “the cloud”, or just retrofit my current backend code. Among other problems, I also had to decide how to integrate Game Center achievements with my current dual-user system, and how to squeeze Engineer mode into the rest of the game.

Along with the technical decisions, I had to make numerous choices about the design and user experience of the new content. There were over a dozen new screen types to add to the game, each with its own special caveats and issues.


It’s worth taking a second to talk about the scope of this update: I bit off way more than I should have been chewing. Note my wording: just because you can do it, doesn’t mean you should. If you learn nothing else from this post, you should at least learn to keep your updates small and quick.

I decided that with this update, I’d add all of the little things I felt were missing from the game, including a news feed, mailing list signup form, “tips and tricks” video list, tutorial list, and more. I created a section called “goodies” to hold all of them.

There were a few times when I seriously considered releasing a web-based puzzle editor. It would have been way simpler, and it would have still accomplished my goal of allowing people to make their own puzzles. It also would have literally saved me two months of work. I just couldn’t do it though. I knew it’d be a second-rate solution, and I didn’t want to cut corners.

Buckling down

Ok, so how did I eventually get focused? At the end of May I went on a vacation, and when I returned, I was determined to get down to business. I created a carefully structured schedule that I forced myself to follow every single day. I gave myself rules and stuck to them. I won’t go over my new focusing methods here because I’m planning to write a post about them soon, but they worked like a charm, and I spent the next three months working on Trainyard for over 8 hours every day.

The results

I was originally planning to write all about what’s actually in the update, but this post is already way too long so I’ll save that for part two (coming in the next couple days).

For now, let me just leave you with this: I’m really, really happy with how the update turned out, and I’m proud to have created it… However, there are zero good business reasons for making an update this large. If I’m lucky, it’ll give Trainyard a temporary boost in sales, but even then it’ll quickly drop back down to where it was before. If I knew just how long this update would take to make, there’s no way I would have done it. Let me be even more clear: I hated working on this update; it was a bad idea.

What’s the moral of the story? Never promise anything.

This entry was posted in App Store, iDevBlogADay, iOS Development, Trainyard, Workflow. Bookmark the permalink.

28 Responses to Engineering An Update – Part One

  1. It sucks to work on something without even faint joy. The good thing is, you got it done and you’ve learned that you are mentally strong enough to push through. Someday it may turn out to be quite a handy lesson :)

    • Matt says:

      Yep. So here’s the thing: I hated the project overall, but I still enjoyed seeing my code and designs come to life, like on any programming project.

      I spent about 5 years doing interactive work in the advertising industry, and it’s pretty much the same thing: working on worthless, pointless projects that you absolutely hate, and yet you still get some joy along the way in the actual creation of it.

  2. Kyle says:

    Good advice. If you didnt enjoy the update and it wasn’t a good business decision, why not pull the plug and save three months of your life? I’m sure people would understand that you have to run a business and make the best decision for you.

    • Matt says:

      Yeah that’s a good point because I knew that it really didn’t make sense to do by the time I actually started working on, although it was a little trickier than that. At the start of the year it really seemed totally do-able, but as time went on, more people kept asking “where’s the update”, and I kept saying “coming soon, coming soon”.

      I guess what I’m really saying is that I would’ve rather struggled through a few months of making the update than swallow my pride and just admit that I couldn’t do it. Ridiculous, I know, but that’s how it was.

  3. Colin says:

    “Under promise. Over deliver.” Learn to live by it. I’m still working on it myself :)

    • Matt says:

      Hah, yeah that was a mantra at my old job.

      What’s funny is that even before this update I had already already decided not to promise anything anymore (because of some other promise-failures, like an Android version).

      With this update I was just so sure about how much work I was going to be able to do once I was working full-time that I totally overcommited to it.

  4. Nathan says:

    Reminded me of this old article about project size from 37signals: Tiny projects keep it new. As a hobbyist developer, it’s even more applicable to me!

  5. Mark says:

    Sorry to hear you “hated” working on it. It doesn’t show a bit…. it’s fantastic.
    Hopefully the user submitted puzzles will create extra buzz and boost sales for the
    long haul.

    Any chance you might in a future update go into detail about what you are running
    for a website backend to support the uploading of puzzles and solutions?
    How do the app puzzles get converted to flash?

    • Matt says:

      Whoops, I answered this a couple days ago but I guess I never pressed submit or something, I can’t find the comment.

      When the user presses “Share”, the game takes a screenshot of the puzzle and resizes it to create three thumbnails, and then uploads the thumbnails and the puzzle data to the site. It’s important to note that all the image manipulation is done on the client side rather than the server.

      On the server side (which is running PHP on Dreamhost), the puzzle data is added to the MySQL database, and the thumbnails are uploaded to Amazon S3.

      My background is as a Flash developer, and I actually originally created Trainyard as a Flash game, but never released it. Rather than it going to waste, I decided to use that codebase to create the web solution player.

      That’s about it, but that’s just a short summary, feel free to ask questions about any specific part and I’ll go into more detail, cheers!

  6. Steven Fisher says:

    I admit I haven’t spent a lot of time with the new Trainyard update. I saw it was universal, downloaded it to my iPad, ran it, and immediately saw that I had to run in portrait mode. “What the @#$%?” I asked the walls in disbelief. “Why doesn’t he just put the chrome to the side? I’m not gonna hold the iPad like this!” And then I put it down.

    Knowing (now) how substantial the update is, I’ll give it another whirl and get past that first impression. But I’ve learned something here, too: No matter how good my app is, if I force people to physically rotate the iPad some are going to be put off by it.

    • Matt says:

      Hah, I kinda know what you mean, although there are a lot of games that only run in portrait mode too.

      I would have liked to make it run in landscape mode as well, but it wouldn’t have really worked. The game only looks good at 1x or 2x scaling, but in order to make it landscape it’d have to be scaled to 1.5x or something like that, so it wouldn’t look quite right.

  7. Jeremy says:

    I’ve been there, though at the other end of the coin. Your story is very familiar. I ended up chopping off some features that I wanted (and talked about) to get an update out. At the end of the day the reason was the same though — overwhelmed, not motivated, and potentially not worth the effort. I’m still not sure if I made the right decision or not.

    Thanks for the post, it’s a good reminder that we need to be realistic and not make promises we can’t keep. Also nice to see how you helped fix the issue by keeping to a schedule, good for you!

  8. Kyle Newsome says:

    Truer words could not be spoken; I’ve had a similar struggle with my game recently, though on a part time basis. Living with a room mate, it can be particularly hard to buckle down after coming home from work. Without a defined schedule it was incredibly easy to procrastinate.

    I started committing to 2 hours work, 9:30 – 11:30pm, after dinner and relaxation time every week day and its worked really well. I close my door and my room mate understands it is my DND working time. Productivity skyrocketed :D

    Great post and glad to hear the effort was worth it!

    • Matt says:

      Yeah that’s exactly it, you need a really structured schedule that you *and everyone around you* knows about, so that they can help you stick to it.

  9. Lucian says:

    I am curious if you are finding your rankings improve after the update. In my experience after every update the rankings go down until the user ratings come back up to similar levels as before the update, making it seem like the best idea is not to update often and instead bundle your features into larger less frequent updates. From a timing perspective what I mean is that we did monthly updates for over 8 months now and this pattern seems to hold, so we are going to try less frequent updates to see what happens.

  10. Nicholas says:

    I love how you promise another blog post in a couple of days.

  11. It happens to me all the time. The things you feel obliged to do but don’t start, they will drag you down. There’s only two options:

    - Do it, and do it NOW! No second guessing, no buts, just work on it.
    - Quit it. Eradicate it from your todo list. Apologize if you have to. But not too much.

    The real art is to only promise what you’re already working on and feel confident in.

    The way not to get stuck in procrastination mode because the work ahead seems so daunting is to have a vision. Or sometimes, as in your case, a plan will do for the short term to at least maintain focus.

    But the real value is the vision. It will help you decide on yes or no pretty quickly, and easily. Without a vision you’re easily thrown off course, even lose meaning in what you do. Perhaps just by one fatal remark of a friend, or an announcement of a similar product, or just finishing a big task and then not seeing it get the attention it deserves. Then it’s really hard to get back on track.

    • Matt says:

      Yep, great points. I think having a vision/goal is super key, because you can look at every single decision with the filter of “will it get me closer to my goal or not”, and it makes them much easier.

  12. Jan-Anne says:

    Why should a (massive) update always be free?

    • Matt says:

      Hah, yeah it probably really shouldn’t, but that was also part of the promise the way I saw it.

      I’m not really a fan of charging for updates though, even though it makes business sense. I think if you’re gonna charge for it, you might as well make it an entirely new product.

  13. Tommy says:

    Hey Matt,

    web developer/entrepreneur here. congrats on the update. For me too, structure is key. I really liked your flip over picture. Taking breaks (going outside the house), no distractions, time boxing… a lot of good things on that picture. It looks like you’re using the Pomodoro method in 48 minute increments? ;-) Pomodoro seems to give me more willpower not to allow emails/Twitter/Facebook/whatever to creep into my work schedule. I’m about to publish a blog post whose title will be “on the importance of routine” :-) Good luck!

  14. Pingback: Engineering An Update – Part Two |

  15. RJ says:

    Focus is always a hot topic…that’s one post I’m really looking forward to reading.

  16. Sean says:

    As a computer science major in college I can understand your pain and temptation to procrastinate. I have always been impressed by Trainyard and it’s inspirational that you developed it on your own. I tell everyone who has an iPhone about how fun Trainyard is.

    When I saw your update I was blown away. But I do agree with a previous poster than you could have released this as its own game (why not even version 2.0?). Giving us 150 puzzles for $1 was a great deal to begin with and now we have thousands more.

    I only have one suggestion for how to improve the game. You said you decided against a more accurate way to determine the difficulty of the levels created because wrenches don’t matter. However, if I’m looking in the 18-24/25-30 sections it’s because I want to play intermediate to difficult puzzles. So it’s disappointing when I see a ton of puzzles that I can solve in 5 seconds. If you could find a way (that doesn’t require a ton of your time) to more accurately determine the difficulties that would be a great change.

    Once again amazing job with this app. Still is and probably always will be my favorite iPhone game.

    • Matt says:

      Thanks for the reply! Yeah I’d like to figure out some way to isolate the puzzles that are actually hard. One thing you can do is search for the oldest unsolved puzzles (go to the last few pages of unsolved puzzles). Those are puzzles that nobody has solved in a long time.

Leave a Reply to Kyle Newsome Cancel reply

Your email address will not be published. Required fields are marked *


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>