Mobile Development and Aggressive Testing: An Interview with Josh Michaels


Josh Michaels is an independent software developer who makes apps for the iPad, iPhone, and Mac under the company name Jetson Creative. In this interview, Josh discusses mobile development, testing aggressively, and keeping users happy. 


Josh Michaels is an independent software developer who makes apps for the iPad, iPhone, and Mac under the company name Jetson Creative. In this interview, Josh discuses mobile development, testing aggressively, and keeping users happy. 

Jonathan Vanian: Okay. I'm here today with a mobile app developer. This is Josh Michaels. Josh, thank you for joining us.

Josh Michaels: Thank you for having me.

JV: It's nice to speak to some people who are outside the enterprise software side of spectrum; folks who are making mobile apps, mobile games. It's good having you here. Can you tell us a little bit about yourself?

JM: I'm what you might call an independent software developer. I make apps for the iPad, iPhone, and Mac under the company name Jetson Creative. We make software from the future; that's the slogan. I've been doing this for about five years at this point. Prior to that I worked in a variety of different areas in technology. I actually started in Microsoft and I worked on SQL Server for a couple of years, so I'm familiar with working on enterprise software, at least in the Microsoft context of things.

I went on from Microsoft to work at a variety of different startups and at the end of the day, I discovered what I really love to do is just make apps and make software, and with the App Store there's just this great opportunity for people like me who can do all the different pieces of the puzzle to just have a small business that does just that.

JV: You have to gain experience in a bunch of other tasks too, right? You're now a jack of all trades.

JM: Yeah. I did product management as well as software development when I was in a more professional career and I think product management touches on a lot of the different things that you have to do as an indie developer. Anybody who's worked on software knows all the different jobs and roles that go into making a great piece of software and it's pretty hard to imagine given all that how one person can take care of it all. When you simplify everything down and constrain what you build to very simple things, it's possible.

JV: What type of apps are you developing?

JM: Most of my time now is spent on a product line called Magic Window on Mac. It turns your system wallpaper into slowly moving time apps. Rather than having a static image, which is a sunset at one moment in time, it'll actually slowly transition overtime. We try to do this while using as little CPU as possible. This is something you can run in the background and just enhances your day as you switch between applications or if you have multiple monitors. The same product works on iPad and iPhone as a relaxation app and on Android as a live wallpaper app. We're across all those platforms.

We'd love to be on Apple TV. That's where I'm dying to get to. You can use the app with the Apple TV today with airplay but airplay is a pretty compromised experience. We want to have the best virtual window you can have on Apple TV when it's possible to build out to that platform and that's hopefully the next big project. It's always finger crossed waiting for Apple to finally let us in there.

JV: I didn't realize that was such a big deal trying to get on the Apple TV.

JM: There's no open SDK for it at this point. You can build for it in some ways using airplay but it's just not a satisfactory experience. I have to hear from customers complain to me. They're like, "Oh, your airplay thing sucks," and I'm like, "I know it sucks. I don't want it to be this way but there's no other way for me to build it at this time. Trust me, when there's a better way to do it I will do it the second that it's possible."

JV: You were responsible for Ow My Balls!

JM: Yeah. Back in 2009 I did a game that was designed to be a viral thing. It took it a year to take off, but it was called Ow My Balls! and it was a game about kicking a dude in the nuts. I think people don't understand that that game is really about what my career was like prior to making that game. In software as product manager a lot of what you do is just deal with problems and then fires come up, you put them out, fires come up, you put them out. That's what happens in the game that he gets kicked in the balls, he falls to the ground and then he gets kicked in the balls again.

JV: It's a very cathartic experience.

JM: Yeah it was. What was amazing to me is the way everyone else in the world interpreted it. Some people got the joke, some people didn't get the joke. Some people are just like, “This is a great game,” and I'm like, “That wasn't really what was intended.” It was meant as a joke.

JV: Was it Idiocracy inspired, I'm assuming?

JM: That was the core inspiration. Inspired by I guess would be how we would say it, but yeah it was definitely...

JV: The movie and the life combined to an app.

JM: It was common on the App Store, right?

JV: Right.

JM: In a lot of ways, at the time the App Store, Idiocracy and fart apps were ruling the charts that time. Now it's a casino, so I guess that's kind of Idiocracy. It is what it is. It's still an amazing place to make and sell software.

JV: You're now concentrating on Magic Window. How many people work on an app, something like Magic Window?

JM: In Magic Window's situation I work with an amazing photographer by name of Al Bergman who does the vast majority of the photography for the app. I would say aside from all the software-related stuff, he is the other primary dude at this point who works on it. Software development-wise on iOS I do all the development, design work, and pretty much everything other than the photography. On Mac I've got some help from a friend who does some of the harder dev work related to graphics programming, which I don't have skills to do.

The intent is that you've got to build something that can only use very few resources because if I have to start paying a lot of people, these apps don't make that much money. This isn't like a massive gold mine unless you set out to make something that's intended to make a ton of money. If you're going to do that, make a casino game. It's not hard. We have to be really scrappy; that's the name of the game. I think it would surprise a lot of people to see just how scrappy we are and have to be in order to keep this thing going. It'll be Magic Window's four-year anniversary in April 19th. Four years is a pretty good run for that product.

JV: Yeah, totally. That's a good life cycle. Do you use an agile development methodology when you do the development stuff?

JM: I work on the way I work. When I worked in bigger software organizations we worked under so many different methodologies and I got to a point where I was like well, I like to come up with a methodology that works best for the people involved. Every company, every organization, every group is different and different techniques for different places. I would say that I work under an extremely iterative methodology and rather than spending a lot of time drawing something down in advance just go build the simplest possible version of it and keep tweaking it until I get it right. That usually gets me there a lot faster than sitting around with a pen and paper trying to come up with the right interface. As soon as it's functioning you start to see things that you can't see on the pen and paper so I try to get to functional as fast as possible and then iterate from there.

JV: That's what I was thinking because I'm assuming that you would take the aspects of that methodology, but you're not exactly going to be writing on a big board for you and your photographer or anything.

JM: That's not to say, though, that these things don't happen in some form. We have Google Spreadsheets that track our aspirations for what scenes we want to capture, and that's similar to writing out on different cards, here's the different scenes that we want to do and different scenes that have been requested by customers. Some of that comes in but a lot of what makes what I do possible is by condensing it down to just a couple of people. A lot of the overhead that comes with bigger software isn't there. I can get done in the time that it would take me ten meetings before I can make a decision like that.

We spend a lot of time snowboarding. We actually released Tahoe Blue last year, which was an ode to life living in Tahoe working on software. We had a policy where we would make certain decisions on the ski lift where we'd get on the lift, it'd be like we're going to make this decision before we get off the lift. Let's go. It's like wait, we can't make that. I was like, no. We've been sitting on this decision for three months. We can't make up our minds. We've got all the available information we need. We're going to make this decision now. Let's go. We got to make the choice by the time we're off the lift. We try to be extremely aggressive with decision making and just not wallow, sit around and think about stuff too much. Just make the decisions and go.

JV: It's interesting that when I talk to a lot of people working in enterprise software, there's always a disconnect between the business and the developer. Given that you're a small organization, how do those two things merge? You are now dealing with both the business and development.

JM: I think it's tricky because the developer in me will often want to do things that the businessman would say absolutely no to. I think one example of that is automation. There are a lot of times where I'll be in situations where it's like man, I'll save myself some time overtime if I build some automation here to help me speed some things up. At the end of the day, the amount of time it takes to maintain that automation often ends up exceeding the amount of time saved through the automation and for the most part, every time I've tried to optimize through automation it's ended up costing more than it saved. Just trying to execute as fast as possible and only doing bigger scale optimizations like that when they're really justified.

JV: Let's talk about a little bit about testing. What type of testing do you do for your apps?

JM: I'll talk about that in a couple of different ways.

JV: Yeah, go for it.

JM: The first is that as I build I test aggressively, meaning that I try to not leave a feature until I've really just fully evaluated it. Because I'm writing the code and testing it, I'm able to really think concretely about the testing matrix and where there's likely to be problems and where there isn't likely to be problems. I try as aggressively as I can when I build a feature to right then test it as thoroughly as I possibly can as one individual.

Now, the challenge is that very often I'll release this stuff and people use it in ways that I don't even think about. Maybe they'll set a couple of settings and I'm like why would you ever want to setting A this way but setting B and C this way? Sure enough people come up with a reason to do it and that's where I can't test it all because there's going to be lots of different ways to set things up that are going to be ways that I don't even think of and that's where I really depend upon the fans and customers who really love the product who function as beta-testing group.

When people contact me who are like, "Hey, I love your app," I always like to offer up, "Hey, do you want to join the beta testing group?" Then when I've got a new release coming out I'm able to contact them on and say, "Hey, you can try it before anyone else." Fans love that. Fans love to get a chance to try it before anyone else. What that does for me is get a lot of people using it in different ways that aren't the ways I'm going to think about, that aren't the ways that are in my list of tests that I have to do before I ship.

I would say I rely very heavily on the fans of the product who I give very early copies of the app too and who give me feedback on where there are problems both from a technical point of view, bugs, things that aren't working, but also usability. I couldn't figure this out, you said this feature is there and I don't know where it is. Where did you put this feature?

JV: Were these ever disgruntled fans maybe who had specific problems like, "How dare this thing doesn't show up at this point?"

JM: I would say half the time these interactions start from disgruntled fans who are writing in to complain about something and it's something that I can't necessarily fix. Airplay is a perfect example of that. When I am able to make improvements or when I come up with like, "Oh crap, I didn't think about it. I could do it this way and that would be a little bit better," I always like to jump to those and say, "Hey, try this out. It's not what you asked for but it's a little bit closer." They're always enthusiastic to see any amount of progress towards what they want as fans of the product.

It took me a little while to realize that when somebody's angry about the product, that passion is just as much love as anything else. It's just they're frustrated, but the fact that they're that into it shows that they really care.

JV: It's like voting. The act of voting shows that there's some caring.

JM: The dude showed up and made a complaint. That's doing a lot.

JV: This is when I first heard you speak at the Mobile Web Development conference here in San Francisco and you were talking a lot about the reviews and how that affects you, so this is a good segue to get into that. It's like confronting the people who are having the negative reactions immediately but then trying to get them to go to help you and join your side.

JM: At the end of the day when somebody contacts me who's angry, my end goal is not only have them leave happy but also have them leave more of a fan than they came in. If I can get them on the way out the door to go write a review, they're going to write a glowing review because they just had a great personal interaction with me and that's really, really hard to top.

If you go and look through the reviews for Magic Window—not for Ow My Balls!; nobody should be subject to read those—If you look at the ones for Magic Window you'll see there are a lot of them that say, "Great customer service." "Developer responded super fast." "Developer implemented the feature I suggested." You see that stuff in the comments and in the reviews, and that's what I love to see and I think that's what other potential customers love to see because it shows that as a developer I'm going to be there to help them if something goes wrong.

JV: They're more willing to spend some money on the product knowing that they're going to get some service back.

JM: When you look at an app that you want to buy and you're looking at the reviews, if you see a couple reviews that are like, "This didn't work and the developer didn't even respond," that's a big warning sign because maybe it's some edge case that doesn't work, maybe it's people who use Gmail in a particular way, but maybe I'm that dude who uses Gmail in a particular way. If it doesn't work I want to know that there's going to be someone there who's respectable and responsive when I try to contract them to solve it.

JV: I want to add on this interview with a real nice story that you had to share at the conference and it's involving the word Beelzebub. Can you explain that?

JM: I'll try to make a long story short there without actually reading the support mail. I received a support mail from a customer who is concerned because their child was playing Ow My Balls!, which they didn't have a problem with.

JV: They didn't, okay.

JM: The game started making satanic statements to their child and the person was concerned that someone had hacked into my code or hacked into the Ow My Ball! server in the cloud and had injected these satanic messages into the app. In reality, what had happened was that the game includes a sound effects recording feature. It's actually a feature I'm really proud of that lets you record yourself yelling Ow My Balls! so that when the character yells it it's you instead of the character.

JV: It's very interactive.

JM: This is a really neat feature. It's one of the first times any video game let you record your own sound effects. What seemingly happened is that one of this person's friends or family members recorded these messages into the game seemingly as a joke to annoy these people the same way they think that I annoyed them. There's a completely logical and rational explanation for how these satanic messages got in the game, but it's not that I put them there.

I had a bunch of interactions with this person and initially tried to calm him down and just tell her here's what wrong, there's a sound effects recorder. That made her even more defensive because now I'm pointing the finger at her family and friends as the people who are putting satanic messages in. I'm not trying to point the finger at them. I'm just like that's who did it. Someone who has access to their phone did it. It's pretty cut and dry how it went down.

JV: You have to explain this predicament to this person.

JM: Yeah. I can't come up with a way to explain that it's not offending them and at which point I started to basically think that this is someone who's screwing around with me because this whole thing is so fantastical. It's just so hard to believe that this person's perspective is real and at this point they're seeing that I'm the devil and that I'm injecting satanic messages into their kid's software. I basically broke down and sent a reply that was seventy-two point red font: I am the Beelzebub. I thought I was going to get a laugh out of it because I figured that whoever was trolling me was going to be like “Oh, he gets it. He gets it's a troll. He's playing along.”

JV: High-fives all around.

JM: It would be cool this guy gets it. It turns out I didn't get it because it was a real person. Later I went and looked him up on Facebook because that seemed like well maybe I could find him there and there's pictures of this woman and her family and then it was like oh man, that hurts.

JV: Oh my gosh. Time stands still; your heart stopped.

JM: When you see the person's face and you realize that they're human and it's not someone playing a prank on you but someone who really believed that their phone had been possessed by the devil. Look, I'm not going to judge that perspective. I guess it's possible, but in this particular case I think it was a pretty good joke by whoever played the prank initially. It just ended up blowing up in my face.

I learned from that that I should never, never mess around with the customers, assume that they're trolling me even if I think that the odds that it's a troll is really, really high because sometimes it's really hard to tell what's really and what's fake but you got to give people the benefit of the doubt.

JV: Definitely. Did anything good ever happen as a result?

JM: I got to tell the story to a lot of people. I guess it's probably not that ethical when I think about it. When it was happening I tweeted out the email on my Twitter account and got re-tweeted by a ton of big name developers. At the time, I tweet it I thought it was someone pranking me. I hadn't figured out it was someone real. It was funny that all these developers are re-tweeting it and that we could all relate, but when it turned out to be real the fact that it had reach so many people started to bug me more. I guess I'm making a penance by going around the country giving this talk now saying how bad it made me feel that this happened.

JV: It's important though. It's an important story to tell.

JM: It is important. On the other end of it there had been Magic Window reviews that have said stuff to the effect of thank you for letting Jesus flow through you to create this magical piece of software. If I got to deal with the positive I had to get the negative too, right?

JV: Totally. All right, Josh. Hey, thank you for taking time out of your day to talk with us.

JM: Thanks for having me.

JV: Yeah. Great talk. All right. See you around.

JM: Later.

User Comments

1 comment

About the author

Upcoming Events

Jun 02
Sep 22
Oct 13
Apr 27