I recently started a new gig as a Software Engineer here at DEV. And having changed jobs a few times, one of the more difficult things of starting a new role is getting up to speed with a new codebase.
When learning Software Engineering (school, bootcamps, online tutorials, etc.) you're often starting from scratch or you're building a project where everything is defined upfront. For example, if you have done a Rails tutorial you've likely built a blog with a limited feature set. Decisions made in that tutorial were likely based on a defined scope - build a blog where users can create, edit, and delete articles. And then you're off to the races (shout out to scaffolding).
But like in many fields, this is great...in theory. In the "real world", you can often find yourself walking into an established codebase that has been through a lot.
And what ends up happening is you end up finding lots of code that makes you pause and wonder, "why was this done this way!?". Sometimes there's a good answer for that, but it's some historical piece of context that leaves you having to ask someone who has been around longer.
So my questions to you all are:
- How do you get up and running with a new and established codebase?
- What tools do you use, if any?
- What sort of tools do you wish you had to help with this?
I recently came across Codeflow(0 affiliation, but it's a solid example) and I have had ideas in the past about building a tool to help onboard Software Engineers to a new codebase.
Lastly, it's worth noting that I realize that in an ideal world things would be clearly documented and kept up to date. This is all assuming the trade-off was made to (more or less) skip detailed documentation of nuances.
What do you think?