I’ve been building apps for Apple platforms within startups for more than 8 years. As a senior iOS Engineer, I am excited to mentor other engineers and build a cohesive team better that than the sum of its parts.


A list of core competencies and experience…

Project Structure and Automation

A well-structured project can encourage well-factored and better-structured code. I am experienced at refactoring projects into multiple frameworks and Swift packages, making core business logic available to additional apps. This separation helps junior engineers develop a better understanding of how to separate objects and adhere better to SOLID principles. This increased modularization improves testing, compilation time, and can help with progressively adopting new Apple technologies.

Humans make mistakes. Consistent quality-products require automating away human error, with the added benefit of saving time too. It is important to stay aware of where the pain point of a person and teams workflow is and take the time to solve it.

  • Xcode Targets
  • Swift Package Manager
  • CocoaPods
  • Swift Package Plugins
  • xcconfig and project configuration
  • Bash Scripting
  • Optimized build dependency setup
  • Scripted build product customization
  • SwiftGen
  • SwiftLint
  • Fastlane + Bundle
  • CircleCI Configuration
  • Swift-Danger Configuration

Document and Communicate

Engineering meetings without notes or a documented solution may as well have never happened. People misunderstand each other and memories are fragile. Despite my own dyslexia (or maybe because of it) I am an avid documenter of the systems I work with. Most importantly the time spent writing has proven to save time in making sure we all are building the same thing.

  • Documentation Comments (DocC).
  • API Model descriptions.
  • Code comments explaining “why”.
  • Software Design Specification (SDS).
  • Shared Meeting Notes.
  • Gratuitous use of linking between Slack, Github, and documents—forming a clear trail of deliberation.

Frameworks and Technology

I began developing for Apple platforms using Objective-C*. My career grew as Swift was released and matured. I have written Obj-C adapters to bridge between both C# and C++. I am competent at bash, Ruby, and other scripting languages. The architecture patterns I have worked within are MVC and MVVM, while I continue to read up on the other interesting options like TCA, RIB, and VIPOR. In general, these more defined patterns become more helpful when working on larger teams, which haven’t been appropriate within the small startups I have been a part of to date.

* Technically first MacOS code I wrote was in C using CodeWarrior, but it was an absolute mess!

  • UIKit
  • SwiftUI (iOS & macOS)
  • Swift Concurrency
  • DispatchQueues (GCD) & NSOperations
  • AVFoundation (Video Capture, Compression, Transcoding)
  • Alamofire, URLSession, Codable, AnyCodable, API clients, etc…
  • Accessibility
  • Local Authentication
  • CloudKit
  • MapKit
  • CoreData
  • WebKit
  • Swift Argument Parser
  • XCTesting & Swift Testing
  • Hummingbird (HTTP Server)

Maintainable Evolving Code

Throughout my career, Apple has brought on many technology transitions. The natural evolution of software includes even more transitions. These take time, planning, and are made easier with well-structured code. These transitions often can’t be easily defined in a single issue or even epic. I take pride in managing these long-term conversions by building team consensus early, laying the groundwork in each new PR, and steadily moving the codebase in a clear well defined direction.

  • Objective-C -> Swift
  • UIKit -> SwiftUI
  • Dispatch -> Swift Concurrency
  • NSOperations -> Combine
  • Framework Targets -> Swift Packages
  • Adding Content Guides, Asset Catalogs, Code Generation, etc..

Leadership

I’m an experienced leader and hiring manager that enjoys fostering the skills and growth of my teammates. I believe in servant leadership and model the actions I expect out of the team. Engineers do their best when they feel ownership over their work. This takes careful trust while clearly defining expectations and requirements. I make myself open to critique, encouraging honest feedback, while also being sure to give clear actionable feedback to those I work with.

  • Cognoa: Led the iOS team as a Senior Engineer with two other engineers, including hiring.
  • Pixar Shorts: Led the technical aspects of the Buzz Lightyear Home Video project.
  • Rhythm & Hues: Led a 15-20 person team in the modeling, texturing, lighting, and compositing for a competitive bid project.
  • 4D Inc.: Managed the annual Developer Conference, with 350+ attendees and staff.

Custom Tools

When you see a problem, solve it. It’s important to watch for the pain-points within your team’s efforts and imagine what would make the work faster, easier, or better for everyone. I’ve taken the initiative throughout my career to build tools that make an impact:

  • When client app development slowed because of the project’s server-driven UI, I made a deeplink decoder and a dummy server to unblock both the iOS and Android app teams.
  • Reduced render-farm usage and sped feedback time by building a tool to calculate frame ranges to be rendered, excluding ranges that have already been rendered. This frame-range math made it each to speed feedback times.
  • When running webinars, I made a macOS HUD app to make it more clear when the mic was muted or live. (Moving to Zoom made this obsolete.)

Training

My original Apple Platform development training came from the fine team at InvasiveCode. My thanks to Geppy Parziale and Eva Diaz-Santana for the excellent foundation in the Cocoa design patterns.

Invasivecode Logo

Close
Go top