Ask HN: How does your company keep track of lessons learned?

198 points by KennyFromIT ↗ HN
As a single developer, I would usually just keep a .txt file with interesting things that I've learned throughout my tenure. It's a lot harder to replicate that efficiency for a large team; especially a distributed team. How do you effectively share knowledge with your co-workers? What have you seen work/fail?

129 comments

[ 2.2 ms ] story [ 263 ms ] thread
I have seen post mortems or "common problems" in knowledge bases, but outside of that the lessons learned were either addressed directly (improved process, fixed code, improved docs) or only in the heads of people involved:)
In "the circular filing cabinet"?
I work at a company with ~1k engineers.

Every every system failure, we email the entire org a postmortem google doc describing what went wrong, why, and what we are doing to prevent it from happening again. Postmortems are also as their own JIRA project.

Hats off.

What industry are you working in? (I guess it's not web development).

Web dev with a lot of consumer traffic.
Oh, sorry. I thought it's the car industry or similar.
That sounds great but if I was mailed postmortem docs every day I'd soon start forwarding them to spam folder. Do you know how many people go through them?
They happen about 3-5x month. I typically read the once that are most relevant to my role.
We have implemented an collaborative wiki (wikimedia, like a copy of wikipedia but just opened for internal usage) in 2009, in a company with 200 employee. We engaged people to write everything that they think is good for the others.
How often do people read that stuff?
How often do people maintain it? My experience with internal wikis is they start off good, but a few years latter everything is obsolete: it is a good things nobody reads it because what was true last year isn't anymore.
We create a department with two employees to incentivize and review the articles (correct typo error, writing mistakes and text enhancements). They are hierarchically located in the internal communication area, so the internal weekly e-mail about the news of the company was linked in the Wiki. All the changes that are happening the products, or events, awards and other news from the company were input in this wiki. They got a lot of view incentives from the weekly news of the company. The idea is to document all the projects, steps, actions and mistakes, and all the things that happen in the company.

[Translated from the sustainability report from 2009 - page 31 - GiiMiiPedia] GiiMiiPedia is a free encyclopedia built on the Wiki model (the same as Wikipedia) whose purpose is to transfer Know how. This initiative encourages employees of the organization to contribute knowledge that can be useful in different contexts, optimizing the time of employees. This year, the GiiMiiPedia layout underwent some modifications, with new sessions included, such as: market news, videos and subjects of interest from all areas.

Sorry the report is in Portuguese, we are from Brazil :) http://www.daiichisankyo.com.br/site/wp-content/uploads/2019...

Very fragmented all over the corporate network in all kinds of weird tools and applications.

They did make effort to standardize everything, but nobody seems to care.

We have a directory lessons_learned/ with *.md files.

It's a git repo and everyone can pull/push directly to master.

I skim the commits once a week.

It's basically plain text files. But the md extension triggers some nice eye candy in vim and other browsers.

I think we will keep this structure forever. Maybe we will (additionally) serve the files over http at some point. Maybe we might even add edit / search / push functions over http, but for now I have not planned that.

I have seen CMS come and go. And I'm tired of it. Text files are forever.

This is a really cool idea. Thanks for the inspiration.
> I have seen CMS come and go. And I'm tired of it. Text files are forever.

My website uses a "Apache-DirectoryListing"-like asp.net core frontend + a backend markdown parser.

If I weren't that lazy, I'm pretty sure I could have written a module for apache or nginx with an integrated md parser. Maybe there is something already.

Might be a good job for Caddy Server.
Oh, that's cool! Thanks! I just skimmed through the docs, and the markdown stuff looks promising. Maybe I'll switch over to Caddy.
We push text files into our git repo, that is hosted on a local GitLab. Gives us the nice visuals, with good support for inline code/xml/data/whatever, and searchability, and you can add new files, or edit existing ones, directly in the WebUI
What company do you work for? That sounds awesome.
This sounds really interesting. Do you mind if I ask how it is organized? One of the problems I have with our wiki is that some of this information exists, but I have no way to find it because the search feature sucks, and every person writing something has a different way of organizing/thinking about it.
I'm not 3dfan, but it sounds like their methodology avoids being too organized to lower the barrier to writing these things. The cool thing about simple text files is that you can get superb search with grep and similar tools. The git repo also seems more approachable than having to use a website interface.
It is simply evolving.

For example when the graphics person wants to save something for the first time, they might make a new file graphics.txt and put in the information they want to keep there.

If they then continue to just grow that one file, all is fine. If they feel the need to have multiple files, I advice them to make a subfolder graphics/ and have their files there.

Search is simply done via grep.

So to see if someone wrote something about logos, we typically do:

    grep -ir --color logo *
I mostly agree with sentiment and I think this is a very pragmatic approach.

But... sometimes a picture or two would help a lot. Is everything done in ASCII-art or do you also commit JPG/GIF files there?

So far the need to store images in this folder did not come up.

Can you give a use case?

Look at gollum for a wiki that works exactly like that. Might give you a nice web frontend with linking over the repository you already have.
That is a great solution. I love markdown. Have you considered putting the directory under version control (git)? That way you can track changes and easily recover sections you remove and regret later. I have an entire github repository for "tips".

I think it was Karl Browman from the rstats community that noted: Your closest collaborator is you, six months from now. And you don't respond to email...

Keep and share are two different things. You can email or have a small meeting sharing results, but keeping a searchable, updated, database is hard.
Daily notes posted in slack where a bot logs to elastic search. Notes reviewed in our retros and the useful/actionable is logged in a wiki and or jira. Wiki notes are reviewed in our annual retro.
<sarcasm> My company is awesome in the sense to make sure it doesn't forget, it repeats the same mistakes every couple of years </sarcasm>
We keep ours in a manilla folder labeled "Business plan 2021"
One of the first thing my co-founder and I did when we started our new project is create a table in Notion with all the previous lessons we had from our last company, and have been adding to it as we create fresh, new mistakes. Using tagging to keep it organised and readily available so when we start adding more people everyone has ready access to it.
We have a checklist system. Depending on which files are on your commit or which database objects are modified, you're presented with a checklist specific to the things you're changing. When something goes really wrong, the outcome of the post mortem often includes adding to or changing the checklist for the affected files/filetypes/team/whatever. It's not a perfect system, but it beats reading our long, confusing wiki pages.
I like this system a lot. It convert postmoterns into actionable checklist for next project. My only concern is that the checklist might get too big. But definitely, better than expecting people to go to wikis to avoid past mistakes
Can you tell me more - how/where do you present checklist before commit?
We use in house project tracking software to manage development, bugs, documentation, Etc. that it's built into. These checklists are verified by another developer as part of code review before the branch is allowed to merge to the release/main branch. There's only a couple of "generic" checks (one for security things, another that's automated that enforces coding standards), at least for our team. A small bug fix may only have 2-4 checklist options, but a larger enhancement may touch enough things that there may be 20-30 checklist options.
Developing a postmortem culture is important to share the lessons learnt from production. For eg. Documenting and sharing the lessons learnt from a SRE perspective , a google doc would suffice. Some pointers at https://landing.google.com/sre/sre-book/chapters/postmortem-... Have seen Wiki being setup and fail and go stale very quickly. Lots of knowledge and learnings are tribal knowledge. Sharing tribal knowledge is effective in person or in a non wiki mode especially through brown bags or chapter meetings etc., Challenge is not everyone has the time or the energy / enthusiasm to be talking in front of a wide audience. Never seen one solution working effectively. You need to figure out the best approach based on the team culture and how the organisation is setup. For eg., some teams are hesitant to share knowledge and learnings with other groups - Conways law comes into play. End of the day it is not up to the company to track lessons learnt. It is the job or becomes the job of the person supporting production to a large extent to maintain it for making it easier to do their job. That being said , that knowledge leaves when that person moves jobs & the cycle continues
Similar to that; Post Implementation Reviews (PIRs), then we adapt the relevant documents (processes, procedures, policies, PM methodology, etc.). Usually on the projects the Sponsor is high enough that can approve/influence the changes in the aforemention documentation. On the side, we have a Wiki where every project has its own page (with user access in place because some semi-sensitive info can be found there).
Reminds of the ironic naming of the "Lessons learned meeting". If no change is made to what people actually do, it's very hard to say that anything has really been learned, and I would put that first.
> How does your company keep track of lessons learned.

The dev overall, across the globe: i find retrospectives after a sprint cycle really good actually, it's a good place to call up where improvements can be made too.

On a personal level: When my mess up/mistake causes grief for someone else, I make damn sure I learn from that.

Bluntly: We don't bother. We don't even have reliable mechanisms for collecting feedback from customers.

I'm leaving soon.

We don't!

One of the reasons why some people become valuable in long-tenure positions is because of the lessons learned. At a certain point, no one is going to read through every page in the wiki / archive / man pages / whatever is popular this year.

That's where onboarding and process come in: Management needs to make sure that lessons drive improving the process, that newcomers are onboarded with lessons from the past, and that everyone continues to follow the processes.

Now, jokes aside, in my company, the new owners decided they didn't like the people we were outsourcing with, and decided to replace them with their own outsourcing center. Now everyone's re-learning lessons that are probably tracked in our various wikis, repositories, ect. But, the newcomers want to run things their own way.

That's why a few long-tenured people are important.

Institutional knowledge. So, so crucial to culture and process.
We have Confluence pages that no one reads but it's nice we go through the exercise, I guess.
I can never find anything in Confluence unless I had the foresight to link to it from the main page.
Same here - the default search seems woefully inadequate at least as far as I use it. If I do a partial search sometimes I get back docs I want but if I type in more specificity (more through muscle memory while typing, not necessarily trying to narrow down the results) then what I'm searching for disappears from the list even though it's more precise.
Confluence is absolutely terrible. Their accessibility user experience is abysmal. It was designed for people who operate user interfaces with their mouses rather than their keyboards. Not only that, but it seems to be quite unreliable. Seems every other day some random component is not working, like uploading screenshots.
Couldn't agree more! Confluence is a steaming pile. Worse, it steals key strokes used by the OS. If I want to search the page, I do Cmd-F and instead of bringing up the browser's search page function, it brings up its own broken "search everything except what I need" function. It's the worst.
(comment deleted)
Writing something in Confluence is about as useful as writing it on paper and leaving it in a desk drawer.
we have a wiki in microsoft teams, which no one ever reads...
Github repo with TILs (Today I Learned / Things I Learned)
At my employer we have two ways:

1. For large issues visible to customers an incident report is shared inside the company. These are written for general consumption and so lack any technically interesting aspects (they're "dumbed-down" a lot).

2. Technical "lessons learned" are curated in a Sphinx based documentation website that I started but which is starting to see more and more contributions from other tech heads in the company.

We used to have a wiki but it ossified after years of no contributions. Personally I didn't like the MoinMoin wiki engine that much but this is just personal taste of course. I started setting up the Sphinx site to encourage knowledge retention despite turnover - I kept explaining the same things again and again. Now I just share a URL when such questions come up :-).

Great! What's so good about using Sphinx for this?
Honestly I think this is personal preference more than anything else, so I'm not sure how useful my answer is, but I thought I should at least try to answer your question :-).

I have quite a few years of experience in using Sphinx to create high quality technical documentation for open source Python projects, which explains why I chose Sphinx for this endeavor in the first place, but that's not an answer to your question.

The following dichotomy that I feel exists may (?) be more useful:

* Wikis tend to grow organically without much restructuring. I don't think this is fundamental to any specific wiki system, more of an emergent behavior, if you will. Enough discipline can surely avoid this, but wiki systems don't exactly make it easy - I haven't seen many "refactoring" tools in wiki engines, though they probably exist (global rename that updates references, moving of sections of text between documents, etc). I have definitely seen quite a few wikis devolve into the documentation equivalent of a "big ball of mud".

* Sphinx being based on a simple directory structure of text files on a local filesystem in reStructuredText format makes it much easier for me to "refactor mercilessly" in order to adjust the structure of the documentation so it keeps making sense as it evolves (e.g. things as simple as "grep -r" and "find | xargs | sed -i" or equivalents built into editors). To make sure no references were harmed there is "sphinx-build -nW".

I've also grown to appreciate the value of generated content. For example we have a dozen software projects and another dozen internal web services. I cataloged both as a directory of simple CSV files that contain details like repository locations, programming languages and frameworks used, type of release management process used, etc. During the documentation build these CSV files are rendered into multiple output formats, for example an overview table that lists the most relevant high level details of each project / service and separately from that the more detailed information about each project / service. The data only needs to be entered once (DRY), but can be rendered any number of times.

We have a handbook based on Hugo for the tech folks thats editable by anyone and bloomfire for the general masses.
At company level lessons learned turn into internal rules. Too flexible holiday time results in more explicit rules about what is and what isn't allowed. The endgame is you become too bureaucratic after enough creative employees.