-->
Who are you and what do you do?

My name is Josh Johnson and I'm an iOS developer in Durham, NC working at Two Toasters. I'm organizer of the Raleigh-Durham CocoaHeads and NSCoder Night meetups and occasionally a speaker.

Most of the apps I've worked on where internal enterprise apps or apps for clients. I'm also working on a small app for my Bad Movie podcast that I'll be releasing soon. You can follow what I'm up to on twitter.

How did you get started in developing for Apple devices?

I actually started programming on an Apple device. It was sometime around 1989, my Dad had given me his Macintosh Plus. I was a 10 year old kid who had a superhero known as: Dad. I wanted to create a game for him so I started writing a slot machine game. I can't remember exactly which form of BASIC it was, I just remember that I had imagined the whole time that I'd some day release it as a packaged box in the store. Throughout middle and high school I continued to tinker and eventually became really interested in web development. My first job out of High School was as a web developer doing (amazingly horrible) web sites for local businesses.

After dropping out of college to get work, I started working for an AutoCAD reseller and doing custom applications in AutoLISP and C++, then later VB, C#, and PHP. Overall, I spent 12 years doing custom applications around AutoCAD and the web. However, when home I still had a love for the various Macs I could acquire and always wanted to build shareware for the Mac.

Then the iPhone was announced in 2007 and by then I had a 12" Powerbook. I opened Xcode and started trying to understand how AppKit and Cocoa worked. By the time iPhone SDK was announced I had figured enough out to know how little I knew. Over the next two years I consulted with friends on various projects on the side and kept learning. By 2011 I was doing enterprise iOS apps and Mac apps as part of my day job (which was a mix of C#, HTML/CSS/Javascript and Objective-C). This leads to now, where I am focused on iOS development during the day and still for fun on the side.

What does your computer and workspace setup look like while developing?
Josh Johnson's Workspace

I've been working on my 2010 15" MacBook Pro that I upgraded with a 256gb SSD. When at home, I normally work while on the couch or desk. At the office I work at my desk with a 27" LED Cinema Display, an Apple wireless keyboard, and a Magic Trackpad.

What is your favorite stage of development?

Programming is the obvious favorite for me. It is fun, challenging, and frustrating. I wouldn't want to do anything else. At Two Toasters I'm a part of leading applications which allows me to design how things fit together and coming up with ways to do some of the designs created by our design team. I also get to layout all the common parts of an application and the more complex animations. I really enjoy making these custom elements most. It is very common for me to sit there and repeatedly launch some custom animation (usually with sound effects in my head).

Occasionally, I also really enjoy spending time in Photoshop and designing things. I am by no means a professional designer, but I really enjoy the process of creating things visually and then implementing them in code.

If you had two minutes to share your favorite development tip with a fellow developer, what would it be?

I think the best development tip I've ever come up with on my own is my "15 minute rule" (named only for the purpose of this interview). It goes something like this: If I'm searching the internet to solve a problem or figure out an API and it takes longer than 15 minutes, the answer is: too simple for someone to comment on and I'm complicating/over-thinking it or I'm doing something wrong. It isn't a 100% rule, but it's been true most of the time.

While the creation of an application is enjoyable for developers, there is the feedback and comments that come after. How do you deal with that at Two Toasters?

At Two Toasters we generally do client applications for a range of different businesses. Feedback and comments from the user usually get routed through our clients, then if they are negative or important enough to fix it is delivered to us as either a bugfix or change request. This keeps us somewhat isolated from the "APP DON'T WORK ON MY I-TOUCH, ONE STAR!!!" type of feedback. As far as feedback from clients go, we generally build time for changes into the project. I don't think that can be avoided either since feeling an app function is vastly different than imagining it. I feel like we work closely with the client enough that we aren't just carving out stuff to blindly throw on the store, but rather we want to create something we are both proud of. Clients usually contact us directly or as part of our daily standup with any feedback and we discuss it as if we are a part of their team.

Finally, what is your favourite app?

My favorite app is probably a tie between Tweetbot and Path. Both apps are beautiful, enjoyable to use, and are a constant source of inspiration.