360iDev Conference Notes, or How I Spent my September Vacation

September 18, 2011    

This Thursday, I got back home after four days at 360iDev 2011 in Denver. I went last year, which was easy for me because it was in Austin where I live. I was concerned about the extra time and extra money it was going to take to go this year, since it was in Denver. Now that I’m back, I’m so glad I went. I have no hesitation about recommending it to other people, so that’s what I’m about to do. This post is going to be long, because there was a lot going on, so feel free to skim the headlines and skip the things that aren’t relevant to you.

##Let’s start with value.

My total out-of-pocket (not including food) for this 3-day conference plus one day of workshop was $1215.96. $299 for the conference ticket, $638.57 for the hotel, $195.40 for plane tickets (from Southwest Airlines) and some misc stuff like cab fare. By contrast, two days plus a workshop of an iOS conference coming up in a couple of months is $895 for just the conference+workshop (no lodging or travel) - and that’s the early bird pricing.

##The talks

###Photoshop for Devs

Pow screen from Mike Berg classI started Sunday with a Photoshop for Devs workshop from Mike Berg from We Heart Games. He walked us through some basics, and then we did a project mockup (see POW image right - exported from the PSD we did in class) and then sliced it into PNGs for export into Xcode. It was a very interactive talk. He took a lot of questions from the class, and handled them very well (even when the breakers kept blowing out), and even took several more advanced questions and walked them back so that even those of us that didn’t understand half the vocabulary in the question understood at least the concepts and issues involved by the time he’d finished answering.

###Keynote - Matt Drance

Next was the Keynote.
Matt Drance, author of the fantastic iOS Recipes book and former Defense Against the Dark Arts Teacher Apple Evangelist did a great job of kicking off the conference, convincing us that, first and foremost, developers should be storytellers, and that code can be a lot like Sprinkler systems. (See a longer writeup here).

###Going Indie without Going Broke

I saw Kyle Richter’s talk next. He reminded us that running a business was all about people and communication. He summarized for us literally decades of advice about working with people, running the gamut from Dale Carnegie to Daniel Pink. It was a lot of useful material and references, but most importantly, it helped remind us that all the cool coding techniques are useless if no person wants to use your code.

###^BlockParty

Next was a packed talk on blocks from Justin Williams, author of Elements. He gave us a quick rundown of what blocks are, then explained to us how to use typedef to make them not ugly (see his example on github). Then, he showed us how he uses blocks to simplify async calls, explained to us how he would redesign some common SDKs (like Dropbox) to use blocks, and then walked us through examples from at least 8 different open source block extension libraries covering everything from KVO, NSTimer, UITableView, and UIAlertView to JSON. It was a packed room and packed with information, and I still have several of the github projects he mentioned in OmniFocus waiting for me to have the time to go through them.

###Understanding View Controllers a.k.a Debugging Magic

After lunch, I went to Bill Dudney’s talk on Understanding View Controllers. Bill is another former Defense Against the Dark Arts Teacher Apple Evangelist, and he really knows his stuff. He took “understanding” to a whole new level. Rather than being content to tell us how view controllers worked (which I would have been perfectly content to have had him tell me), he instead dropped us into gdb, set a break point on

-[UIApplication setDelegate:]

and led us up and down the rabbit hole call stack, stopping only to explain to us how to pick out arguments to objc sendmessage and how to inspect and alter objects on the fly. He told us to go look up Apple’s “Debugging Magic” docs on Mac OS X and iOS, and although I’ve barely scratched the surface of them, I’ve already fixed a problem I’d had previously with the application of

(gdb) po [[self view] recursiveDescription]

which I already know is going to save me a ton of time.

###You know what @BMF stands for, right?

What is Step 2 Monday night was the indescribable Mike Lee’s session on Product Engineering. He was, as always, both the consummate educator and the consummate entertainer, even when the public address system utterly failed in the most painful way. He is also the first person to ever finally explain Step 2 to my satisfaction, and he did it in full Mariachi regalia, complete with backup band. A longer write up of his talk is here.

I heard some grumbling toward the end of Mike’s talk, when he started talking about Appsterdam. In the TUAW writeup I linked above, it even said “It was hard to tell how the developers in the audience felt about the Appsterdam pitch.” Well, I was a developer in the audience, so I’m going to take a couple of paragraphs and throw in my two cents.

I’m going to stereotype somewhat here, but I’m going to say that I met and talked to two kinds of developers at 360iDev: those whose income is directly dependent on how their Apps sell, and those that are expecting to get paid even if the Apps they are writing don’t sell at all, and Appsterdam plays much better in one camp than the other. I’m in the first camp - at the moment, I have no source of income except for the revenue my Apps make and the money I’m paid to write Apps on contract. It’s hard being a true indie developer. It’s scary knowing that if an App I worked on for months doesn’t sell (or I can’t work for health reasons), I don’t have a safety net except my own savings. It’s even scarier knowing that I’m living my life one patent-troll away from bankruptcy, because even in the best case, my Apps are unlikely to sell enough to pay the legal fees for a patent lawsuit in the U.S.

So even though I doubt I’ll ever move there, I like that the Appsterdam crowd is trying to help the indie developers. I like that there’s a place I can go and work where I can innovate and not starve if I fail. It encourages me to try to be a better indie, whereas most of what I read makes me want to go get a “real job” so I can support my family without all the fear. I think that the developers in the other camp - the W-2 employees whose paycheck is going to show up next month regardless, are less interested in Appsterdam and what it stands for. They want to learn about cool coding tricks, and they don’t want to think about legal and health care issues, so I think for them, that part of Mike’s talk wasn’t relevant. That was at least true of the group of folks that were sitting in front of me.

###“I really don’t care, and it’s better that way, and I have the video to prove it”

Tuesday morning was David Whatley, telling us about how his Results Only Work Environment experiment contributed to the success of their latest game Tiny Heroes. It was a great talk, but the punch line was amazing. It was a set of videos of his employees answering the question: “how much would someone else have to pay you to give up the Results Only Work Environment?”. Their answers were priceless, occasionally even literally. To a person, they each said it would cost large amounts of additional money to get them to work under any other management system.

###Memory Management and Crowd Control

Next was Dave Batton’s iOS memory management talk. It started off pretty well, and I was enjoying it, but there was an attendee in the crowd (who was typing away during the first part of the presentation) that objected to an edge-case in one of the examples that he hadn’t been paying attention to, and the talk quickly devolved into an argument between the speaker and a few members of the audience. I found it very disappointing, because I would have liked to hear what the speaker had to say.

###Xcode 4 Tips and Tricks

Next was Kendall Gelner’s talk on Xcode 4. I had taken Kendall’s Xcode 3 workshop on Sunday in 2010, so I knew it was going to be a good talk. I wanted to take his workshop again this year, but I decided that I had more need to learn in the Photoshop area than XCode 4, so I compromised and went to this session instead. It was great, as I expected. I recommend you check out this git repo: https://github.com/KiGi/XCode4Customization which contains the coolest stuff from the talk.

###How to make a game in 5 easy steps in front of a live audience

Sample GameThe next talk I went to was Intro to Cocos2D by Ray Wenderlich and Rod Strougo, who wrote the Learning Cocos2D book and who released their slides and sample code from their talk. They spent about half their time telling us about cocos2d and what it was, and the other half literally building a game right in front of us. They started with a few previously-prepared PNGs and WAV files, created a brand new cocos2D project in Xcode and did everything right in front of us, and it wasn’t rushed, and it was explained as they went. That it worked despite Murphy’s Law and the ever-present wrath of the “Demo Gods” is a testament to their skill as presenters, knowledge of the subject, and the simplicity of the cocos2D framework.

###Good Product + Good Relationships = Good Press

The last session of Tuesday, I had a real quandary. There were three sessions I wanted to go to, the great Marcus Zarra was doing a talk and I wanted to go because I learned a ton from watching his Core Data Video series.
Michael Schneider was giving a talk on Legal Issues, which has been on my mind a lot lately since Lodsys. But the session I attended instead was Jonathan George’s session on Hacking the Press.

Jonathan’s talk was just what I needed. Being an introvert, talking to people doesn’t come naturally to me, and I’d much rather avoid it. But when he laid out his experience building relationships to get press for his Boxcar App (which is really handy by the way - I use it many times a week), it was great motivation for me to put the effort into building relationships. When I’d rather not do something, it’s easy (for me at least) to convince myself that it wouldn’t help anyway, and to put it off or never get around to it. By giving us concrete examples that taking the time to build relationships makes a huge difference, even for someone like me who wasn’t born a “people person”, he gave me ammunition I need to convince myself to send those emails.

###It’s the end of the Console Wars as we know it, and I feel privileged

The general session to close Tuesday was Michael Gile on hacking the Apple TV2. There’s a good write up of it on TUAW, so I won’t say a lot about it, except to say that it made me feel that, as an iOS programmer, I’m ever better positioned to be in demand over the next few years than even I had expected.

###performSelectorOnMainThread, you are dead to me

I skipped a couple of sessions Wednesday morning to go to the labs, so the next talk I attended was Nathan Eror’s talk on Queues and Grand Central Dispatch. He put the code from his talk on github. It was an abbreviated talk because the previous session ran over, but Nathan handled it like the pro he is. He told us what got called on the main thread and what didn’t, how to make calls concurrent or not, how to use a queue as a barrier to control access to a shared resource (in this case an NSMutableArray) and even how to use GCD to create a singleton instance in an ARC-compliant way with dispatch_once(). It’s going to save me a lot of time, and help me write better code.

###On Consulting, Contracts, Contrariness and Contention

The last talk I went to was by Andria Jensen of Appsolute Genius. She had prepared a very detailed talk with explanations of how she runs her successful App contracting business. She even included real numbers and percentages and data that many companies are too proprietary to share. Unfortunately, though, she didn’t get very far into her presentation and didn’t get a chance to finish. Sadly, some members of the audience didn’t like the way she estimates, or charges, or proposes work, or does something else and, instead of realizing that there’s more than one way to do things and trying to learn from her experience, they interrupted her and argued and robbed the rest of us of the opportunity to benefit from the information she had wanted to share.

##Wrapping up (for now)

There’s still more to tell - I haven’t touched on the Labs or the Parties or the Networking, but this post has already gone on too long. I’m going to have to leave those for another time.

In short, though, if you have a chance to go to a 360iDev, you’re doing yourself a disservice if you don’t. It’s a great conference and an even better value. I can’t recommend it highly enough, and I hope to be attending again and again.