Working on an unfamiliar codebase — 6 ways to best approach the situation

Dmitriy Kotikov
Insider Engineering
4 min readAug 21, 2023

Working on an unfamiliar codebase can be challenging, but with the right approach, you can navigate through it effectively. In this article, we will give some attitudes you can take to better understand and work with an unfamiliar codebase

1. Set up your development environment

When you start working on an unfamiliar codebase, you may need to install specific software, frameworks, or libraries to run and build the code successfully. For example, you might need to set up a specific version of a programming language, a database server, or a web server. Additionally, you might need to install build tools, package managers, or other development utilities.

Ensure that you have all the necessary tools, dependencies, and libraries required to run and build the codebase. If there is a setup guide or documentation available, follow it carefully to get your environment configured correctly.

Having a properly configured environment will make it easier for you to explore the code, make changes, and test your modifications as you dive deeper into the codebase.

For example, you may need to set up your JetBrains/VScode IDE, build and run Docker containers and try to run the project you need to learn.

2. Understand the project structure

When you start working on a new codebase, it’s important to gain a high-level understanding of how the codebase is organized. This understanding will help you navigate through the code, locate relevant files and modules, and comprehend the relationships between different components.

By investing time in understanding the project structure, you’ll gain a clearer picture of how the codebase is organized and be better equipped to navigate and comprehend the code. This knowledge will lay a solid foundation for further exploration and development within the unfamiliar codebase.

For example, you can check where entry points are stored, which libraries are used, run functional or unit tests if they are presented, etc.

3. Read the documentation

Documentation plays a crucial role in understanding the codebase, its purpose, and its intended functionality. It provides valuable insights into the design decisions, coding conventions, usage instructions, and other important aspects of the codebase.

Look for any documentation or README files that provide an overview of the codebase. Read through them to gain a high-level understanding of the project’s purpose, architecture, and key components. Pay attention to any instructions or guidelines provided for developers.

You will gain valuable context and insights into the unfamiliar codebase by thoroughly reading and understanding the documentation. It will help you make informed decisions, write more efficient and effective code, and accelerate your learning process as you dive deeper into the codebase.

4. Use version control

Version control systems, such as Git, provide a powerful mechanism for tracking changes, managing collaboration, and preserving the history of a codebase.

By leveraging version control effectively, you can gain valuable insights into the history, development process, and collaboration patterns of the unfamiliar codebase. Understanding the evolution of the codebase will enable you to make more informed decisions, comprehend the motivations behind certain code segments, and better appreciate the context in which the codebase was developed.

For example, you can use the git blame functionality to easily track previous changes.

5. Start with small tasks

When working on an unfamiliar codebase, it can be overwhelming to dive into complex features or major refactoring tasks right away. Starting with small, manageable tasks allows you to gradually familiarize yourself with the codebase, gain confidence, and make incremental progress.

If there is a development team associated with the codebase, discuss with them to identify suitable small tasks. They can guide you in selecting tasks that align with the codebase’s priorities and provide insights on areas that need attention.

By starting with small, manageable tasks, you can gradually navigate and understand the unfamiliar codebase. Each task completed will enhance your knowledge and confidence, allowing you to tackle more complex challenges over time. Additionally, the small tasks you accomplish can contribute to the overall improvement and maintenance of the codebase.

For example, you can try to change something small like element color or some field validation rule.

6. Check unit tests

Unit tests are automated tests that validate the correctness of individual units of code, such as functions, methods, or classes. They help ensure that the code behaves as expected and provide a safety net when making changes or refactoring the codebase.

Explore the codebase to identify any existing unit tests. These tests serve as a valuable resource for understanding the code’s expected behavior, usage patterns, and edge cases. Execute the current unit tests and observe their output. This allows you to see which parts of the codebase are covered by tests, what functionality they verify, and what potential issues or bugs they expose.

Unit tests serve as executable documentation and provide insights into how the codebase should function. By studying and writing unit tests, you gain a deeper understanding of the code’s behavior, edge cases, and expected outputs. They act as a safety net, allowing you to make changes confidently, knowing that the existing functionality is preserved.

For example, you can run the unit test for some function and learn how its result depends on input parameters.

In conclusion, approaching an unfamiliar codebase can be a challenging task, but by following a systematic approach, you can navigate through it effectively. By understanding the overall structure, leveraging available resources, and utilizing development tools, you can gradually familiarize yourself with the codebase and become productive.

Remember, working with an unfamiliar codebase requires patience, persistence, and continuous learning. Embrace the opportunity to expand your knowledge, sharpen your problem-solving skills, and contribute to the improvement of the codebase. With time and experience, you’ll gradually become more comfortable and proficient in working with unfamiliar codebases.

Also, it’s essential to make other people easier to understand your project later. To implement this, you can stick to SOLID principles and avoid some common mistakes. Writing automation tests can be also helpful

--

--