Skip to content

Instantly share code, notes, and snippets.

@UncleCJ
Last active April 18, 2024 13:06
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save UncleCJ/9bda54b51b6524a53f5f5da948340e6f to your computer and use it in GitHub Desktop.
Save UncleCJ/9bda54b51b6524a53f5f5da948340e6f to your computer and use it in GitHub Desktop.
Golden Paths and Knowledge Management from the trenches

Context

Starting from my conversations with SJ and my Underlay Discourse notice "Ideas for community engagement" (a mashup on a Jupyter Binder contraption, Spotify Documentation as Code "Golden Paths" concept and value-based architecture), I was encouraged to write an article/essay/paper/something for KFG Commonplace microjournal on the topic of Golden Paths and "self-documenting solutions".

I find the topic very engaging, and having wrestled with wikis and knowledge management in general, as well as from a bit of research discovering the "documentation as code" concept, I would like to fashion something readable in that domain.

As I just created a pubpub profile, and can't create a commonplace pub (or know where to put it), I'll start typing here. All interaction is welcome.

Outline

<define my own golden path through this quagmire>

This essay is taking some serious time - both in terms calendar duration but also of active consideration. Not necessarily a problem in itself ("Pain is temporary, glory is forever!"), but to outline how I could approach this, some aspects I have considered:

  • Spotify Golden Paths, Techdocs, Backstage and Engineering Culture
  • Docs Like Code
  • The venerable challenge - Information vs Attention
  • DevOps and Git - Disruption and democratization
  • Communicative developers, Tech-savvy Writers (and User participation)
  • Purposes and formats of communication
  • Open vs Proprietary - Making do despite insufficiencies

Scratch notes

Illustration of: Technical writers, developers, product owners, operations, users, system, internal and external information

Figure: Example of communication in the context of proprietary development

Figure: Example of communication in the context of open development

Figure: Example of communication in the context of open-and-then-bought development

The “Spotify Model” (crisp: Scaling Agile @ Spotify with Tribes, Squads, Chapters & Guilds) (PDF), though see the subsequent InfoQ: Don’t Copy the Spotify Model and commentary: SAFe, Atlassian, Jurriaan Kamer / The Ready, Willem-Jan Ageling and Vitality Chicago
Spotify Engineering Culture (Part 1) (Part 2) also as video: Part 1, Part 2. See also Jason Yip, Agile Coach at Spotify
Backstage Developer Portal

happy path: Guidelines + Introduction tutorial + Shared solution collaboration

"Why it takes so long just to put in windows" - not just shoddily built, but you integrate all you've built to date, use it as tools...

Lazy dogs break at the first change of circumstance. Easier to duplicate than to improve.

Guidelines are written as orders, not the best way to do things. Guidelines as documents, not close to developers or validated

Tutorials are not advanced or real

Continuous inexperience?

Knowledge management and technical writers are not domain experts or agile

DevOps makes it everyone's problem

first order - technology enables more information

second order - more information is required to develop technology

Shared solutions lack collaboration structure (inner source)

Best to rely on that people want to do a good job (Teal?)

Open - not reinventing the wheel, interleaving, common knowledge

Development is not stateless, and neither are developers helpless (or ought to be thought of as such)

Tony R. Hoare 1980 ACM Turing Award Lecture "The Emperor's Old Clothes" - on the importance of ubiqutously palatable communication throughout an organization

The C4 model for visualising software architecture - Context, Containers, Components, and Code

Fragile "lazy dogs" and the Chernobyl test procedure

2020-09-25 The Changelog podcast – Episode #415: Spotify's open platform for shipping at scale with Jim Haughwout and Stefan Ålund

2020-11-19 Software Engineering Daily podcast - Backstage: Spotify Developer Portals with Stefan Ålund

https://en.wikipedia.org/wiki/Children_of_Dune

https://dune.fandom.com/wiki/The_Golden_Path

https://medium.com/startup-by-design/goldenpath-156c1ff291ab

https://en.wikipedia.org/wiki/Tutorial

https://en.wikipedia.org/wiki/Knowledge_base

https://en.wikipedia.org/wiki/Technical_communication

https://en.wikipedia.org/wiki/Documentation

https://en.wikipedia.org/wiki/Knowledge_management

https://en.wikipedia.org/wiki/User_guide

https://en.wikipedia.org/wiki/How-to

https://en.wikipedia.org/wiki/Community_of_practice

https://en.wikipedia.org/wiki/Knowledge_broker

https://en.wikipedia.org/wiki/Personal_knowledge_management

https://en.wikipedia.org/wiki/Knowledge_worker

https://en.wikipedia.org/wiki/Intellectual_capital

https://en.wikipedia.org/wiki/Knowledge_sharing

https://en.wikipedia.org/wiki/Procedural_knowledge

https://en.wikipedia.org/wiki/Software_documentation

https://en.wikipedia.org/wiki/The_Mythical_Man-Month

https://en.wikipedia.org/wiki/Hofstadter%27s_law

https://softwareengineering.stackexchange.com/questions/9885/how-much-documentation-is-enough

Designing organizations for an information-rich world

https://store.xmlpress.com/product/conversation-and-community/

Videos:

Perhaps for illustration: 2008-07-06 Pro-Pop and Neo Quad Games Review or 2008-12-03 POP Station Watch 2: GBA SP Rip-Off

@startuml
left to right direction
' skinparam linetype polyline
frame "Community <&people>" {
together {
node "Foundation's\ninfrastructure" as Infrastructure {
database "Source code" as scm
component System
scm -down-> System : "deployed\nas"
file "Operations & User \ndocumentation" as opsdocs
}
actor "Founder & Contributor\n//(also Operations and User)//" as founder
founder --> scm : "maintains\nand develops"
founder --> opsdocs : "maintains,\ndevelops and reads"
}
frame "Commercial organization <&people>" {
node "Commercially\nhosted\ninfrastructure" as Infrastructure3 {
component "Commercially\noperated\nsystem" as System3
System3 ..> System : "clone of"
}
actor "Operations\n//(also User)//" as operations
operations --> System3 : "responsible\nfor"
operations --> opsdocs : reads
actor User
User --> System3 : uses
User --> operations : "supported\nby"
User --> opsdocs : reads
}
}
@enduml
@startuml
left to right direction
' skinparam linetype polyline
frame "Community <&people>" {
together {
node "Foundation's\ninfrastructure" as Infrastructure {
database "Source code" as scm
component System
scm -down-> System : "deployed\nas"
file "Operations & User\ndocumentation" as opsdocs
}
actor "Founder\n//(also Contributor,//\n//Operations and User)//" as founder
founder --> scm : "maintains\nand develops"
founder --> opsdocs : "maintains\nand develops"
}
together {
node "Contributor's\ninfrastructure" as Infrastructure2 {
database "Source code" as scm2
component "Contributor's\nsystem" as System2
scm2 -down-> System2 : "deployed\nas"
}
System2 ..> System : "clone\nof"
scm2 ..> scm : "clone\nof"
actor "Contributor\n//(also Operations//\n//and User)//" as contributor
contributor --> System2 : "uses"
contributor --> scm2 : "maintains\nand develops"
contributor --> opsdocs : "maintains,\ndevelops\nand reads"
}
@enduml
@startuml
' skinparam linetype polyline
frame "Organization <&people>" as organization {
node Infrastructure {
component System
database "Source\ncode" as scm
scm --> System : "deployed\nas"
file "Operations\ndocumentation" as opsdocs
}
file "User\ndocumentation" as releasedocs
actor "Technical writer <&copywriting>" as editor
editor ~~> releasedocs : "maintains\n//(but does not read?)//"
actor "Operations <&wrench>" as operations
operations --> Infrastructure : "responsible\nfor"
operations --> opsdocs : "maintains\nand uses"
actor "Developer <&monitor>" as developer
developer --> scm : "maintains\nand develops"
developer ~~> opsdocs : "maintains\nand uses\n//(supposedly)//"
developer ~~> releasedocs : "contributes to\n//(supposedly)//"
actor "Product Owner <&folder>" as PO
PO --> developer : directs
PO ~~> operations : "directs\n//(supposedly)//"
PO ~~> System : "responsible for\n//(supposedly)//"
actor "Management <&briefcase>" as management
management ~~> PO : "directs\n//(supposedly)//"
}
actor User
User -up-> System : uses
User -up-> releasedocs : reads
@enduml
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment