Modern IDEs now allow you to search for a class or a file and go to it from the search results. On my last few projects I’ve seen developers using this feature almost exclusively rather than navigating their code tree. This is a very nice feature that I really enjoy using but does it have a dark side?

I’m an old school hacker and I like to know how my code is structured – its packages, dependencies, web root folders, output folders for the IDE and for automated build scripts, etc. I’ve always felt that this gave me a bigger picture than just “insert code here”. I tend to analyze how the bits of code or classes that I am writing (or reading) fit into the overall structure, where they go, what packages / components / modules / assemblies my application has.

It is interesting that on projects where code navigation by search is the norm I come across weird / circular dependencies between packages, classes in packages that do not really fit together (at least in my mind), and integration tests for endpoints that require the wiring of the entire application to work. My initial feeling is that this is a symptom of developers who may not yet be experienced enough to see the big picture shape of their evolving application, and/or of an application layout/design that does not provide any affordances to developers to indicate where they should put their code.

What’s the point I’m trying to make here? That’s a tough question. I’ve been debating with myself for a while whether I should even blog about this, whether this would sound like a rant, or whether this would be helpful at all. In the end as a software craftsman I decided to simply put this out as a cautionary note and a plea to keep a watch out for code that is frequently searched but infrequently read. It smells …