Project #3: Post-mortem

What went well?

Prognosticator – This is the component that predicts what word Intelliwriter thinks you are typing. This was hands-down the most fun component to put together. I used a simplified Markov Chain algorithm that analyzes existing texts and formulates for any single word, what are the most common following words. A simple idea but impressively good at efficiently suggesting words based on previous words.

Tab-completion – The output from the Prognosticator was a quick reference of words-to-next-word. This made the tab-completion logic super simple and way more effective than I had originally imagined.

Look-and-feel – I didn’t think about this one much until a friend tried out an early version of Intelliwriter and commented of the smooth look-and-feel. I wasn’t really trying to make anything special, but I think that not trying to make something special was accidentally what a distraction-free text editor should be. Simple is as simple does.

What was terrible?

Brew-your-own-text-editor – When starting development of a new component, the first question any developer should ask is “hasn’t someone done this before?” There are a million text editors out there and probably lots that open source their code, and yet here I was re-implementing a text editor and spending at least half my time figuring out the logic of drawing letters in the right places, handling weird characters (…or not), and having to solve the problem of text editing for the millionth time. If I ever decide to go fo’-realz on Intelliwriter, I have got to take this out the equation and find some text editor I can hack apart.

Start Stop Continue

START – I have got to build something that ships. Granted, Who Goes First? technically shipped but I’ve never been thrilled with its resource inefficiency. That thing eats batteries like an old dog. I’ve always told myself that I love software development because you get to constantly learn new things. Though I don’t think anyone should lose their need for learning, I need to take these 10 years as a professional developer and getting down to moonlighting business.

STOP – It may be time to thank the 24-hour project limit for its contributions and revamped my initial principles into focusing on delivery rather than time-management. I feel I have learned a lot from imposing the limit and I see improvements in my time management both at home and at work. Now it is time to take this personal advancement and focus on results.

CONTINUE –  I started breaking down projects into independent components with Mars Commander and really took it to heart with Intelliwriter. This is how the modern software world works and I consider it a part of my more principles of development.

Project #2: Post-mortem

What went well?

MonoGameMicrosoft’s XNA iswas a fantastic framework for indie developers in both 3D and 2D games. My first for-reals game (Pendulous) was written with XNA which enabled us to release for Windows, Windows Phone, and the freakin’ Xbox 360 with relatively few code changes. Amazing! As with many things I love, it has since been defunded. But! MonoGame has done a great job re-implementing the API on top of SharpDX/Mono (cross-platform managed DirectX). I was able to pretend the pain of losing XNA was gone and use MonoGame almost exactly as I did the XNA toolset. There are a few holes in the content pipeline side of things, but all-in-all MonoGame is like sitting in front of the fire with your favorite dog after you thought it ran away.

Game Jam! – This isn’t something that necessarily went well during the project, but the issues that are outlined in the “terrible” section below brought forth inspiration to put together a gamejam/hackfest/whatever tool set. A friend pointed me to deepnight a couple weeks ago and I got totally lost in his world. His game “Law Breaker” is a single-screen Grand Theft Auto that feels like Pac Man robbing banks. Anyway, the fact that he could put something like that together in a couple days got me taking a hard look at my toolset and realize it needs some serious upgrades. More on this later…

What was terrible?

Pre-Planning – Man, I did not do this well. You can read about my expectation reset here.

Burnout – I hit 44 hours with Mars Commander which isn’t terrible for the scope I was trying to hit, but it was spread out over three months. My time log is filled with entries that are only one or two hours long at the most and in the final month I only ended up working on the project a couple times a week. These projects deserve at least a couple full weekend days to get them out the door before my brain moves on to the next shiny object in view.

Start Stop Continue

START putting together a game jam toolset for the next hair-brained idea. I’ve already started putting together a game engine written with MonoGame so I don’t have to go through writing yet-another 2D game engine in C#. I also need to put whatever code elements I use up on GitHub. These days if I don’t see a tool or library on GitHub, I question its validity.

STOP rushing pre-planning. Not taking a hard look ahead really hurt the project this time around.

CONTINUE with cross-platform tools. This is the way of the future my friend. I hope the next software something I do is done in Xamarin so I can see what that world is all about.

Project #1: Post-mortem

For the project post-mortems I will start with a template of two questions (“What went well?” and “What was terrible?”) and at least three actions (“Start”, “Stop”, and “Continue”). That was easy – on to it!


What went well?

Guiding Principles – The 24-hour cap was just about perfect for this project and did a great job in keeping me from rat-holing on inevitably unimportant details. I was fully expecting to rev the Guiding Principles in the first few projects, but I think I’ll keep them as-is for now since I they worked very well for Project #1.

Construct 2 – Construct 2 was a great 2D simplified development environment. Since I wasn’t making a game there were a lot of things I didn’t dive into. But! For coming into the system mostly cold, I was able to get up a going and making something that didn’t totally suck in not very much time. Self-hi-fives.

Releasing – I learned a ton about how the Windows, Android, and iOS independent publishing works.

  • Windows kind-of cares about what you publish and that you’re not an techno a-hole. Also, they very much care about your application having a somewhat real privacy policy, even if your application doesn’t use anything on the device except for local storage and the screen. Some one (a person!) told me this a number of times as I was submitting package updates to publish.
  • Android does not give a shit what you publish.
  • iOS will let you do everything you need to publish from not-a-Mac, except upload the binary. You can MAKE the binary, TEST the binary, and PACKAGE the binary all on a PC. Oh, do you want to upload the binary? You’ll need to buy a Mac and download XCode because we hate kittens. I’ll be bitter about this until I borrow a friend’s Mac and upload the stupid thing. I realize I’m complaining in the “What went well” section, which means I realize this is mostly a personal issue.

Work/LifeWork Balance – A hole I have dug on more than one occasion is overcommitting myself resulting in my internal thread scheduler thrashing like an angry monkey on speed. In this case, since I have deliverables and a time frame and a freaking blog, it is easier to say “no” to other projects so far. Or even better, I put the potential project on the backlog for Hello Program and will prioritize it so that I am only actively working on one moonlight project at a time. This kids, is what I’ve been told is called “growing up.”

What was terrible?

Cross-platform Performance – Something between Construct 2’s HTML5 exporting to Windows Phone and Windows Phone 8 HTML5 rendering resulted in garbage performance. I’m not sure if this was something in Construct 2’s inefficiencies or in Windows Phone’s IE JavaScript engine. Since I have no intention on diving into either, I will leave it at that. It seems to work okay if you point your Windows Phone to the web version…sometimes. Sad face since I generally love everything about Windows Phone otherwise.

Art Assets for Publishing – Forty-five is the number of individual icons, logos, and splash screens I had to make to publish into each of the marketplaces. Forty-five! In the worst offense, I had to make icons that were 70×70, 71×71, and 72×72. It’s not like a super big deal but I definitely spent a solid our of the time spent in publishing resizing and adjusting and aligning all the stuff for these assets.

I can't even...I mean honestly.
I can’t even…I mean honestly.

 

Start Stop Continue

START using VisualStudio.com, because it is great. OneNote is also great, which is what I used for work tracking in the first project. The theory was to have as minimal as possible project management overhead, which worked out alright. But even for a single-person constrained project as this, I was wanting for some straight-up work item tracking, bug tracking, and a scrum or agile task board. I ask and technology shall provide.

STOP using Construct2. Don’t get me wrong, Construct 2 is great and I will sing all the praises for it. But! I am a software developer and there were a number of things I had do weird things for because the coding interface is basically super-good pseudo-code. I will return to my C/C++/C# roots for the next project.

CONTINUE using the time log. I originally started the time log just to make sure I didn’t go over the 24 hours. What ended up being more useful was looking back at how much time I’ve spent doing items such as design, planning, implementation, bugs, redesigns, what-have-you (I posted a near-final time log here). If the 24-hour constraint abstractly kept me on-task, the time log is a concrete implementation of the idea. Each day I could look back on how I was spending my time and quickly figure out if I felt comfortable continuing on something or if I needed to move on.


Ideas for project #2 are in the cupboard, now it’s just time to decide what’s for dinner.