TLDR: A few tips for faster onboarding and less stress (hopefully).
Working as a software developer, there have been numerous projects I had to jump in and feel at home as quickly as possible. The recurring challenge is understanding how the system works and how can I quickly introduce new features or get rid of unwanted bugs.
These “out-of-comfort-zone” activities resulted in an expanding list that helped me keep my sanity :p and deliver expected value in the shortest possible time.
In a somewhat planned order:
- Talk to someone who has worked on the project or has domain specific knowledge - this can be invaluable to present clarity of the system
- Read software documentation, manuals and code - sometimes reading can get you really far
- Debug, step through the code, find out the flow - tracing for specific behavior helps understand the wired implementation
- Try to understand a specific feature (like send email, fetch product) - or any easily identifiable component to get started
- Make small changes and see where the code breaks - what area is tightly coupled and fails easily
- Read unit tests (surely the solution is backed with some tests!) - unit tests tell the life story of the implemented component
- Look for patterns of code (try to get in the similar mindset as the developer that implemented it) - what was the reason for creating something the way it is, get the same picture
- Get a notebook and make it clearer on paper (diagrams) - paper and pen, the two best friends
- Try to generate dependency graphs (intelliJ has a good generator for example) - I suppose major IDEs have this option
- Sometimes it just takes time! - Leave it for the subconscious mind, or do some Hammock driven development