Hacker News new | ask | show | jobs
by endymi0n 1931 days ago
I'll let you in on the biggest unsolved problem in computer science. And no, despite the joke it's neither cache invalidation, naming, concurrency nor off-by-one errors. It's not even handling dependencies.

It's knowledge transfer.

I haven't seen any bigger problem until now and I haven't seen anything that comes close to a solution. Even though, I'm pretty sure of what is not a solution and that is (mid-level) documentation.

Before I go taking that back a notch, let me clarify what I mean with that, as I've seen the cycle numerous times and have been at several of those points myself.

"This is a mess, I don't understand anything... this isn't logical. We need to document everything!

-> Sorry for that bug, I read your docs, but they were outdated.

-> Sorry for that bug, I didn't even bother to read the docs, because most seemed outdated.

-> We'll need to make sure the docs stay current, let's hire a technical writer / wiki gardener / wtf and introduce a process in our "Definition of Done (tm)" so it's all up to date

-> (Actual Development mostly halted by now)

-> Hey, welcome! Oh by the way, before your first commit, please read these 700 pages so we're sure you know what you're doing.

Talented Junior Dev: !!! — Here's my resignation."

The clear exceptions to this casual observation of mine are implicit and high-level documentation.

Implicit includes:

- self-documenting types and code ("Ronseal Code"): https://web.archive.org/web/20170426021541/https://peternixe...

- self-documenting gRPC and Swagger API schema

- self-documenting constraints

- Architecture and Schema diagrams

- Specs and Design Docs

- READMEs

There's only a very limited case where mid-level docs make sense:

- lots of consumers (public & commercial code)

- stable systems with high fluctuation operations

Other than that, this kind of documentation rots far too fast to have much net benefit at a high feature pace.

The only tools that I've consistently seen work so far for knowledge transfer are simply hiring good and communicative people with a learning mindset, keeping attrition low by keeping them happy and productive, intro sessions, code reviews and growing reasonably slow while leveraging junior/senior (as in tenure) pairings for new projects.

No kind of documentation in the world replaces the mental models of the people who architected a piece of software.

Old guy rant end.