Contingency planning

My brain whirls all the time. I can hardly make it stop, even at night. It wakes me up at 3 or 5am and I have to read a book for a while before I can fall back to sleep.

What does my brain work on all the time? Plans and contingency plans and contingency plans for my contingency plans. They are ten levels deep, at least. I think through so many cases that I often come across as unflappable. That’s because I’ve already figured out what I would do in every situation. In the moment all I have to do is execute.

This is a big year for Infinity Softworks. The question we have to answer is whether Infinity is a full-time job for Rick and myself or whether it is a part-time job for one or both. There is revenue coming in but not enough to support both of us full-time at anything close to market wages. While neither of us are expecting to get to market wage this year, this is the year we need it to show promise.

In particular, that promise has to come from Equals as the other products are what they are at this point.

So I make plans. When will Equals be released? What revenue do we expect from DEWALT Mobile Pro? How about our deal with ETS? Will that change next year? Is the powerOne revenue sustainable? Any way to grow it? What do we need to make from Equals? Where do Rick and I need to be financially? When? What other expenses are we expecting? Any we can cut? Any we missed?

When all is said and done, I see revenues with modest raises this year for both of us. That’s a start, especially considering I (hopefully) low-balled DEWALT revenues and have no income from Equals this year on the books yet. But a sizable chunk of this year’s income comes from contract work and one-time payments, something I don’t want to do after this year. Equals needs to replace that.

Which inevitably leaves me contingency planning January of 2016. What happens if we have the incomes? What if we don’t? But this one needs to be pushed away for now.

All this planning can be a big distraction, too, especially at 5am. Enough planning. I need to execute.

The technology behind our Mobile First Cloud First strategy

Excuse my particularly nerdy topic today. This is an exception for me but felt it important to outline what technologies we are using to make this strategy work.

The problem with being Mobile First Cloud First as a tiny little indie developer company is that you have to become proficient at a bunch of different technologies. This is hard for a single developer or two-person team to accomplish.

We are currently developing for three platforms using five technologies. The three platforms are the web, iOS and Android. The languages are Javascript, (ansii) C, iOS/Objective-C, Android/Java and Ruby on Rails. The technologies, besides Javascript and C, don’t matter that much specifically, although writing for iOS and Android leave little choice.

Have you ever really looked at a map of Florida? I mean really looked? In the middle of the state is a massive lake, Lake Okeechobee. It’s so big that it is actually the primary source of fresh water for all of south Florida with tens of millions of residents. When I was in high school in Ft. Lauderdale I remember hearing that Lake Okeechobee was so shallow, though, that you could walk across the entire thing without ever having your head below water level. I’m sure that’s not true¹ but I love the metaphor. That’s how I am as a programmer: miles wide and inches deep. I know all four languages pretty well (my partner does all the ansii C development) but in none am I an expert. Allowing myself to just be proficient is important to pulling this strategy off.

The one that I am probably best versed in today is the most important to make this cross-platform strategy work: Javascript. It’s the primary language we have that works across all devices. And lucky for us it has gotten awfully good over the last few years. We use it in specific views, never for view transitions, minimizing the places where it is obviously not native code.

Within those views we do have some animations and a few controls.² We consciously decided, however, not to match the look-and-feel of native controls. Instead we created our own that function well but don’t try to be the same. I suspect most of my customers won’t really notice the difference.

As much as we could develop in cross-platform code we did. That means big chunks of the UI are in Javascript and big chunks of the back-end technology are in C. This allows us to treat the “native” code as glue. On the web that glue is Ruby on Rails, although it could be Python or Go or node or whatever. For the most part it handles JSON callbacks, serves pages and interacts with the database.

On iOS and Android, the framework for the apps is all native and only a single primary view is HTML. This one page, though, is 80% of the UI work to develop and maintain the app. Thousands of lines of code are all cross-platform. Furthermore, we stuffed as much of the processing into C as we could, which will link into Rails and Android and run natively on iOS. The key is being able to make quick updates to all apps.

If you are just starting out, I highly recommend the following resources for iOS, Android and Javscript:

Objective-C Programming: The Big Nerd Ranch Guide (2nd Edition)
iOS Programming: The Big Nerd Ranch Guide (4th Edition)
Android Programming: The Big Nerd Ranch Guide
How To Learn Javascript Properly
Agile Web Development with Rails

Becoming proficient at multiple languages is time-consuming but important to our success long-term. We can keep churning on the same ol’ mobile-only apps we have, making a few bucks a month, or take some of that time and start learning technologies that let us be mobile and cloud first. I think the latter is the only way to sustain success.

¹ Besides, I think the alligators would probably get you before you made it across.
² Check out Greensock, especially in the iOS and Android browsers. Amazing stuff.

“Mobile First Cloud First”

Ben Thompson’s Mobile First post is an interesting read and his perspective is always fascinating. (I pay $100 per year to be a member. I can’t recommend it enough.) It’s not the post itself that has me thinking, though, specifically, it’s footnote #4:

Microsoft’s “Mobile First Cloud First” strategy makes much more sense now, no?

Here’s the thought: can you really be mobile first without being cloud first? Mobile first means everything you do is different because people have a computer in their pockets all the time. (And by people, I mean all people on the planet in the next few years.) What enables mobile first, though, is that every one of these devices is connected to the cloud, and its the cloud that lets us connect outside the device.

So can you have one without the other?

I think a lot of us indie developers have tried for years to be mobile first without being cloud first, and I think that is part of the reason it has been so hard to make a living. Infinity Softworks is a perfect example of that. It came to be in the mobile era. I wrote my first apps for PalmPilot and later Windows Mobile, and we have made the bulk of our revenues over 18 years from selling apps for mobile devices.

The first generation of our products were fixed. It had a certain number of bundled calculations and that was it. But that was okay. The devices were underpowered and completely disconnected from the Internet.

The second generation of our products had some bundled calculations but also allowed customers to write they own. They were still on disconnected devices, though. Yes, you could email a file but that is a far cry from being Cloud First. Again the devices were largely disconnected though, at least they were until 2007 when we wrote a BlackBerry version, and then 2008 when we could write for iPhone. Over the past few years, though, those connections have only gotten better and more pervasive. Our apps have not.

Even to this day powerOne is primarily a stand-alone application that has very minimal connection to the outside world. The only cloud connection it has at all, besides emailing results and formulas, is an in app library of calculations you can download from, but even that is buried at the bottom of the home screen in a tiny button. It’s hardly front and center in the product.

These first two generations were Mobile First, but neither one was Cloud First. Over time, as the devices have gotten better and faster connections, our revenues from powerOne have waned. I’m thinking there’s a connection.

A few years ago we set to work on the third generation of our products (a little at a time). We started out writing mobile apps but about a year ago we switched and started developing the web version first. While I didn’t have words for it at the time I sensed that the cloud was important to making a sustainable product and that by developing a web version first it would help us shift our mental framework.

Now we think in terms of systems rather than mobile apps. For the first time I believe we are thinking Mobile First Cloud First, and I believe it will have a huge impact on our fortunes.


“If niche is something that millions of people use every day.”

We went out to lunch in mid-October. I was a mess. I was learning Android development, had a ridiculous goal of shipping before Christmas. I had a lot of code to re-write. Between Thanksgiving and Christmas I averaged 15 hour days and took off only one afternoon where I was so tired I couldn’t do anything but stare at a football game. I have no idea who was playing.

At one point I couldn’t even tell you what we were doing anymore. I was completely lost. I was tying myself up in knots trying to describe the business while note using the word “calculate.” Calculate, of course, is uncool, and if we are uncool then how are we ever going to attract customers and attract investors.

It was mid-October and the development team was at lunch. I looked at the guys and said, help me. I can’t even describe the product anymore. I don’t know what we do.

They looked at me like I was nuts. We are writing a web and mobile app that makes it brain-dead easy to perform calculations.

But that’s nerdy, I protested.

Duh, they said.

So that’s it, I asked. We are writing an app that makes it possible to perform your calculations anywhere, the first time in weeks I could say what we do without hesitating, and the first time in a year I could sum it up in just a couple of words.

We are niche, I protested.

Sure, they said, if you think that “niche” is something that millions of people do every day.

Since then I’ve wondered if part of the reason I’ve been able to grind on something like calculation software for so long is because I picked something most people wouldn’t touch. If I wanted to write the next Twitter, I think I’d be drowned out by the amount of funding going into the space. But because I picked something out of favor, as most productivity software is these days, it affords me the ability to think about it and iterate on the ideas for a very long time.

Make no mistake, though, that lunch was a turning point for me. For the first time in ages I was okay with what we do. We like numbers, we try to make them easy to analyze and understand. Calculation is the name of our game.

Fine, we are uncool. I can live with that as long as I can find enough customers who think we are cool to make it possible for us to keep working on our products for years to come.

Scale is a four letter word

I’ve been in fund raising mode, if not actually raising money then at least mentally, since 2001. I have had mixed success, raising a round in early 2000s and various debt rounds since then.

The thing that matters most when raising money from seasoned investors is scale. Scale means getting as many customers as you possibly can in the shortest amount of time as possible. But charging for something adds friction to the process and thus slows scaling. So the idea of generating income from what you produce can be anathema to scale.

This is why we have so many free software products these days. Funding dictates this due to the god called Scale.

I was addicted to this for years. We needed low priced and free products because the way you make money is to charge a little to a lot of people, and you can’t have a lot of people until you have scale. Of course I didn’t have venture funding to help me out so we constantly played games, releasing some free and some paid apps in an attempt to scale and make money at the same time. I was praying at the alter of two completely different gods, two that rarely got along.

By realizing my true calling as a grinder, by now focusing on building a sustainable business that lets me grind away at my chosen craft for years and years and years, I no longer have to pray to the scale gods.

And that changes how I think about our products, how we price them and deliver them. I don’t need scale. What I need are enough customers willing to pay me a fair wage to use our products, and I need enough of them to be profitable and make a living that can pay for a small team, for my house, my family, and save for the future including my kids’ college funds. I no longer have to be the cheapest solution and I don’t have to appeal to everyone. I can now focus on being the best once again for my core group of customers.

Praying at the alter of two gods — revenues and scale — was very hard. I no longer feel pulled in two directions.