Post

Lead Essentials: System Design and Networking Modules finished (White Belt 1st stripe)

Lead Essentials: System Design and Networking Modules finished (White Belt 1st stripe)

I recently started the iOS Lead Essentials course by Essential Developer. The program uses a belt system with stripes to reflect a developer’s progress—starting from no stripe and moving through increasingly advanced levels. After completing the first two modules, I received the first stripe on my White Belt, and I’d like to share what I’ve learned so far.

What I Learned in the First Module: System Design

The first module focused heavily on system design and app architecture. It gave me a much clearer understanding of how to approach building robust, maintainable applications from the ground up. I explored best practices for app architecture and learned how to analyze system requirements effectively.

One of the most valuable takeaways was learning how to think, design, and communicate like a software architect — especially through diagramming techniques that clarify architectural decisions. We also tackled common pitfalls such as the misuse of singletons and global state, learned when they might be acceptable, when they’re dangerous, and how to avoid them using better alternatives.

The module emphasized solid foundational principles, including the SOLID principles and how to apply them in Swift projects. It covered Clean Architecture in depth, along with modular design and Domain-Driven Design (DDD), all of which contribute to more scalable and testable codebases.

Behavior-Driven Development (BDD) and use case analysis were also key parts of the training, helping to ensure that architecture remains aligned with user and business needs. I got hands-on experience in domain modeling and learned techniques to start implementing Swift apps even before backend services or design assets are finalized.

What I Learned in the Second Module: Networking

The second module went deep into networking in Swift. I revisited the fundamentals of the URL loading system, including URLSession, URLSessionDataTask, and even custom protocols using URLProtocol. These were then connected to real-world usage patterns, offering a pragmatic approach to building networking layers in production apps.

A major focus was on creating testable networking layers. I worked through four different approaches to testing network requests—end-to-end, subclass-based, protocol-based mocking, and stubbing via URLProtocol. This helped me gain a better understanding of the trade-offs between them and how to choose the right one depending on context.

The module also covered what many apps get wrong about reachability and how to approach it correctly. We looked at various ways to speed up development in Xcode, both by using frameworks efficiently and by reducing debugging time. From there, we shifted to Continuous Integration (CI) pipelines, learning how to automate builds and tests for improved reliability.

Beyond networking, the module reinforced key concepts like object-oriented and functional programming in Swift, dependency injection, access control, and effective error handling. I also got to revisit important testing techniques - namely unit tests, integration tests and end-to-end tests. I also learned how to write them in a clean, maintainable way. Tools and strategies for refactoring, managing dependencies, and using version control with Git were also part of the curriculum.

We explored Swift-specific techniques like closures and protocols as abstractions, writing safe code that avoids invalid states, and solving data races using Xcode’s diagnostics. I learned how to configure Xcode for test automation, gather and improve code coverage, randomize and parallelize test runs, and detect memory leaks automatically.

The training also included best practices for writing tests, understanding and using different types of test doubles (spies, stubs, mocks, and fakes), handling async testing scenarios, and using Swift’s Result and error types effectively. As a bonus, we learned how to avoid common async bugs.

What’s Next?

I’ll continue progressing through the remaining belt levels in the Lead Essentials curriculum. The journey so far has already leveled up my thinking as a developer, and I’m looking forward to level up further as the course progresses.

Click to see the full iOS Lead Essentials curriculum


Disclaimer: This blog post was written with the help of AI, based on a bulleted summary of learning topics provided as part of the Lead Essentials program. The structured list served as the foundation for turning the content into a more readable, narrative-style post that reflects my personal learning experience. I reviewed and edited the post before publishing to ensure it meets the quality standards of this blog.

This post is licensed under CC BY 4.0 by the author.