Curriculum Vitae
Some facts, first:
- Date of Birth: Sep. 11th, 1987 (36 years of age)
- Location: Bielefeld, Germany
Projects
I write regularly about clean coding practices here, and about knowledge management over at the Zettelkasten Blog.
App and Book Releases
This is a chronologic list of my own publications and major app releases. I still work on the apps and ship updates. A freelance work timeline is at the bottom of the page.
-
2019: Make Money Outside the Mac App Store (2nd Edition), a rewrite and large update of the instruction manual for selling and distributing macOS apps
-
2018: The Archive, macOS note-taking & knowledge management app.
Tech Stack: Swift / MVVM / Layered architecture with functional core / RxSwift functional reactive bindings / unidirectional flow with ReSwift / TDD / full stack web development
-
2017: TableFlip, macOS table editor with Markdown, CSV, and LaTeX compatibility.
Tech Stack: Swift / Objective-C / MVVM / Layered architecture with functional core / unidirectional flow of state with ReSwift / TDD / full stack web dev
-
2016: Make Money Outside the Mac App Store (1st Edition), an instruction manual for selling and distributing macOS apps.
-
2015: Creating Multi-Process Mac Applications, e-book.
-
2014: Exploring Mac App Development Strategies, e-book.
-
2014: Word Counter, measures your output as a writer on macOS.
Tech Stack: Objective-C / VIPER and MVVM / Layered architecture / TDD – Ported partly to Swift, but still mixed code base.
-
2014: Tapping Test, iOS app for ME-Improved.
Tech Stack: Objective-C / Core Data / MVC / Layered architecture
-
2012: Calendar Paste, iOS app, and my first ever App Store release.
Tech Stack: Objective-C / Core Data / MVC / Layered architecture
Talks and Workshops
-
2023-09: Whole-day Legacy Code Retreat-style workshop at Macoun 2023. Focus on making confusing code with weird logic intelligible and testable.
-
2022-11: “Making Your App Extensible with JavaScriptCore”: a CocoaHeads talk about safe JavaScriptCore plugin systems.
-
2019-10: Whole-day code reatreat-style workshop split into “TDD 1: DRY & Clean” and “TDD 2: Test-driven” at Macoun 2019.
-
2018-10: “Code-Generierung mit Sourcery am Beispiel ObjectBox” (German), a talk about Swift code generation with Sourcery, and how my then employer ObjectBox used this for the Objective-C/Swift library integration.
-
2017-10: “RxReSwift - Betriebsunfälle & Lehrgeld” (German), a talk about using RxSwift and ReSwift in my apps.
-
2017-02: FastSpring Webinar “Beyond the Mac App Store: A Practical Guide to Go From Code to Cash” (Watch a recording), a 45-minutes-webinar where I showed the underpinnings of publishing macOS apps on your own, and we discussed how all this works with FastSpring.
-
2016-10: “Pflegeleichte Software” (German), a talk about maintainable software and seemingly forgotten architecture patterns.
Code is not something you only write once. You have to be able to maintain software. Without the right mental models, however, trends like MVVM and VIPER won’t help. We get ideas for the structure of an app from software architectures and use ReSwift to model the flow of information.
Original German Abstract
Code ist nichts, was man nur einmal schreibt. Software muss man pflegen können. Ohne passende mentale Modelle helfen Trends wie MVVM und VIPER aber nicht. Aus Softwarearchitekturen holen wir uns Ideen zur Struktur einer App und nutzen ReSwift zum Modellieren des Informationsflusses.
Open Source
The list of individual repositories would be too long, so I’m referring GitHub organizations/teams and accounts instead:
- My personal GitHub account shows contributions, but most of my projects are organized in teams:
- GitHub team of Zettelkasten & The Archive-related Stuff
- GitHub team for book manuscripts and samples
- GitHub team for personal projects and private project collaborations. The latter you can’t see, though :)
Libraries
To bootstrap a macOS app:
- AppGuideOverlay
- BetaExpiration
- CrashReporter
- ErrorHandling
- Preferences for macOS (co-maintainer)
- TrialLicensing
- WhatsNewKit
User Interface:
Background services and architecture:
- ReSwift, a Redux-inspired unidirectional data flow library. My favorite open source project of the past years because of the people and its impact. (Co-maintainer)
- RxFileMonitor
- SearchExpressionParser
- SwiftXattrs
- SwiftCSV (package maintainer and group admin)
Apps and Games
- NowNowNow: a cross-platform
/now
-page reader using SwiftUI / The Composable Architecture (TCA). - Cacti VS Llamas: a turn-based game (WIP)
- InfiniteCanvas: drawing app concept.
- TermQuickRPG: Terminal adventure game rendering in ncurses, written in Ruby.
Jobs, Freelance Gigs, and Project Timeline
Also, check out what I’m doing now.
-
🌟 Since 2013: Self-employed indie app developer and freelancer. In short, I’m creating macOS and iOS apps that help people get stuff done in a delightful way, I write books, and give talks and workshops.
-
May 2023–Dec 2024: Starface
Tech Stack: Swift / SwiftUI / MVVM / Reactive Programming (Combine) / Swift Structured Concurrency
I was hired for a macOS app client rewrite in SwiftUI for Starface’s softphone client.
Using SwiftUI for a large and complex code-base with all these moving parts taugt me a lot about the difference between small tutorial-size examples and enterprise application-size code.
Starface has a very cool engineering team, and a super exciting “problem space” because there’s so many moving parts and events going through a phone app: contacts management, faxes (yes, faxes!), chat, phone calls, conference calls and conference management. -
Jan 2020–Apr 2023: Timing
Tech Stack: Swift / Objective-C / SQLite / Protobuf / Reactive Programming (RxSwift)
Working on the macOS time-tracking app Timing. Adding features (most notably integrations with other apps), fixing bugs, and overall trying to be helpful :) During three years of working with Daniel Alm and the rest of the gang on the app, Timing felt like home – very much like working on my own apps.
-
Aug 2021–Aug 2022: “Tap Challenge” Game
Tech Stack: SwiftUI / Reactive Programming (Combine) / Swift Structured Concurrency / TDD / Google Firebase Auth + Storage / full stack web dev for Google Firebase account management
A fully SwiftUI app targeting iOS 15 devices, using Combine and async/await to great success (and delight!). We use Firebase Cloud for user authentication and storing data. Using Apple’s new tech was very educating, and working within our small team was a pleasure.
I project-managed our team of 3 (2 developers, 1 designer), planned the application in cooperation with the client, and defined the Scope of Work. Apart from the usual app development, there’s been a lot of work behind the scenes.
Using Firebase as a backend to store data and create and manage user accounts in the iOS app was one thing – but then whipping up the HTML/CSS and JavaScript to get a web portal to login and manage one’s account was fun because so much came for free and I could try out modern web APIs for a change.
-
Jul 2019: tapvis iOS UI Automation (Web Archive link).
Tech Stack: Swift / MVVM
Integration of FastSpring purchases and license verification in the app, an onboarding app module, and some additional bugfixing and refactorings to match macOS best practices. With my macOS expertise, I could help figure out what exactly needed to be done to achieve the desired result so everyone was on the same page regarding the effort and scope.
I was delighted to work with Christian! He supported the development of our macOS app and went way beyond the limited scope of his appointed tasks: he conscientously delivered results within the time frame he estimated in advance, and on top fixed additional bugs in other parts of out app. He also contributed to the definition of the work requirements and thus removed from our way in advance.
—Steven Reinisch, CEO Quantosparks GmbH, developers of TapvisOriginal German testimonial
Ich bin von der Zusammenarbeit mit Christian begeistert! Er unterstützte uns bei der Weiterentwicklung unserer macOS app. Nicht nur, dass er die ihm angetragen Aufgaben in der von ihm geschätzten Zeit gewissenhaft erledigte, er hat auch Bugs gefixt, die nicht Teil der Aufgabenbeschreibung waren. Darüber hinaus hat er sich aktiv bei der Definition der Arbeitspakete eingebracht und somit mögliche Stolpersteine früh aus dem Weg geräumt. Ein klasse Typ!
-
Feb 2019: Sub-contracting to develop an iOS app for ADinfinitum Inc..
Tech Stack: Objective-C / Core Data
-
May 2018–Nov 2018: ObjectBox: iOS Software and Library Developer
Tech Stack: Objective-C / C / C++ / Protobuf
For the existing C++ library core, I developed the Objective-C++ wrapper and exposed a user-friendly Swift API that was very unintrusive: developers could keep writing plain Swift objects without inheriting overhead from the library. The iOS project was eventually frozen in favor of a focus on Internet of Things applications.
-
2016/2017: Chef.One (Web Archive link): Social dining platform.
Tech Stack: Swift / VIPER
I was involved in getting the first iOS app release up and running for this tasty start-up from Hamburg, Germany.
-
2011–2018: Bielefeld University, Project “Peer Learning”: student peer support, coaching, workshops
We did really cool stuff here: we planned and executed workshops for nearly every skill students at University could need. Examples: memorization, PowerPoint presentations, body language, and time management. We coached 1:1 on these topics and others, too.
-
2012–2014: Department of Philosophy, Bielefeld University: IT-support and web development
-
2011–2012: student assistant of Prof. Dr. Rüdiger Bittner, then Jun.-Prof. Dr. Maria Kronfeldner, Department of Philosophy, Bielefeld University.
-
2007–2008: German armed forces, office and staff duty, running the office by myself at times; rank when leaving: Hauptgefreiter
-
Feb 2004: Front-end web developer internship at elephantseven, Gütersloh
I was lucky to have a supportive member of the team onboard me to their typo3 tech stack, and thanks to my prior experience with web development, I was actually able to ship features and help prepare the CMS and plan the UI. I’m grateful for the opportunities to develop in cooperation with the others, since usually students don’t get to do a lot of “real” work in internships at all. Also, I had to make 0 coffees, that was a boon and unexpected :)
Education
-
since 2008: Bielefeld University, Germany. Bachelor’s Degree in Philosophy & Computer Science.
-
2007: Abitur (A-levels / higher education entrance certification) after 13 years at school. Tested in: Physics, Mathematics, Philosophy, and German.
-
2005–2006: Taking applied computer science classes after school in my part-time at Fachhochschule der Wirtschaft (FHDW), Gütersloh, Germany.