Szymon Mrozek
Overview
Software delivery often gets harder than it should, and my job is to make it simpler, faster, and more reliable.
Since 2016, I have worked across iOS engineering (with some backend work in Elixir/Phoenix) and engineering leadership, from hands-on product development to organization-level delivery responsibility.
In practice, that means building maintainable mobile systems with significant focus on developer experience, modular architecture, testing, CI/CD, and automations, while improving how teams plan, communicate, and execute.
I move between IC and leadership contexts depending on what the problem requires, keeping technical depth and delivery outcomes connected. I treat AI-assisted engineering as a useful tool for shortening feedback loops, but not as a substitute for engineering craft.
Technologies
- Swift / Objective-C
- UIKit / SwiftUI
- Elixir / Phoenix
- BigQuery / Looker
- Xcodegen / Tuist
Skills
- Mobile Engineering
- Modular Architecture
- Developer Experience
- Testing
- Automations
- CI/CD
- Engineering / Delivery Management
- Leadership
- Analytics / Data Analysis
- AI-assisted Engineering
Read complete story
Hey, I’m Szymon.
I’ve been working as a software developer since 2016. I started my journey with iOS, driven mostly by a fascination with audio processing. At that time, I experimented with low-level digital sound algorithms written in C and C++, and wired them into iOS applications simply to explore how audio could be transformed, analyzed, and manipulated.
In 2017, I joined Appunite - a company where I could start working on professional projects and learn what building software for real users actually looks like. Over time, my focus shifted more strongly toward mobile applications and the broader ecosystem around them. I explored various programming concepts and approaches, reactive and functional programming, modular architectures, and testing - trying to understand not only how to build software, but how to make it easier to maintain and evolve.
Alongside application development, I became increasingly interested in automation and tooling. I spent a lot of time experimenting with CI infrastructure and developer workflows, looking for ways to reduce manual work and friction. In 2018, I built a CI management tool that allowed setting up an iOS-ready environment, with Xcode and all in just a few clicks. Optimizing repetitive processes and designing systems that scale human effort became a recurring theme in my work.
In 2020, I stepped into an Engineering Manager role, leading a team of over a dozen people responsible for delivering a mobile application for one of the largest C2C marketplaces in Poland. Looking back, this was probably the period when I made the most mistakes in leadership and management. During this period, I also started taking my first steps into backend development (Elixir/Phoenix) and partially operated as a mobile full-stack engineer, which turned out to be one of the most interesting phases of my engineering experience.
Building on those experiences, in 2023 stepped back from coding and I began working more closely with other Engineering Managers in a coaching-like role. To be honest, for a long time this brought little tangible value, and I didn’t yet have a clear understanding of what effective support at that level should look like. From mid-2024 onward, this work gradually shifted toward more direct accountability and managing leaders, with responsibility extending beyond individual teams. Over time, that evolution naturally led into a Head of Service Delivery role, with ownership of the entire delivery function.
Because of that journey, my perspective spans a wide range of roles, from individual contributor, through team leadership, to organization-level delivery and decision-making. This blog is a collection of observations from that path. I write about problems I’ve solved, tried to solve, or simply observed while working with teams and organizations building software. The topics vary, but the underlying question remains the same: why does software delivery get harder than it needs to be, and what can be changed to make it work better?