Can you elaborate on this one? This is my preferred way.
You work on product A. Your VP of very important things declares that every product should use library L. Library L has been designed to incestously interact with product D and makes a bunch of assumptions about what the "working environment" should be.
Teams B and C have already made the transition, so L made some kludgy APIs to make B and C interaction possible, though it is maintained with low priority because everybody knows D is the money maker. Both B and C have a bunch of assumptions in common that A does not share, and they both had to compromise and emulate D environment to some exent.
You are given L binaries, a few toy examples of how to use the most basic functionality in L, and access to B codebase. L codebase does not use the same source control system, so you don't even know where to begin looking for their code.
Please keep in mind that your manager does not expect you to learn all the inner workings of L. Your priority task is to use L to support some new feature in A. You still have a number of other tasks to accomplish in A that are not related to L, and some of those might raise in priority with little or no notice.
Do you still think it is a good idea to just browse L code, without knowing how large (or well writen) it is?
Having struggled with very large tools that were anything-but, I beg to differ... but I guess it is a matter of personal experiences.
Then there were times when I did dig through to understand why something worked. When I pointed out that something should be done differently (an id-lookup done hierarchal instead of flat) I was told "Oh that's deprecated, you're not supposed to be using that anyways". And how exactly am I supposed to know that?
Ultimately it was a frustrating way to spend a lot of time.
Add in cases where people go crazy with inheritance and you need it or else you have no way of knowing what all it is this new class can do.
It begins with the fact that the company's code needs documentation. I'm a big proponent of Robert C. Martin's "Clean Code" and the idea that code should read like prose - by reading the code, its purpose and ideas should come across naturally.
It ends with people asking "Didn't we already talk about this?".
Is this your first job? Don't let yourself get treated like this.
Or a normal place with poor-mediocre leadership.
Documentation doesn't happen by magic, and documentation is a skill. If it's not a priority from management, folks will be heads down getting their own tasks done, not thinking about what the other person/team needs.
All of the development teams were also on Slack, and many people tended to have those quick side conversations online instead of in person, so there was a public searchable record and you could jump in more easily.
I lost track of the amount of times I was told to "look at the source code" when asking about documentation for the internal framework.
Also fun was being assigned a feature and having it's functionality explained over the phone, with any subsequent follow-up being met with "Didn't we already talk about this"?
I never would have thought that a remote based team would have the worst documentation out of anywhere I've worked, but that's exactly what happened.