Swift and Cocoa: The Odd Couple

Swift and Cocoa are like The Odd Couple. Two people, with drastically different personalities who are joined by fate to live with each other.

Swift and Cocoa / Odd Couple

The Odd Couple Theme Song

One prefers things very explicit and will check and double check things are in order before starting a task. The other is happy letting things happen haphazardly, as things flow; the details can be worked out later.

One would only ever allow a single item type like socks in his drawer. The other is happy to store a mix of things in his.

One is very cautious with things handed to it, slowly unwrapping them. The other is extremely trusting and uses stuff passed to it without question, result be dammed.

Philly CocoaHeads Website Relaunch Project

I haven’t had an active side project in the last few months. When asked I would tell people looking for a new job was my side project. Now that I have that new job search (and my Girl Develop It class behind me it’s time to kick something off; we’re going to rebuild the Philly CocoaHeads website!

When I took over the local chapter of CocoaHeads here in Philly (back in 2010 or so) the previous organizer had a Ruby/Markdown publish system setup. It was kind of neat but involved a lot of setup on the client box to get up and running. I had a few people posting to the site so rather than set up that system on each individual’s box I opted for WordPress. The WordPress site has done ok for us but we’ve been growing a ton and doing a lot more over the last year (workshops, video capture of meeting presentations). I’d love to start to centralize things like keeping track of our members and our money, overall there is a ton that could be automated and it’s time to make it happen.

I don’t want to do this alone and I also would love to start documenting the project as it unfolds. To get started we have a brainstorm session scheduled during Side Project Saturday. If you want to participate please consider stopping by. If you can’t stop by, but want to participate, let me know and maybe we can setup a Google Hangout call-in option. To capture notes I’m going to use Trello. The board is live and open to the public. (You will need to login with a Trello account to edit.) Feel free to start to document your ideas today.

Questions for Your Job Hunt

Jobbies

While looking for a new job last year I slowly built a list of questions I would ask the various companies to help better understand if they were a good fit for me. Some of these questions are ripped from other blog posts, like The Joel Test, but many of them were from personal brainstorming and soul searching about what I wanted.

Hopefully this list helps those out there looking for something new.

Culture

  • Pretend I know nothing about the company, how do you describe it?
  • Who owns the company? What are their interests?
  • How would you describe the company culture?
  • What are its core values?
  • How is this evident in everyday action?
  • There is a great TED talk by Simon Sinek that has a simple but powerful model for inspirational leadership all starting with a golden circle and the question “Why?” He describes a circle with the word Why? in the center and then moving outward, How? and then What? — Simon explains that most people can answer the What, what do they do? — some fewer still can answer the How — but the truly successful can answer the Why? Why do they do it? Why does your company do what it does? Why does this company sell paper towels instead?
  • What can I see / download as a public example of your work?
  • Name something the company is struggling with and how you are trying to fix it?
  • Name something the company excels at? What are the lessons to be learned?
  • What’s going to change at this company over the next year? three years? five years?

Process

  • How does upper management communicate with the company at large?
  • How are projects and/or teams organized?
  • How do teams communicate?
  • How do you plan and track work?
  • How do you estimate?
  • Do people work on multiple projects at the same time? If so, how is time broken up?
  • What is the process like from napkin idea to deployed feature / service? Where am I in this process?
  • Who decides what to work on?
  • Who is the designer? Do they work closely with the development team? How much to they appreciate, expand on norms of the various platforms?
  • Is there a standard process for the handing off assets, specs, motion simulations from the design team to the development team?
  • Do you ever do retrospectives? If so when? end of the sprint? end of the project?
  • Do you ever have internal projects? How do they work?
  • How would you split up my weekly hours between different responsibilities?
  • How is customer support handled?
  • Do I have any interaction with the customers?

Process (Client-based work)

  • If I’m working on a client project, what is my interaction with them?
  • How does pricing work for client projects? How is development involved in coming up with these figures? What would my responsibility be in this?

HR

  • How do you run employee reviews?
  • How do you gauge employee happiness?
  • Are there any company events? travel?
  • Would I be required to interview people?
  • Do you have an official interview process?
  • Do new candidates write code during their interview?
  • How does overtime work? Are people compensated for overtime?
  • How does vacation work?
  • Are there sick days? Long term sick days?
  • Can people work from home? Do they?
  • Is there a 401K?
  • Is there a health plan? Dental?
  • Is there on-site parking? Do I have to pay for it?
  • Is travel involved for this job?
  • Do you have a company manual? Can I have a copy?
  • Do you have an org chart? Can I have a copy?
  • How is the development group organized?
  • Who do I report to? Who reports to me (if any)?
  • How transparent is the company with regard to it’s goals, it’s plans, it’s money?

Education

  • How do you make sure the staff is continually learning?
  • Do people get a dedicated budget for things like attending conferences, purchasing books?
  • Do you allow people to travel to speak at conference during company time?
  • How do you track staff technical skills? Current abilities, wanted improvements?
  • Do you have an official mentoring system?

Tools

  • Do you use the best tools money can buy?
  • Do you have testers?
  • Do you do hallway usability testing?

Code

  • Do you use source control?
  • Can you make a build in one step?
  • Do you make daily builds?
  • Do you have a bug database?
  • Do you fix bugs before writing new code?
  • Do you have an up-to-date schedule?
  • Do you have a spec?
  • Do programmers have quiet working conditions?
  • Do you do code review?
  • Do you do pair programming?
  • Can I have a tour of an active project’s code base?
  • How many developers are there?
  • What is the proficiency ratio between senior level / mid level / junior level developers in the company?
  • Do you let people jump around from stack to stack or do most people stay focused on their specialty?

End of list. Best of luck with your job hunt!

My New Job with the Big Nerd Ranch

As I posted on Twitter a few weeks ago, I recently accepted a new job with the Big Nerd Ranch. The job itself starts tomorrow and I’m really excited.

The Big Nerd Ranch and its founder Aaron Hillegass have already made a huge impact on my career. When I first started to learn to program for Mac OS X I turned to Cocoa Programming for OS X. It was the, then unlabeled, first edition of the book and it was a game changer for me. Not only did I fall in love with Cocoa but the book itself was incredibly well written and helpful. Later while attending MacHack I was even able to get a pre-conference day of training from BNR. It too was great and the teacher, Chris Campbell, was really helpful with me getting my MegaManEffect hack to work. (It even took second place in the hack contest!)

These days Big Nerd Ranch is still known for their awesome books and educational classes, which now cover way more than just Macintosh and include iOS, Android, Rails and a much more. The Big Nerd Ranch also codes for hire, doing consulting projects for various clients big and small.

Myself, I’ll mainly be teaching and preparing new teaching materials to start. To think, I’m going to be helping craft the very books that got me started — it’s a real honor. In time I’ll probably also help do some consulting but for now, the focus is on education.

I’ll work remotely from Philadelphia and travel as needed for the classes (probably 1 week every 5 or so) and to checkin with my coworkers down on the ranch in Atlanta on occation. I’ll post info on my travel plans as they evolve. I’d love to connect with other CocoaHead chapters and various “conference friends” during my travels that I’d otherwise only see at WWDC and such.

To the company I’m leaving, Tonic Design (formerly DmgCtrl), I want to say thank you. DmgCtrl took me in with a very warm welcome when I was in a bit of a rut doing solo consulting (both creatively and emotionally) and I’m extremely grateful to them for the opportunity. Over the past year+ we’ve built a lot of cool stuff together and I wish them the best of luck moving forward.

Anyways it’s going to be an exciting fews days as I get familiar with all the internal Big Nerd Ranch stuff, and to my new coworkers who might find this, I’ll see you in Atlanta for a week of introductions and geeking out real soon.

Girl Develop It: Introduction to iOS Development

The Introduction to iOS Development class I’m teaching for Girl Develop It is open and tickets are for sale.

This class will provide attendees an introduction into iOS development through a mix of lecture-style presentations and lots of hands on coding exercises that in total will demonstrate what it is like to be an iOS developer.

The 2-day class costs $100 and will be held on Saturday Feb 7th and Sunday Feb 8th.

If you know of a woman in the Philadelphia area who is interested in iOS please let them know. Thanks.

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.