Leading engineer teams through technical complexities requires creating an environment where technical expertise thrives alongside strong team spirit: empowering developers, sparking innovation, and bridging communication gaps. At WeTransfer, iOS mobile lead developer Antoine van der Lee has cultivated a culture where ideas flourish. In this episode, he will share his secrets for boosting productivity, nurturing personal side-project success, and building a team that thrives on collaboration and innovation. Discover practical strategies for optimizing workflows, overcoming knowledge silos, and adapting to the cutting-edge role of AI tools in software development.
Edited transcription
Despite being a full-time iOS engineer, Antoine van der Lee still finds time during the day for side projects and fulfilling family obligations. “I think I’m pretty good at creating structure and habits for myself,” he affirms.
Antoine is confident that small daily improvements that compound over time lead to great results; not building things in one frenzied week, but incrementally investing in side projects, even if it’s just 10 minutes daily: “It’s like with investing where you have the compound revenue: 1% over 100 and then 1% over 101 and so on and so on; I believe the same is true if you look at your self-deployment.” Careful planning, understanding priorities, and sustained focus on one project at a time drive this structure.
WeTransfer mobile app evolution
At his full-time job, Antoine leads a six-person engineering team at the popular media-sharing application WeTransfer, being part, over the past 5 years, of the evolution of its iOS mobile apps.
At the beginning of Antoine’s involvement in the company, WeTransfer’s mobile strategy centered solely on the Collect app, which is dedicated to group file sharing with flexible options for adding or replacing files over time. However, Antoine’s arrival ushered in a new era in the company by introducing the separate WeTransfer app, a strategic move that established two distinct concepts: Collect’s dynamic group sharing versus the streamlined, one-way transfers from the dedicated WeTransfer app.
Introducing the WeTransfer app involved reusing Collect’s existing codebase, including creating an internal WeTransfer SDK with around 20 reusable packages for networking, auth, UI, extensions, and more. Developing this SDK “was a super interesting challenge for the whole team,” Antoine recalls, which has allowed them to have these related yet distinct apps both relying on a common SDK.
Strategies for a smoother CI workflow
Despite the advantages it provides over other development practices, implementing continuous integration (CI) demands fine-tuning. In Antoine’s case, he found that running tests on everything on each commit was time-consuming and slowed down pull request workflows. For this reason, his mobile app developer team designed its CI system to only run tests on packages that changed rather than everything on each commit.
Similarly, components’ evolution within a project poses a dilemma of whether to keep components separate for independent evolution or, instead, make them shareable, grouping related components into reusable packages that can be used by other parts of the application. Antoine’s decision to consolidate everything into shareable packages significantly benefited his team’s development, enabling impressive progress in a short span. While such a decision initially required time for extracting and organizing packages, they ultimately “benefited from the code that we already had in place” and were able to save time.
Traditional testing is another CI practice Antoine optimized. As he recalls, since traditional testing tests all packages, it could take nearly an hour to test all packages, many of which were not modified and didn’t need testing; besides, if one of them failed, it was necessary to test all packages again. To solve this issue, Antoine and his team developed an open-source solution to identify package dependencies affected by changes in a pull request, reducing the time spent on testing suites to as little as five minutes in some cases. This approach, Antoine says, “drastically reduces the time spent on CI, as well as speeds up the whole team, because it applies to every developer.”
Fostering team ownership through openness and shared responsibility
According to Antoine, team culture nurtures from its openness to change: being open to the valuable experience new colleagues bring from their previous workplace, or, similarly, being receptive to change regardless of the individual’s position or experience level: “We are really open to change from anyone, whether it’s a junior or a senior, or highly experienced in the field or not, we value everybody’s opinion.”
Similarly, Antoine believes being a leader demands empowering others and decentralizing control. “If I need to do everything, that would be much harder,” he admits. Instead, he acts as a “trouble umbrella,” shielding the team from distractions and allowing them to focus on their core tasks. He views his own seniority as a reason to step back from dictating solutions. “The more you develop your career, the less you will be hands-on,” he explains; in turn, “those that handle the code every day should feel confident with what they write.”
In this regard, it is noteworthy how Antoine’s team practices shared responsibility for releases. Instead of burdening a single individual, the team rotates release manager duties, fostering a sense of collective ownership while also mitigating the possibility of blaming a single individual when something goes wrong.
“Meetings are expensive in terms of time,” Antoine reasons, “so we prioritize asynchronous discussion in Slack whenever possible.” Through this approach, everyone has space to reflect and articulate their thoughts, avoiding the pitfalls of rushed, in-person debates. Still, Antoine’s team also holds weekly retrospective meetings in which everyone’s voice is heard. In this space, developers are encouraged to experiment and subsequently evaluate their ideas: “Sometimes we try out things for two weeks and then we conclude like, ‘okay, we gave it a chance and it turns out that it doesn’t work for us’, and that approach led to quite some nice improvements […] The feedback I got from the team is that everybody feels really happy because we do it together.”
On AI
“I should be using AI more than I do today, ” Antoine admits. Withal, he sees AI as something that will augment rather than replace developers and help them get rid of repetitive tasks like JSON conversion and translations. Developers who embrace AI, he declares, stand to outpace those who resist. However, Antoine acknowledges broader concerns about sensitive data exposure, advocating engineer common sense against uploading sensitive information in third-party databases.
The bottom line
As a side project, Antoine developed the Mac tool RocketSim to improve his development workflow at WeTransfer. Testing deep and universal links in WeTranfer mobile apps required constantly refreshing expired URLs and navigating to specific pages. With RocketSim, Antoine could track those URLs and easily launch them in the iOS simulator to speed up testing. Over time, RocketSim evolved over its initial functionality and incorporated other features to further improve the development process.
Also, for the last five years, Antoine has been blogging weekly on SwiftLee about Swift, Xcode, and iOS development. You can subscribe to the SwiftLee weekly newsletter.
You can follow Antoine on X (former Twitter) at @twannl and connect with him on LinkedIn.