├── README.md └── matrix.png /README.md: -------------------------------------------------------------------------------- 1 | ![iOS Developer Skills Matrix](matrix.png) 2 | 3 | ## ☝️ What is it? 4 | A compilation of **indicators** about knowledge in a particular area of **iOS development**. 5 | 6 | ## ✌️ How to use it? 7 | Move from the left to right, try to give a confident, affirmative answer. Ability to hold a **meaningful conversation** about a particular topic is typically a good rule of thumb 👍 8 | 9 | ## 👌 Why these levels/skills? 10 | This [article](https://medium.com/ios-os-x-development/ios-developer-skills-matrix-fee807255235) explains a bit 😉 11 | 12 | ## Google Docs Version 13 | [Google Docs Version Link](https://docs.google.com/document/d/188eTEiNRnk2qelYbOsHuDxnvdtLVCa4hm4v0Nxop3Nk/edit?usp=sharing) 14 | 15 | 16 | ## Markdown Version 17 | | | Junior | Middle | Senior | 18 | |-------------------------|---------------------------------------------------------|-----------------------------------------------------------------|-----------------------------------------------------------------------------| 19 | | **Ability** | can make a news app talking to a JSON API | can timely design and deliver fast and reliable chat module | can establish team behaviour standards with non-fanatical ideas | 20 | | **Code Integration** | uses git to move code around | has an opinion about GitFlow | has ideas how to build a CI process and automate chores | 21 | | **Paradigms** | got the idea of OOP | got hands dirty with FRP | brings value from other platforms and paradigms | 22 | | **Dependencies** | knows how to use Cocoapods | knows why apps can't use SPM, but Carthage is an option | knows why it is essential to own/reduce dependencies | 23 | | **Platform** | uses Array, Dictionary and Set | knows Value/Reference types and Equatable/Hashable | knows the details of method dispatch of both Swift and Obj-C | 24 | | **Client-Server Protocol** | getting that JSON from the Internet is a piece of cake! | making a WebSocket-based real-time chat is feasible | building a video chat is an achievable challenge | 25 | | **Reference** | uses StackOverflow as a single source of truth | often uses official documentation | asks platform developers and can reverse engineer | 26 | | **Memory** | knows how to avoid and fix a memory leak | knows NSPointerArray and why structs increase binary size | has a strategy to reduce out-of-memory crashes | 27 | | **UI** | can build basic UI in the Interface Builder | has reasons to make UI in code | can take layout and diff calculation to non-main thread | 28 | | **Multithreading** | asyncAfter is a friend, @synchronize all the things | asyncAfter is an enemy, and thread synchronisation is a problem | understands multithreading problems beyond the deadlock | 29 | | **Attitude** | expects others to teach and guide during development | discusses design with the team to share decision | takes responsibility for design decision made by teammates | 30 | | **Design Patterns** | understands Delegation, Target-Action and MVC idea | is proficient at Observer, Facade and Mediator patterns | knows the sweet spot between dependency injection and service locator | 31 | | **Product Quality** | the app is tested if it works on my phone | writes unit tests and tried TDD and UI tests | defines a maintainable test pyramid with non-overlapping coverage areas |  32 | 33 | -------------------------------------------------------------------------------- /matrix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BohdanOrlov/ios-skills-matrix/2cb2f103066182639bb901db4d49e9cf0ae74458/matrix.png --------------------------------------------------------------------------------