Hitting the ground running… faster
I was recently dropped into a project which has been running for while. After digging into the code and documentation I started thinking about just that process: what are the most effective ways of getting up to speed in an unfamiliar project?
Few projects employ the complete UML arsenal of documentation… so once you’ve skimmed the (usually incomplete) documentation, you have to actually start digging. Some ways of doing this, in no particular order:
- Run through the unit tests of the most vital parts of the code. Pull out as much information as possible. Turn up log levels, add trace statements if few or none exist. You can save time by using AOP mechanisms to weave in tracing.
- Start fixing existing bugs quickly… but carefully (if test coverage is low).
- Fix broken unit tests. Improve test coverage, code some “learning tests”.
- Use tools to visualize the project. A tool like Grand is invaluable when digging through an unfamiliar Ant build script.
- Use tools that analyze code quality and the general project integrity. Some things can be determined quantitatively: test coverage, code duplication and such. Tools like XRadar can spot these things for you.You’ll learn while digging through this information, and hopefully be better armed to improve the project when you start writing your own code. Also, if you are able to do it tactfully without stepping on any toes, offer to refactor any especially weak areas.
- Unless you are the sole developer, pair up with one of the others. You drive and the (within the project context) more experienced developer navigates.
- If pairing isn’t an option, get short and focused one-on-one braindumps from other people in the project. Pull up some important and/or complicated use cases, and step through their actual code together. Mindmaps are great for taking notes (Freemind is a good open source mindmapping program). When using mind maps you are (well, at least I am) more able to organize your thoughts in a tree structure. Branches can be nested, folded and rearranged quickly - this is great because you’ll probably bounce around different concepts quickly while walking through the code; “Oh yeah, I almost forgot, you should know [fact X] about [class Y that we covered 5 minutes ago]….”
- Improve documentation. This is a good learning excercise if there are vital areas in the project which are completely void of documentation. Boring, but forces you to understand the things you are describing.
I probably forgot a bunch of stuff here. I implore any visitors to add more in the comment section. :)