Junior dev, about 6 months out of college at a smallish (~20 engineers) software company. Monolithic java codebase that all runs on a single cluster of app servers. I've been feeling frustrated lately and wanted some advice. The most common comment in my code reviews: "You're reinventing the wheel - we already wrote something similar. Take a look at [X], extend it a bit to fit this use case, and toss what you have." Since X is always undocumented this involves sleuthing + picking senior dev's brains. The process slowly repeats until my feature eventually converges onto a configuration of existing components, with as little new code as possible. That's great for the business but not much fun for me. It means that to do a task that could be completed from scratch in X hours, I must spend X^(size of our codebase) hours grappling with other people's ideas, solutions, and mistakes. It means my thoughts must be bent to fit some pre-existing shape, which eliminates the need for my thoughts, and suggests they should be permanently replaced with those of my predecessors. Is this actually the sign of a good codebase? Should I be deriving pleasure from this? Is this what software development is?