Lately, I've spent a significant amount of time thinking about my career: what I've done so far and what might lie ahead for me.
To gain some perspective, I've decided to journal some of the things I've done over the last decade, and to share that with you.
So below you will find some of my projects for the Cocoa community, as well as the highlights of commercial work I enjoyed and can talk about (NDA's).
Two years prior I've moved from gamedev to iOS.
In those 2 years I've created many projects, most memorable:
- Press Publishing Platform that powered the biggest Political magazine in Poland and a bunch of kids books
- I've created an architecture that allowed to create independent components that could communicate with each other through a command system
- e.g. Picture books for kids had a karaoke effect that was never really implemented natively, instead, we could highlight text span and synchronization blocks on a music player
- Worked on very innovative interfaces for big energy corporation
- The main navigation was done in 3D with the user rotating a disjoint cube-like space
- I had to do a lot of graphics and memory optimization to make everything run smoothly
- Created mapping application for biggest POI service in Poland
- We didn't have a proper mapping solution back then, instead we had to build our tiling system that worked similar to how maps work now
I was a pretty decent engineer by the time I started working in mobile since I did a lot of complicated things during my gamedev years, like my own UI, Physics frameworks, WYSIWYG editor and full 3D game engines. Years later I'd learn that the company I worked with used my portfolio to win project bids 😂.
That being said I remember being a pretty bad team player since I never really worked with other people before, so this was the time where I learned a lot in regards to teamwork. The way I think about seniority and teams today and when I started commercial work couldn't be more further apart.
I've always worked on my own ideas because programming has always been my biggest passion.
During my first years I've met a great designer Mariusz, with him and his equally talented partner Renata we have established an Indie studio called Pixle, our goal was to build apps for kids that increase creativity rather than dampening it.
Our first app was a chalkboard simulator called Bord, the app was featured by Apple many times and was one of Apple Staff Favorite. People seemed to love it
I've decided to move to London, UK and joined a creative agency The App Business.
I've joined as a Senior and then got promoted as a Lead Engineer, people at the agency were very friendly and we had some amazing talent:
- Engineers like Marek Cirkos, Marco Sero and Jon Hocking
- Designers like Iain McConchie, Marco Sousa
to name just a few.
I got to Lead many interesting apps, the two I remember most clearly were creating a new version of Headspace with some interesting design choices and making premiere league application for The Sun, Sun+ Goals
- This was a very high profile project as The Sun paid a lot of money for licensing rights and were switching to a paywall model with the release of the application
- It allowed me to design an architecture that would scale in both number of developers being involved and the feature set
- It was so successful that after delivering the first version we were hired to do other sports apps for them and we managed to do them quickly because the architecture was modular and re-usable
Years later I'd blog about the scallable architecture ideas behind Goals and creating Headspace imperfect dot
I've started open-sourcing some of the tools that helped me develop more effectively, examples include:
- View Controller Containment
- iOS 4, the official Apple API for containment didn't exist until iOS 5
- Gesture recognizer support for Cocos2D
- Official support wouldn't appear until years later
- Automatic removal of observers from KVO and NotificationCenter
- Velocity based line drawing algorithm \
- An implementation I created for the use in Foldify. I blogged about how all of it worked
At the end of the year, my new Indie app Foldify was released
The application was a huge success:
- Number 3 Top Paid iPad app in the USA
- Featured in 400+ Blogs
- Won Apple Best of 2013 App title
- Nominated for Apple Design Award
- Feature by Apple in '10 Apps That Wow', back in those days Apple didn't write editorials about apps
The first memory of this year was seeing Flipboard talk at NSConference 5 where they showed how cool their tools are, but weirdly they didn't open source anything.
One of the cool things they showed was overlaying application information on top of the icon, on a train back to London I've blogged about how to implement that feature and then open sourced it
This was my first open-source project that garnered community attention, appearing in iOS Dev Weekly.
Since then I've been mentioned in iOS Dev Weekly 17 times
The 2 bigger open source project's I've released that year were:
- DSL-based data mapping framework that was simple to use (worked like a pure function) and didn't require you to bind your architecture to any one tool, back then 2 popular options were RestKit and Mantle both of which required inheriting from either CoreData or Mantle models.
- This framework was massively successful, used by thousands of apps including likes of Tinder
- Ruby gem that enabled to create very powerful template system for creating new iOS projects, very handy in software houses where you create projects quite often.
At the end of the year, I've decided to come back to Poland.
I've got invited to speak at my first international conference on NSSpain by Luis.
My talk was about developing Foldify
It was an amazing experience and I met so many wonderful and inspiring people in the community, I especially remember meeting Orta, Peter, Sommer, Boris, Chris but there were plenty of others.
I don't know how my life would've ended up if I didn't get that invite, I'm forever grateful!
I did over 50 talks around the world since.
First years working 100% remotely for USA clients, I've worked on a bunch of interesting startups and few bigger clients.
I've also released another Indie app that year, Apple has featured it in many categories, it's called Storest:
I did a lot of open source and community work those years:
- Shared my high-quality iOS project setup
- Project setup that integrated all the best practices at the time.
- Created Objective-C Playgrounds
- First Swift came out and people thought that playground could only be done in that language, I've used this technique for many years prior
- Originally my playgrounds worked better than Apple's for few reasons:
- Stable environment (Swift playground would constantly crash) and orders of magnitude faster due to simpler reloading technique
- Provided custom DSL for controllable values that created UI
- Supported UI interactions and had timeline view
- Worked in a full simulator environment so more in-line with normal development
- Open sourced powerful Assertion apis
- Strict error handling has always been my preference and those macros were extremely helpful in adding more checking with minimal boilerplate.
- Created a framework to ease the creation of Node based editors
- Created concept of Behaviours
- This was a concept that allowed me to share the workload in my indie apps (I've been the only engineer) by letting designers configure logic from building blocks, my talk at NSSpain is a good summary
- Created Xcode Plugin
At the end of the 2014, I've joined Mashable.
Frankly, it was an amazing and focused team on both the Engineering and Product side:
Our CTO Robyn was the most approachable boss I've ever had.
I got to work with Jim and Sami which both are amazing engineers.
At Mashable I've worked on a Video-based application for content creators, it was a really interesting project:
- Started using the idea of Flow Coordinators
- Used Flux (Redux-like unidirectional pattern) architecture in Objective-C
- Got to use my playgrounds for a lot of prototyping with the team
- Implemented a very UX friendly video provider system that allowed you to stream video while caching it at the same time for future use
I've released two spin-offs of Foldify, Dinosaurs and Zoo:
I've joined The New York Times as a Lead Engineer.
It was an amazing opportunity because the company has decided to rewrite their main application (Newsreader) from scratch in Swift before I've joined, but they didn't start on it yet.
I've got to work with a lot of amazing people:
- Engineers like Paul Yorke, Cam Pulsford, Ramona Harrison and Lauren Yew to name a few.
- Management folks like Drew Cogbill, Mika Geller and my engineering manager Adam Shott who have been nothing but amazing, enabling me to create a lot of value for the company.
This was a great opportunity to not only do achieve some technical goals but also establish a great team culture.
I wanted to lead by example and make everyone feel like the any ideas we decided were decided together, there would not be a situation where I'd enforce anything, instead I focused on proposing a lot of ideas and providing proper arguments behind them.
If I couldn't provide enough arguments to convince my team I wouldn't press on those ideas because honestly if I couldn't find those arguments then those ideas probably weren't that amazing, still managed to convince the team to the majority of things I cared about.
Some of the higlights:
- MVVM with Flow Coordinators would be base of our architecture
- Test driven development
- Everyone can question everyone else, no question is stupid and titles don't matter
- We'd automate everything we can
Shortly after joining I had the pleasure of doing a talk in Prague at mDevCamp, I decided to tackle a topic that wasn't getting a lot of attention (back then), how to create a good iOS application architecture.
This talk would become one of the most viewed iOS talks in the world with over 80 000 views.
I've open-sourced 2 major tools that year:
- Small tool that helps you react to both local and remote file changes, very useful for prototyping or when your server isn't ready and you use fake data to drive your application.
- A tool that extends Swift language capabilities by enabling AST based metaprogramming
- Back then you had to write your Equality, Hashing, and a bunch of other things
- This tool would become one of the most popular Swift Tools in the world used by over 40 000 applications, used by great companies like Airbnb, Bumble, and tons of others.
I've stayed a very hands-on lead, we decided to split our main team into multiple feature teams as our numbers grew somewhere around 2018.
I joined Platform team, which focuses on dev tooling and frameworks for all mobile products in the company, so something I've always done after-hours anyway.
I still remain one of the highest contributors to Newsreader:
Outside of technical leadership, I've focused on creating a improving developer experience for my teammates through innovative architecture and tooling, some of the things I've liked the most:
- I've built an Observable library for the company that would be a foundational block for all iOS codebases
- It's a simplified model of FRP that's easier to understand, the team at the time didn't know FRP but we wanted to get the best out of MVVM+C
- I wrote it all with TDD and 95+% test coverage
- This code is a foundation of almost everything we've built over the last 5 years
- When Combine came out we added bi-directional converter extensions
- Established best practices, wrote a lot of guides and internal talks
- Created high-level abstractions that enabled simple Snapshotting of our view layers
- Did scripting revamp that save us a lot of time when building
- Built 2-Way communication bridge between JS and Native that lets native developers add new features without dealing with any JS related code
- This bridge is almost fully automated, if a developer wants to add a new command they simply add a new case newCommand(argument: String, somethingElse: Float) and all the data mapping, type conversion is automated for them
- Based on the above bridge I've built the ARKit/SceneKit module, the platform I've helped build won us a lot of awards, including:
- Early warning system that lets us warn developers when unexpected behavior happens in the application, can also be tested via UITests.
SLO's / Performance tracking system that would lead us to easily understand what's going on in our apps
- Data snapshot system that allowed us to reproduce bugs that would otherwise be extremely time-consuming to reproduce given the quickly changing feeds News has
- Straightforward to integrate, yet a total lifesaver that removed a bunch of steps from our reproduction pipeline
- A/B testing solution
- Define a test, all the code to create UI for overrides, parsing etc. is automated
- Fully data driven BetaSettings
- Removed thousands of lines of code we had to maintain and streamlined the whole process
- Developers don't need to create UI or persistence, if they want a new setting to be available in the application they simply add a new variable and that's all.
- Helped Games team build a new game in Flutter
- Flutter has one of the best developer experiences I've seen from non-native solution, it was a lot of fun
I did a lot of talks over the last few years, but I've also open-sourced quite a few tools, most notable:
- Enables you to learn when you create retain cycle and memory looks as soon as possible, not when a report comes in from productions.
- If objects are not equal, what is the real cause for it? Indispensible if you do Testing.
- Why write UI code for beta settings if it can be automated?
It has been a crazy decade! When I moved on from game dev to mobile I've never planned to be so active in the community but seeing great folks like Orta, Felix, Peter, Soroush and Nick Lockwood share so much of their experiences with others I felt inspired.
Sharing ideas and helping other developers through open source tools and frameworks has been one of the most rewarding experiences of my life.
I got the privilege to travel the world to talk about those ideas and tools, I met so many interesting engineers on my travels, many of whom I'd like to consider friends.
I've personally touched codebases of around 50 apps, but that fades in comparsion to the fact that the tools I've created power up more than 70 000 applications.
Coming from game dev I've always been excited by two things:
- I adore and care about good UX as seen in my Indie apps, all of which has been featured by Apple
- I'm constantly driven to harder architectural problems. I want to improve the developer experience for other developers, doing so not only lets me have a huge impact but it brings me a lot of joy to learn that people are saving time and can focus on things that excite them
I feel like to be able to improve the developer experience you shouldn't be isolated from feature work. I've always found that experiencing the pain points is what lets me come up with all those ideas on how to fix it.
This is why at The Times I've established an idea of rotations so that Platform developers change teams for some time so that they can work on features and experience issues first-hand.
If you are engineering manager you might be interested in knowing that
The New York Times is hiring
I've no idea where I'll be in the next decade or what I'll manage to accomplish but I'm looking forward to whatever challenges await me.
One thing is certain, I can't imagine a life in which I'm not creating or problem solving...