There’s an old saying about the last 20% of a project taking 80% of the time. There’s also probably a saying about something starting to look bad if you spend too much time looking at it. Finally, one of my favorites (and one I’m pretty sure I’ve penned) – can’t draw a straight line with a ruler.
I’m a mix of all three of those right now. Oh, and I haven’t blogged in a while.
I’ll be the first to admit that I am not a designer. I understand the importance of it and many of the concepts, but I lack the vision and technical ability to be a competent designer. There’s absolutely nothing wrong with it, and I’m not lamenting the absent skill, but it’s worth admitting. So I do what all developers do – find apps I like and mimc their concepts in my own app. Tale as old as time, and an opportunity for another buzzword – imitation is the sincerest form of flattery.
I’ve been working on my gas mileage tracker for a while now, and most seriously in the last few weeks. I really wanted to ship it this weekend in honor of it’s namesake event, the Indianapolis 500. Here it is Monday night, and I’m blogging instead of in iTunes Connect enjoying my approved status, basking in my first personal release.
Where’d I go wrong? Probably the two redesigns I’ve done. Probably in the heavily programmatic views instead of fun, modern things like storyboards and auto-layout (apologies for the buzzwords).
Getting to MVP
I have come a long way to becoming comfortable with the idea of frequent updates and not taking on the world. I have a lot of plans and things I’d like to see happen in my app, and recently I’ve become comfortable with the fact that they won’t all be done on day one. But I still have to have something to actually ship. So what makes an MVP? I’m redefining it as “core functionality.” Can I enter a fillup event. Does it update the table as appropriate. The very basic of animations, just enough to have a fluid experience, but nothing fancy.
That introduces a complication though – what’s my distinguishing factor then? There’s no shame in mostly vanilla UIKit elements, but there are thousands of apps on the store that lack customization. This means I need some flourish, so I have to find the balance of “some” and “this is holding up shipping.”
Getting Out of My Own Way
I’ve done project management. I need to make a plan and just execute on it. I’ve decided this means cutting way back on the flourish and yet again throwing away some code, but doing so in favor of something that I can iterate on faster and will be more easily modified in the future. I will have to find other ways to differentiate, and some of those won’t be on day one, so I need to consider this in my pricing model (if I so chose to). Tracking multiple cars is out for now. Heavily customized UIs are out for now.
To my credit, I have solid fundamentals. I’m using a SQLite store, and my DB to NSObject code is solid. I’ve got my own home-brewed migration scheme that I can rely on and is portable. Thanks to recent Cocoapods discovery work, I’ve even broken out the most common stuff I do to a library I can use elsewhere (assuming I ever finish this one). That’s all great, of course, but I need to get this just shipped.
So I set a new goal. July 1st, my app is going live in whatever state it’s in. Keep me honest, Internet.