You wouldn’t know it, but I had to solve some difficult and interesting problems to get Loose Leaf shipped. You wouldn’t know because I never told anyone. I never described how I built Loose Leaf’s list view before UICollectionView, or how hard it was to get the pen ink to “stick” to scraps efficiently, or what went into creating the scissors tool. I spent 2 years working without sharing anything, and it took me that long to see the missed opportunity of coding silently.
Ideas Aren’t Valuable, Sharing Them Is
I’ve made this mistake with almost everything I’ve built. I already knew that ideas are worthless, but I still held my feature ideas for Loose Leaf Leaf too close. The thought “I can’t tell anyone, they’ll steal my idea” just evolved over the years into “I can’t show this, it’s not ready yet.” A different excuse for the same behavior. Two summers ago, I even gave a talk at OwlSpark about this very topic- should’ve listened to myself!
The Cost of Closed
Over these two years, I’ve missed out on a lot.
I missed out on user feedback. I only found out that Loose Leaf has trouble on boarding new users after I’d launched. If I’d been more open, I would’ve seen that problem before launch.
I missed out on learning. Loose Leaf was my first OpenGL experience, and to say it was a struggle is an understatement. Just being open and asking about my questions and troubles could have sped up that portion of development, among others.
I missed out on teaching. Loose Leaf does more with UIBezierPath than I’ve heard about in almost any project. I’ve spent an incredible amount of time optimizing drawing and calculating with Bézier paths. I’ve learned a lot that I should’ve been giving back much sooner.
I missed out on giving. Sure, I shouldn’t give the farm away, but there’s no excuse for not open sourcing pieces of Loose Leaf’s codebase for the greater good. The Bézier example above is a prime candidate.
The Value of Open
You’ve only really learned something when it changes your behavior, so how has mine changed?
I’m being proactive about user feedback. I’ve started building up a focus group of active users (join here!) and’ve just finished up its first survey. I’ve prioritized version 1.1 development on specific user feedback.
I’m asking more questions. I’m on IRC at #iphonedev, #macdev, #cocoa-init, and #OpenGL, and I’ll be posting questions to StackOverflow more often. I’m also attending startup and iOS meetups consistently to meet and ask other developers.
I’m answering more questions – both on the IRC above and on SO. I’ve setup RSS using fetchrss.com for specific SO keywords to funnel specific questions into feedbin. I’m also active in /r/iOSProgramming answering questions when I can. I’m also sharing as much as possible on this blog – everything from how I made the promo, or app preview, or or even recorded the UITouches for demo videos, and I have many more blog posts in the queue.
I’m giving away as much as I can – most recently with the code to show all UITouch locations and sharing what I’ve learned creating an App Preview. I’m working on upgrading those dots to hand shadows and will open source that when I’ve finished (I’m even livestreaming the shadow dev every Monday). I have a list of more features in Loose Leaf that I’ll be streaming and cleaning up for open source as well.
Some people who’ve really inspired me with their open development: John Saddington who is open and encouraging about his work on Desk.pm. Notch, who released Minecraft before it even hit alpha. Shaun Inman who consistently blogged about making The Last Rocket. Asher Vollmer who’s live tweeting his development of CloseCastles.