An “App Architecture” Kata

At the last Side Project Saturday CocoaHeads event I ran a special little exercise. Here was how I described it.

I’d like to run a little event, (maybe after lunch?) for anyone who wants to participate. Should take like 45-60m.

You will be presented with a mobile app idea. It’ll be fairly basic and we’ll list all of the behaviors we need and some we’d like in the future. You will then pair up with someone and pencil out how this could be architected. Each group will then present their app architecture and answer questions, accept feedback from the rest of the group.

From Wikipedia: A code kata is an exercise in programming which helps a programmer hone their skills through practice and repetition. The term was probably first coined by Dave Thomas, co-author of the book The Pragmatic Programmer, in a bow to the Japanese concept of kata in the martial arts.

App architecture is one of those things I’m always trying to improve so I thought it would be cool to see how other people would solve similar problems.

We had six people participate. We started with a brief explanation of the app we were going to sketch out an architecture for. Then, we broke up into pairs of two. After about 40 minutes we came back and showed the group what we came up with.

Kata App Wireframe

The one group ended up documenting behaviors per screen. They did a great job of documenting the little things that developers might look over as assumed behavior (which add up fast). It was pointed out that it’s also a great idea to document the things you will not be doing since there tends to be lots of great ideas during brainstorms but when you are planning a sprint of a version target you need to be clear about what’s in and what’s out.

The other two groups (including my own) were more visual, using tools like OmniGraffle to draw representation of models, controllers and services. There was some common separation of responsibilities with slight differences: the one group making an “APIStore” that combined the state and networking and another (mine) that favored separate “Network” and “Session” managers.

Some of the more high-end abstractions I introduced included a FormController that could take a Form model (that had say a collection of FormFields) which described the form at a model level and then through a FormController might be able to render the form on screen through a TableView for a generic representation or maybe through specific outlets to a custom layout. It could also handle things like input validation. True, this is overkill for our one simple login form but assuming this app might grow to contain edit person forms at some point it might not be too bad of an idea (and plus the whole purpose of this event is to discuss interesting ideas).

I also took the time to introduce a pattern thats been out for a while but is a recent addition to my personal toolkit, that being ViewModel. You can read more about MVVM on objc.io. In short it’s a great way to centralize the code you use to transform model objects for user interface purposes and keep that logic out of the model.

In conclusion, everyone who participated seemed to enjoy the exercise and I would encourage you to replicate it amongst your own peers. It’s still up for debate if “Side Project Saturday” is the best venue for such things as many who come have their own stuff to work.

CocoaConf Boston 2014 Recap

After getting a solid recommendation from Curtis, who attended the Washington DC variant, this weekend I headed north to CocoaConf Boston. It was my first CocoaConf and so I went into the weekend with a lot of blurred expectations.

Spoilers: I say first with intention. TLDR; I had a really great time. The talks and speaker quality were really high and with luck I’ll be able to attend again during a future “tour”.

One of my expectations was size. I thought the attendee count was going to be a bit larger. It felt like ~130 but I’m not sure what the official number was. Not that a small count is bad for me but I’m used to educational events hosting more. I suspect part of this is that CocoaConf is hosting lots more venues now (three arguably “east coast cities” during this fall tour alone). This may make some events smaller but overall a win for the community so as to have more access for those who can’t travel far.

One thing that continues to make me proud is the people of our community. The attendees, the speakers and the event staff of CocoaConf are all incredibly friendly, approachable and inspiring. Meeting new people and catching up with old friends is a big reason why I like attending conferences and CocoaConf does a great job at supplying the “campfire” atmosphere to make that happen.

Daniel Jalkut's "Quit Your Job" keynote

As for my favorite talks I’ll mention a few:

Daniel Jalkut’s “Quit Your Job” keynote and Rob Rhyne’s “Make Them Care” session were both very inspirational. I leave Boston really hungry to jump into some side projects of mine and get back into the product game outside of my client stuff at work.

For technical wisdom I have to give it up for the full day “Swift Kickstart” workshop Daniel Steinberg ran as well as the Swift and Objective-C: Best Friends Forever session by Jonathan Blocksom. CocoaConf Boston is now cemented as the place and time where I really started to appreciate what Apple is trying to accomplish with Swift. This isn’t to say we aren’t in for a bumpy ride but at least now I have a good frame of mind as to the “why” behind it all.

Finally, it was great to meet the people that run CocoaConf. Rather than some large corporation, CocoaConf is actually a family affair. Dave Kline and his family run most of the operation and they seemed very dedicated to making sure everyone had a good time. For all their hard work I say thank you and hope to see you all again soon.

Designing & Planning Your iOS App Workshop Recap

Workshops are a new effort from the Philly CocoaHeads group. Basic idea is: one workshop every other month, the workshop is a one day 5-6 hour event, that covers a single topic. Our first one was on Intermediate Objective-C and our second one, which was held last Saturday, covered Designing & Planning Your iOS App.

Kotaro Teaching

Overall the workshop went well. Kotaro Fujita was our main presenter and did a great job of alternating lecture and hands on exercise. At the end, attendees presented what they had worked on and how their app ideas were evolving. The crowd was great with lots of great feedback too. Some of my notes:

  • When brainstorming features consider using index cards or mind mapping software. I like MindNode Pro and Trello.

  • Spend LOTS of time wire framing, sketching, etc. Be mindful to separate your design time from your production coding time. It’s easy to fall into trap where you are coding things that will not work and this is very expensive. Way better to validate your designs with prototyping first.

  • Document what problem each screen is suppose to solve. Also document the emotions you expect the user to have. For example, on first launch what is your user asking themselves, how can you help educate them? Are you using verbiage they understand? How fast can you deliver your first WOW moment?

  • Get users involved as soon as possible. Preferably before you start to code. Should have some level of idea validation before starting.

  • Once you release a build, make customer support your highest priority. Answer every email/tweet within the hour. Let them call you. Doing this is a huge part of getting people to trust you and then later recommending you and your product.

Related Resources

In the spirit of the talk I wanted to share some other related resources.

So there are two great online courses going on right now regarding starting a startup people might be interested in:

Some of it is a little heavy on the VC-funding but otherwise lots of great things to think about.

Another video I find really helpful to watch and re-watch whenever thinking about which projects I want to work on: How great leaders inspire action by Simon Sinek. His explanation of “Why/How/What” is very inspiring for me.

For some design fundamentals consider reading Design for non Designers by Robin Williams and Don’t Make Me Think by Steve Krug

Finally I’ll mention the the Lean Startup Book which I reviewed back in 2013. It still is a favorite book of mine with some awesome ideas on working fast and based on validations and learning.

Quick CocoaLove Recap

CocoaLove was a huge success. All of the talks were well received and the attendee side conversations vibrant and interesting. I think I saw 2 laptops open all weekend which to me is a huge sign people were engaged with our content. If you missed out, check out the CocoaLove site for some highlights of our tweet/photo live stream.

While they’ll never capture the event in its full glory, we did record the presentations and will be editing them over the next few weeks to make the available on the web. To find out when the videos are up I’d signup to the mailing list or follow the @CocoaLoveConf twitter account.

I want to thank my fellow organizers, the speakers and the attendees for helping provide a weekend I’ll remember forever.

In particular I’ll give special props to Curtis whom sacrificed countless hours attending to hundreds of details that resulting in a level conference quality that is hard to achieve. Great job!

Phone Names

I love coming up with fun names for my computer hardware. My computers typically are named after video game characters, for example my Mac mini CI server is called GLaDOS. She loves to test. My phones have similar names.

Ash's Pokemon Dex

For my first iPhone, an iPhone 4, I named it Dex after the device Ash uses in Pokemon to look up information. (Not to be confused with the app of the same name I made months later to do just that.)

Navi

For my next phone, an iPhone 5, I choose “Navi”, named after the sometimes helpful yet interruption loving fairy side kick of Link in Zelda: Ocarina of Time.

Ziggy

For my new iPhone 6 I went with Ziggy, as in the device / computer AI from Quantum Leap. Feels appropriate for a device where I put in data and ask for advice.

As for the iPhone 6 itself, I think it’s pretty cool (really like the Touch ID and can’t wait to test Apple Pay) — though I am worried about dropping this phone. Not the easiest device to grip. Feels very smooth, too smooth.

CocoaLove Tickets

It’s September, which means next month is October, which means CocoaLove is coming up fast!

We’ve got a great weekend planned and if you haven’t already secured your ticket I’d do so now since we are starting our last marketing push to sell out.

Additionally, if you or a company you know are interested in sponsoring to help show your support for CocoaLove let me know. CocoaLove is passion project from some great folks out of our local CocoaHeads chapter who have donated countless hours in helping to organize this incredible non-profit event. Sponsor support will help us reach our stretch goals and make an already great experience that much better.

See you all soon!

On disappointment with clients who are prioritizing production over quality

A friend of mine emailed me, amongst a few others, asking for advice. He’s been working as a consultant for a little while now but has been unhappy about his recent clients. He says they haven’t been focused on the quality of things as much the general production speed and it disappoints him. My reply:

Without knowing the details of your current experiences I would encourage you to look within to improve the situation. I say this not to let the client off the hook but if you wait for other people to change to make YOUR life easier you are going to be waiting a long fucking time.

One of the huge problems is that most of the clients you will interact with have no experience producing software. It is your job to explain to them what a professional software development process looks like and if all the parties are in agreement, and contracts are signed, it is your job to execute that process.

When you were in the early talks with this client how did you teach them what your professional process was like? How did they react when you explained your core values?

If they agreed to your process and then changed the rules midway, shame on them, Walk away as soon as professionally possible, preferably under the comfort of a contract clause they are breaking.

If you never talked about this and just assumed they knew what was in your head about what the process was going to be like then shame on you.

Look inward. Figure out your core values, your development process. Make this part of the marketing of the consultant you. Make it clear to those interested in hiring you, this is how you work. This is how they will get the best value from your time, their money and in the long run, the code base they will own.

And to be clear, finding good clients is hard work. I think making your own expectations clear to them is half the battle, the other half is getting out there to market yourself to more and more people so that A) in the early days you have enough options to weed out the bad clients and then B) you get to a point that through word of mouth you get more and more clients looking for you because your process worked so well for their friends. If you aren’t turning away 4 projects for every 1 you work on, you probably aren’t marketing enough.

Have a question for me? Send me an email.

A Walled Garden of Shit

From the App Store Review Guidelines:

We have over a million Apps in the App Store. If your App doesn’t do something useful, unique or provide some form of lasting entertainment, it may not be accepted.

I sure wish they would take that guideline to heart and start rejecting some of this shit.

So PBG got an iPad and found some shitty iPad games and I’d like to say these are the exception — but they’re not. There are tons of these crappy apps on the store and while it helps inflate that “total app” number for Apple it really hurts people browsing around trying to discover new apps.

WEIRD IPAD GAMES!

Philly Craftsmanship

Software as Craft Philadelphia

A community of professionals dedicated to well-crafted software

Was very happy to attend the inaugural meeting of this group last week. Was a great mix of discussion and hands-on coding/pairing. Thanks to Promptworks for hosting.

During the discussions, the Software Craftsmanship North America conference (as well as its manifesto) were mentioned. You can find a bunch of the conference videos on the eighthlight vimeo channel. Seems like pretty interesting stuff.

In related news (since I think all hosts were in attendance at said meeting), I want to give a plug to the podcast Turing-Incomplete podcast. Finally starting to catch up on this Philly showcase of talent and really enjoying the discussions. Keep up the good work!

July Recap

I’d hate to go a month without posting so here’s some random updates!

Philly CocoaHeads is going as strong as ever. Our WWDC June meeting filled the Apple Store Briefing Room to capacity (~50 people!) with lots of excited geeks. Our Side Project Saturday events continue to see some steady growth (15 people at the July event) and generate lotsĀ of interesting conversation and shared ideas. (Funny enough we were talking app bubbles right along side Edge Cases this week even though I didn’t know their topic at the time.) Finally our workshops are finally kicking back into gear with an Intermediate Objective-C course coming in August and a more beginner friendly Introduction to iOS Development course via the Girl Develop It group in September. Philly CocoaHeads is becoming so formal in fact I think we’re going to take the plunge and make it a legit non-profit group to help clean up the financial side of things.

In addition to CocoaHeads, there is also CocoaLove — our upcoming Fall conference. I’ll be doing the main talk Friday night and I’m doing my best to keep the topic upbeat despite my pessimistic tendencies. Big props to Curtis Herbert for really spearheading this event. It looks to be a really interesting and fun weekend. Buy your ticket while you can!

Through my job at Tonic Design things are busy. I have two projects right now, One is for a startup while another an internal app for a large corporation. Sadly these are not public right now so details will have to wait. That said, I’ve been spending a ton of time with iOS animations and I have two things to say. One, the Facebook Pop system is pretty cool and worthy of your time to play with. Two, I’m working on an abstraction system that should help apps with large amounts of animation stay organized. More to come soon on that.

At home, side projects have been back burnered, mostly for CocoaHeads stuff. I am spending time reading up on Swift and playing a little with Go but I’m also trying to keep plenty of time for playing games and relaxing. Can’t be focused on code all the time.

So thats it for July. Hope the summer is treating you all well. Hope to share more soon.