I'm a Python programmer who was given a project written entirely in C#. I'm comfortable reading code, but I'm unfamiliar with the C# ecosystem and the project has very little documentation beyond the code and a few comments.
After about 30 minutes of reading and searching for unfamiliar concepts, I mapped out the file structure for a new feature. However, implementing it became difficult because I needed to understand how the existing classes and data flow were connected before adding anything new. This made me wonder whether I'm working too slowly or missing an important skill.
Is it normal to spend this much time reading an unfamiliar codebase, especially when working in a language I'm still learning? What techniques can help me understand an existing project more efficiently and identify the relevant patterns without trying to learn every class?
2 Answers
Having little documentation makes this harder, not your lack of ability. Reading the code carefully is part of the work, and it can improve your debugging and architectural skills. As you learn the project, create your own notes: a small diagram of the main components, where requests enter, where data is stored, and how services depend on one another.
For C#, also spend some time learning the project’s build system, dependency injection setup, async conventions, and common framework patterns. You don’t need to master the entire language first, but understanding those conventions will make the codebase much easier to navigate.
You probably don’t need to understand every class before changing anything. Begin by finding the closest existing feature and follow how it is wired into the application. That can show you which interfaces, services, controllers, models, or configuration points your new feature should use.
Adding a feature does require understanding how it connects to the existing flow, but that is different from studying the whole codebase. Work in a narrow slice, make a small change, run the tests or application, and expand your understanding as needed.

Even with a new feature, looking for a similar feature is usually faster than designing the structure from scratch. Copy the project’s established conventions where they make sense, then verify each connection as you go.