Eksempelrapport

Arkitekturreview: Tidsplan ApS (eksempel)

Dette er et eksempel. Virksomheden, personerne og tallene er opdigtede. Det viser, hvordan et arkitekturreview er bygget op: først forretningen, så hvad der er solidt, hvad der er risikabelt, og hvad der skal ændres først.

Tidsplan laver software til planlægning af opgaver for VVS'ere og elektrikere i Danmark: en webapp til kontoret og en mobilapp til folkene ude på pladsen. Seks udviklere, omkring 120 kundevirksomheder og en Java-backend (Spring Boot) på PostgreSQL i én cloudregion i EU.

1. Forretningens næste behov

Aftalt med stifterne og produktchefen, før jeg så på koden. Alt nedenfor er målt op imod det.

  1. Fem gange så mange kunder på 18 måneder, og omkring ti gange så mange opgaver planlagt om dagen, mest fra Sverige.
  2. Svenske kunder: svensk sprog og svensk moms, og kundedata, der bliver i EU.
  3. Integration med regnskabsprogrammer: opgaverne overføres automatisk til kundernes regnskabsprogram, uden at nogen skal indtaste dem to gange.
  4. Arbejde på pladsen uden dækning: kældre og nybyggerier har ofte ingen, og ændringer lavet offline må ikke gå tabt.
  5. Udgivelser flere gange om ugen, uden nedetid. I dag sker det fredag aften, og appen er nede i omkring 15 minutter.
  6. En teknisk due diligence til næste investeringsrunde, om cirka et år.
  7. AI-kodeagenter til teamet, på en sikker måde.

2. Det er solidt

  • Én kodebase med klare moduler. Planlægning, fakturering og kunder ligger i hver sin pakke med få kald imellem. Det er et godt sted at vokse fra; det behøver ikke blive til mange services.
  • PostgreSQL er den rigtige database til forretningen og kan bære den planlagte vækst.
  • Faktureringen er godt testet, og teamet stoler på sine tests der.
  • Teamet kender systemet. To af de første udviklere er her stadig.

3. Det er risikabelt

Ordnet efter, hvor meget det truer planen i afsnit 1.

  • A

    Mobilsynkroniseringen overskriver hele opgaver: den enhed, der synkroniserer sidst, vinder

    Ændringer lavet offline går tabt i dag, og det bliver værre med flere folk på pladsen.

    Krav: 1, 4

  • B

    Integrationerne til regnskabsprogrammer kører inde i webforespørgslerne

    Et langsomt regnskabsprogram gør appen langsom for alle, og hvis et kald fejler, går opdateringen tabt.

    Krav: 1, 3

  • C

    Planlægningskalenderen læser én stor opgavetabel uden de rigtige indeks

    I dag tager kalenderen omkring 2 sekunder, når der er travlt; med ti gange så mange opgaver kan den ikke bruges.

    Krav: 1

  • D

    Udgivelser kræver nedetid

    Fint med 120 kunder, men ikke med 600 i to lande.

    Krav: 1, 5

  • E

    Adgangskoder og nøgler ligger i konfigurationsfiler i repositoriet

    En risiko nu og en stopklods, før AI-kodeagenter får adgang, og før en due diligence.

    Krav: 6, 7

  • F

    Sletning af en kundes data kræver manuel SQL

    Der kommer flere GDPR-anmodninger, når antallet af kunder vokser, og investorernes tekniske rådgivere vil spørge ind til håndteringen.

    Krav: 2, 6

4. Det skal ændres først

Med fordele og ulemper og et groft estimat for hvert punkt. Estimaterne gælder for dette team på seks.

  1. Adgangskoder og nøgler ud af repositoriet og regler for AI-kodeagenter (risiko E)

    Et centralt lager til adgangskoder og nøgler, rotation af eksisterende nøgler, en regelfil til agenterne og review af deres ændringer.

    Indsats: 2 til 3 dage

    Afvejning: ingen, der er værd at nævne; gør det først.

  2. Indeks og forespørgsler pr. virksomhed til kalenderen (risiko C)

    Indsats: 2 dage

    Afvejning: lidt mere omhu med hver ny forespørgsel; et tjek af forespørgslerne i testsuiten holder styr på det.

  3. Integrationer via en jobkø (risiko B)

    En outbox-tabel i PostgreSQL og en worker, der prøver igen.

    Indsats: 1 til 2 uger

    Afvejning: opdateringer når frem til regnskabsprogrammet med nogle sekunders forsinkelse i stedet for med det samme; ingen her har brug for øjeblikkelig opdatering.

  4. Udgivelser uden nedetid (risiko D)

    To instanser af appen bag load balanceren og databaseændringer, der virker med både den gamle og den nye version.

    Indsats: omkring 1 uge

    Afvejning: databaseændringer tager to udgivelser i stedet for én.

  5. Synkronisering pr. ændring, ikke pr. hel opgave (risiko A)

    Telefonen sender det, der er ændret, felt for felt, og serveren gemmer ændringerne, så to personer, der retter i den samme opgave, ikke længere sletter hinandens arbejde.

    Indsats: 3 til 4 uger

    Afvejning: den største ændring her, så den starter efter punkt 1 til 4 og rulles først ud til nogle få kunder.

  6. Sletning af en kundes data som en funktion i appen (risiko F)

    Indsats: omkring 1 uge

Det skal ikke gøres nu: dele systemet op i services eller skifte PostgreSQL ud. Ingen af delene løser en af risiciene ovenfor, og begge dele ville tage teamets næste seks måneder.

5. Beslutningslog

Behold én kodebase, og styrk modulerne i den.

Hvorfor: modulerne er allerede klare, og teamet er seks personer.

Alternativer: separate services til planlægning og fakturering.

Tages op igen, når: et modul skal skalere eller udgives for sig selv, eller teamet kommer over omkring 15 udviklere.

En jobkø i PostgreSQL, ikke en message broker.

Hvorfor: én database at drive, tage backup af og forstå.

Alternativer: Kafka eller en kø i skyen.

Tages op igen, når: køen bruges til mere end integrationer, eller mængden af jobs bliver for stor til én database.

Synkronisering via registrerede ændringer.

Hvorfor: det er den eneste løsning, der forhindrer, at folk uden dækning mister deres arbejde.

Alternativer: lås en opgave, mens én person retter i den, hvilket fejler netop når der ikke er dækning.

Tages op igen, når: den nye synkronisering har kørt i tre måneder hos nogle få kunder.

6. Gennemgang

En time med stifterne og udviklerne til at gennemgå resultaterne, besvare spørgsmål og aftale rækkefølgen af arbejdet. Teamet planlagde derefter at gennemføre punkt 1 til 4 i løbet af de næste seks uger.

Vil du have et review som dette af dit eget system?

Book en samtale på 30 minutterSådan foregår et review