Tillit, kvalitet og intensjon i praksis: en håndbok for produkt- og programvareutvikling

..

Til programvareutviklere som jobber i produktteam

Jobber du med programvareutvikling i et produktteam? Dette dokumentet er til deg.

Lenge følte jeg at jeg ikke ante hvordan man burde jobbe sammen når man lager produkter. Jeg startet med en teknisk utdannelse og en teknisk jobb. Jeg lærte meg hvordan jeg kunne løse problemer alene.

Etter hvert slo virkelighetsbildet mitt sprekker.

Disse erfaringene har ført til at jeg gjør enkelte ting annerledes enn før. Jeg har andre forventninger til meg selv og til menneskene mine rundt meg.

Jeg velger nå å skrive disse erfaringene ned. Det hjelper meg selv å få oversikt, og det hjelper meg med å kommunisere med de rundt meg.

Jeg publiserer på Internett fordi jeg mener at kunnskap bør være fritt tilgjengelig på Internett. Du er hjertelig velkommen til å lese dette dokumentet og prøve ut ideene selv om vi ikke kjenner hverandre—men vær obs på at dette dokumentet handler om god praksis, og god praksis ofte må læres fra personer, ikke lærebøker.

Takk til Elisabeth.

Fra januar 2024 har jeg hatt gleden av å jobbe med Elisabeth Irgens. Uten Elisabeth, hadde jeg ikke startet på denne teksten helga 17. og 18. februar. Hvorfor?

Jeg har samlet opp meninger om hvordan programvareutvikling og produktutvikling bør gjøres. Elisabeth har ved svært mange anledninger stilt “hva mener du med X?”-spørsmål.

Så tusen takk, Elisabeth! Jeg setter pris på å kunne jobbe med deg.

Om god, trygg og klar kommunikasjon

“non-violent communication”

https://www.goodreads.com/en/book/show/71730

Jeg misliker tittelen “ikke-voldelig kommunikasjon”. Jeg synes det er en dårlig beskrivelse for hva boka handler om. Er det ment til å implisere at de som ikke har lest boka og gjør det den sier er voldelige? For meg fremstår det som en rar holdning å ha.

Det jeg liker med boka er at den beskriver en måte å be om å få ting uten å ta valget om å gi vekk fra den du ber om noe.

Det gjør at folk lettere kan gi deg det du trenger når de kan, og kan si nei når de ikke har anledning. Det gjør også at du splitter mellom informasjonen om hva du har behov for og handlingen du ønsker. Kanskje det du ba om ikke var det du egentlig ville ha.

Feedback i Netflix

I boka No Rules Rules, beskriver Reed Hastings og Erin Meyer hvordan tilbakemeldinger gis og tas i Netflix.

Jeg siterer:

Giving Feedback

Teori ≠ praksis

David Deutch om teori.

Teori er objektiv, uten verdivurderinger. Praksis er subjektiv, med verdivurderinger.

Drømmer som blir til virkelighet

Neil Gaiman / Sandman / Dream / Morpheus Da folk sluttet å drømme

Verdier: Tillit, kvalitet og intensjon

Tillit

Kvalitet

Intensjon

Andre

Deg selv

Men mest av alt tillit

Opsjoner og opsjonalitet

Release ≠ Deploy ≠ Review

Her er tre engelske ord. Vi bruker ofte disse ordene når vi snakker om programvareutvikling, selv på norsk.

Begrep Norsk begrep? Min definisjon
Deploy Få ny kode ut sammen med den “ekte” koden
Release “prodsetting”? Starte å kjøre den nye koden
Review Kodegranskning Noen andre ser over koden og kommenterer.

“alle kan lese og skrive alt”—Om kulturen på MIT og Bell labs på 70- og 80-tallet

E-postlister og patcher: Linus Thorvalds lager et useriøst hobbyprosjekt

Release, deploy og review i open source-prosjektene til Michiel Borkent

God kodegranskning fokuserer på grensesnitt mellom moduler

Les mer (på engelsk): Review the interface

Teori og praksis

Interaktiv programmering

Observability

Logger

Test-dreven utvikling

REPL-greven utvikling

Hypotesetesting i produktutvikling

  1. Lage opsjoner
  2. Flytte opsjoner fra vage ideer til ekte initiativer
  3. Funker det? For hvem?

Tillit, kvalitet og intensjon i relasjonen til de som skal bruke produktet.

  1. tillit. Stoler de på deg? Kommer de til å fortelle deg at det du har laget er dritt hvis du spør hva de mener? ønsker de å fortelle deg om hverdagen sin, eller vil de helst få deg ut døra så de kan fortsette med det de egentlig bryr seg om å få gjort i dag?
  2. kvalitet. Hva setter de pris på i hverdagen? Hva er for dem et godt stykke arbeid?
  3. intensjon Hva må de gjøre på en arbeidsdag? Hva starter de med, og hva slutter de med?

Hierarkier og navnerom

Hierarki eller navnerom til organisering av innsikt?

  1. Wikipedia organiserer innsikt etter unikt navn, ikke etter hierarki.
    1. Men du kan organisere i hierarki eller liste også. Det gjøres via metadata, spørringer og egne sider for hierarki.
  2. Biblioteker har førsteklasses støtte for bøker, og legger så indekser oppå. Du kan gjøre spørringer etter hvilke bøker en forfatter har skrevet, eller filtrere på emneknagger (tags).
  3. Internett organiserer kunnskap etter navnerom. URL-er ser mistenkelig hierarkiske ut, men ikke la det lure deg! På toppen har vi domenenavn, vårt globale system for å unngå kollisjoner i navnerom. Ett av domenene på Internett er teod.eu, der finner du et underdomene som heter play.teod.eu.

Hvis du starter med organisering etter navnerom, kan du innføre opt-inn-hierarkier i etterkant, akkurat som Wikipedia gjør det. Hvis du starter med organisering etter hierarki / taksonomi, blir du låst. Hva gjør du når du har kategorisert noe feil? Hva gjør du med referansene til det du har kategorisert feil?

Hierarki eller navnerom til organisering av kode?

Før tenkte jeg hierarki / taksonomi for å splitte en kodebase i filer (klasser, …). Nå tenker jeg navnerom.

hierarki/taksonomi Kategorisering av et domeneproblem
navnerom Et sett med ord som er fine å bruke sammen

Det beste eksempelet jeg vet om på dette er hvordan standardbiblioteket til Clojure er organisert. Det aller meste er i clojure.core. Det er ikke gjort forsøk på å kategorisere alle tingene man trenger som Clojure-progravareutvikler. Det er i stedet gjort en innsats for å bygge opp et sett med navngitte byggeklosser som fungerer godt sammen.

Et annet navnerom jeg liker godt og bærer preg av tanken “la oss lage ett kraftig navnerom” er datomic.api. Ett navnerom med det du trenger for å jobbe med data.

Navnerommet alene svarer ikke på hvor man bør starte først. (Da bør man lese en guide, ikke en API-referanse). Men dette er en kjapp start:

  1. Bruk datomic.api/connect for å koble til databasen
  2. Bruk datomic.api/db for å hente siste versjon av databasen
  3. Bruk datomic.api/as-of for å hente en tidligere versjon av databasen
  4. Bruk datomic.api/q for å gjøre en databasespørring
  5. Bruk datomic.api/entity for å hente ut én entitet fra en primærnøkkel.

Feedback: bredde, responstid og komprimering

Diskusjon

§

Du kan nå trygt slutte å lese dette dokumentet. Denne seksjonen er ikke ment til å leses fra A til Å, men er ment som et sted til å samle ting som ikke passer andre steder.

Kommentarer fra andre, problemer med teksten, uferdige og utygde ting som bør inn, you name it.