A new hire is an opportunity to fix root causes of confusion causing the need of onboarding. I let new hires kick the tires of the codebase and ask me questions about code I was too familiar with. Most of these questions would have gone unasked had I explained it to them before, but the questions exposed ambiguities or things that could be done better. This lead to issues and fixes to remove ambiguities, either in code, comments, documentation, or refactoring.<p>Here are some notes containing tips on how to "get to know a codebase"[0] from the new hire perspective.<p>One thing that has helped was having modular code that was documented, and most behavior changeable by configuration, and functionality that could be added by adding a plugin without really changing the code. That made the time to first contribution extremely short. The configuration files contained comments and examples, the code was documented, there were tests, and exception messages told you exactly what has happened, how to troubleshoot, and what you can do, profiling code, simulator like code, etc. Most questions new hires asked were about the behavior of a dependency of the project using the actor model, or about hardware and protocols.<p>In order to get that, one of the things I used to do was write the documentation for how I wanted to use the code, then write the code to match the documentation, then ask a _non programmer_ to follow the documentation. As long as the non programmer succeeded writing code with the library, I knew programmers could. I would confirm, though.<p>How much of the behavior can be controlled by configuration files? It helped to have as much behavior dictated by a configuration file.<p>What is the quantum to develop a functionality. Similar functionalities can be abstracted and have a sort of "cookie-cutter" way to add them as plugins discovered and loaded by the application.<p>A new hire can then get to know the application by developing plugins, for which the complexity and scope is limited, and then expand the domain to bigger parts of the application.<p>[0]: <a href="https://news.ycombinator.com/item?id=19924100" rel="nofollow">https://news.ycombinator.com/item?id=19924100</a>