Stop fremtidssikringssoftware

Du kan læse denne artikel på min egen blog, hvis du foretrækker det frem for medium.

Hvis jeg kan pege på en entydig idé, der dræber flere produkter end nogen anden, er det fremtidssikring.

Fremtidig korrekturssoftware findes i mange varianter, men de fleste tilfælde af fremtidig korrektur følger det samme mønster.

Vi har brug for {X}, til trods for at {Y} er et meget lettere alternativ, fordi når {Z}, vil det gøre vores liv lettere.

Hvor {Z} er en begivenhed, der kan ske en gang i den fjerne fremtid.

Her er nogle eksempler:

  • Vi er nødt til at bruge en kubernetes & docker-baseret løsning til vores infrastruktur, på trods af at en enkelt stor server er et meget lettere alternativ, fordi når vi skal skalere det op til 11, vil det gøre vores liv lettere.
  • Vi har brug for et distribueret design til vores databehandling, på trods af at en centraliseret løsning er et meget lettere alternativ, fordi når en kunde kræver 5 9s oppetid i SLA, vil det gøre vores liv lettere.
  • Vi er nødt til at ansætte et team af udviklere og bygge intern software, til trods for at wordpress og shopify er et meget lettere alternativ, fordi når vores kundegrundlag vokser til 100 gange, hvad den er nu, vil det gøre vores liv lettere.
  • Vi er nødt til at bruge et arvebaseret design til vores typer, på trods af at sammensætning er et meget lettere alternativ, fordi det efter 5 års codebase-vækst vil gøre vores liv lettere.
  • Vi er nødt til at skrive denne kode i C ++ og have et materialiseret visningsbaseret cachelag, på trods af et Python-script, der spørger, at Postgres direkte er et meget lettere alternativ, fordi når vores datavolumen øges meget, vil det gøre vores liv lettere.

For et stykke tid siden skrev jeg en artikel om imaginære problemer, ting, som folk løser for at holde sig underholdt i stedet for at tilføje værdi.

Fremtidig korrekturindustri falder normalt i denne kategori. Jeg vil gå så langt som at sige, at fremtidssikring er det foretrukne imaginære problem hos de fleste små virksomheder.

Men det er værd at blive drøftet videre, fordi fremtidssikring faktisk kan hjælpe et produkt, og det kan udføres korrekt. Alligevel gør de fleste mennesker det forkert og skader deres arbejde i processen.

At opnå succes er sværere end at leve med det

Så skandaløst som det måske lyder, synes jeg berømthedskultur er en af ​​de førende årsager til dårlig fremtidssikring.

Folk har denne mærkelige besættelse med at prøve at placere sig selv i skoene hos en meget mere succesrig. De laver derefter planer fra dette perspektiv i stedet for at tænke på deres egne midler.

Alle fantaserer om, hvad de ville gøre med en slags fantastisk kraft, de ikke har. Vær den magt til at herske i en nation, være en milliardær, være berømt, være en virtuos eller være i stand til at flyve og slå folk med supermenneskelig styrke.

Problemet med softwareudviklere er, at de får til at handle ud for disse fantasier for meget. Software er et meget ligestillingsmedium. Du behøver ikke være Facebook for at opbygge en social-medie-platform, der kan understøtte "Facebook-skala" ... men du spilder din tid på at bygge den. Facebooks magi bestod i at være i stand til at erhverve milliarder af brugere, og skalering af systemet var den lette del.

Problemet her er todelt:

  • a) At opnå vækst er meget sværere end at støtte den
  • b) De fleste exceptionelle og populære ingeniører arbejder på produkter, der skal skaleres

Punkt a) er slags åbenlyst, når du tænker over. Hvor mange ud af alle softwarecentriske virksomheder, der nåede en indtægt i milliarder eller brugerbase i millioner, hvor mange har fejlet? Måske 80%… hvis vi skal definere “fiasko” på en meget streng måde.

Alligevel er 0,05% nogensinde nået ud af alle softwarecentriske virksomheder, der nogensinde er oprettet, den slags skala.

Problemet med fremtidig korrektur er, at det normalt er beregnet til at hjælpe i de scenarier, en virksomhed eller et produkt ikke kommer til. Vær det scenarie, der har 1.000 teammedlemmer, 10.000.000 brugere eller 10 store budgetkunder med drakoniske krav og øje for perfektion.

Og det er svært at sige NEJ til fremtidens korrektur, da det bryder alles fantasi om succes. Det forstyrrer folk fra at forestille sig at tage Amazon, det bringer dem tilbage til at tænke på nutiden. Men i øjeblikket har du 50 kunder, og 30 af dem er familie og venner, hvilket er en temmelig nedslående situation at tænke på.

Punkt b) hjælper ikke med denne vildfarelse. Det er kun naturligt, at de bedste software-ingeniører arbejder i topjob i topvirksomheder. Enten fordi de var med til at skabe dem, eller fordi de får betalte millioner for at opretholde dem.

Pareto-princippet fungerer imod os her, da det er de bedste software-ingeniører, der skriver de fleste af bøgerne, giver de fleste af foredragene og skriver de fleste af whitepapers.

Alle hører dette konstante skrav om at køre tjenester, der distribueres på tusinder af maskiner, håndtere petabytes af data og kæmpe for hver eneste decimal af ydeevnen.

Men de fleste af os behøver ikke at tænke på den slags skala eller perfektion, som Facebook (det sociale medies websted, ikke firmaet) eller Google (søgemaskinen, ikke den onde kabal) kræver.

Så hvis det ikke hjælper at lukke øjnene og billedbehandle din virksomhed 5 år fra nu, hjælper vi ikke med at fremtidige bevis?

Nej, selvfølgelig ikke, det er vigtigt at tænke på fremtiden. At designe for fremtiden er vigtigt, men vi er nødt til at gøre det på en bedre måde.

Design til fleksibilitet, skab det ufuldkomne

Når det kommer til at tænke på fremtiden, er mindre ofte mere.

Mens nogle få produkter faktisk fortsætter med at opfylde de nøjagtige behov, de blev forestillet sig for, er de fleste af dem nødt til at tilpasse sig på vej til succes.

Der er næsten aldrig et match lavet i himlen, hvor du leverer A og 90% af dine kunder har brug for A. Normalt giver du A og 90% af dine kunder har brug for Z. Men A er det nærmeste alternativ til Z, ingen leverer Z ... så nogle kunder beslutter at afregne.

Det fine ved at få kunden til at sætte sig ind i dit produkt er, at du derefter kan ændre det, så det passer til deres nøjagtige behov. I det væsentlige hjælper dine kunder dig med at opdage et hul på markedet. Når du er blevet bedre til at udfylde dette hul, vil du opleve vækst.

Dette er et produktivt tankegang, fordi det tilskynder til en "mindre er mere" tilgang til fremtidig korrektur. Forberedelse til fremtiden indebærer ikke at tackle kompleksiteten, men snarere fjerne så meget af det som muligt. Gør dig selv tilpasningsdygtig.

Jo enklere din codebase er, jo lettere er det at justere for at opfylde et andet formål.

”Jeg hader kode, og jeg vil have så lidt af det som muligt i vores produkt.” - Jack Diederich

Hvis du har designet noget, der fungerer perfekt, har du lavet nogle ofre undervejs. Disse ofre handler normalt omkring fleksibilitet.

Ofte er det den ufuldkomne software, der fortsætter med at løse verdens problemer, da den ufuldkomne er mere fleksibel. At være ufuldkommen, pr. Definition, giver nogle plads til forbedringer.

Design optimistisk kan fremtiden behageligt overraske dig

En anden vigtig ting at huske er, at verden omkring dit projekt ikke er statisk.

Udfordringerne, der kan dukke op næste år, har næste års teknologi til at løse dem.

Mange mennesker designer ikke kun uden at tænke på fremtidige værktøjer, men de designer omkring værktøjer, der er årtier gamle. De begrænser sig med begrænsninger, der længe er gået.

Lad mig sige om et bestemt emne her for bedre at forklare dette punkt: Designe distribueret software for at have nok computerkraft til din rådighed.

En af de almindelige årsager, som folk giver for at designe distribueret software, er det faktum, at en maskine ikke vil være i stand til at skalere op til de specifikationer, de ønsker.

Selvom det er tilfældet i nogle situationer, har jeg svært ved at tro det på de fleste projekter, især i startups, som næppe har nogen klienter.

Jeg tror, ​​en del af grunden er, at de fleste, der bygger software i 2018, stadig tænker på serverne fra 2005.

Computere forbedrer sig meget hvert år, og der er masser af udbydere derude, der sælger billige dedikerede servere.

Lad mig beskrive en low-end stor server til dig:

  • To Xeons E5–2680v4 (28 kerner & 56 tråde, klotring ved 2,4 GHz til 3,3 GHz)
  • 512 Gigabyte DDR4–2400 RAM
  • 2 NVMe SSD'er på hver 1,2 TB (~ 3 GB / s læst og ~ 1,5 GB / s skriv hver).

Jeg vil vædde på, at meget af verdens distribuerede computersoftware har arbejdsbelastningskrav, der er opstillet, mindre end halvdelen af, hvad den amatøriske server kan trække ud.

Den slags server, jeg beskrev ovenfor, koster ~ 800 til 1300 $ / måned afhængigt af placering. Du kan bogstaveligt talt få 10 af disse for en erfaren DevOps-ingeniør i London.

Det fantastiske ved denne server er, at det kun vil være halvt så dyrt om 2 eller 3 år.

Den vidunderlige ting med computere er, at de bliver ved med at blive bedre, og de vil fortsætte med at gøre det på en lineær måde indtil slutningen af ​​2020'erne. På det tidspunkt, hvem ved, hvilke nye opfindelser der kommer til scenen. Vi kan endda se, at open source-hardwarerevolutionen finder sted inden da.

Alligevel designer folk fortsat software til hardwarespecifikationerne og priserne i de tidlige 2000'ere, når du virkelig skulle designe din 2018 software til maskinerne i 2019.

Men dette gælder mere end server. Hvis du vil tænke på fremtiden, skal du tænke på alle de perifere enheder, der følger med. Jeg er temmelig sikker på, at de fyre, der har bygget en stemme-frontend til deres produkt i 2016, er ganske glade i 2018.

Hvad er det perifere design til i 2018? Fuck, hvis jeg ved det. Jeg ved dog, at det er en, der endnu ikke er blevet populær. En, der vil hjælpe dig med at få et monopol, når det bliver stort, fordi du fremtidssikrer din software til det.

Og dette går ud over hardware, fremskridtene inden for software er helt fantastiske. Web-browsere bliver universelle VM'er på grund af tilkomsten af ​​WASM. Om 2 år vil du være i stand til at opbygge en højtydende app ved at samle den til nøjagtigt 1 mål: websamling.

Men på trods af dette designer folk stadig til hjemmecomputere fra 2012. De bruger Babel, på trods af at 99% + af deres brugere har ES6-browsere.

Nyt sprog dukker op overalt, og nogle er faktisk meget gode. På kun de sidste 8 år har vi haft Go, Rust, Scala og D med, hvilket ændrede spillefeltet til systemprogrammering fuldstændigt. I de næste 2 år forudsiger jeg, at Julia muligvis fører en lignende revolution inden for videnskabelig computing ... Og det er kun de felter, jeg personligt interesserer mig for, summen af ​​kommende fantastiske ting er utroligt.

Men jeg afviger ...

Det er let at blive begejstret for fremtiden. Men helt ærligt, er der ingen, der ved, hvad der vil komme om 1 eller 2 eller 5 år fra nu. Der er nogle kollektive og personlige ideer, men de er naturligvis ikke perfekte.

Hvis du faktisk ønsker at "fremtidssikre" software, skal du først forstå, hvad nutiden kan tilbyde. Desuden hjælper det normalt med at foretage nogle konservative databaserede skøn om, hvad fremtiden vil have i vente.

Fremtidig korrekturssoftware til 2020, selv om det er i zeitgeist i de tidlige 2000'ere, vil ikke hjælpe dig selv i de bedste scenarier.

Så stopp ikke med fremtidig korrektur af din software

Bare start med at gøre det på den rigtige måde.

Design ikke kun med hensyn til fremtiden for dit produkt, men med fremtiden for alle dets omgivende økosystemer.

Design til fleksibilitet, ikke til perfektion. Fleksibilitet er det, der i sidste ende hjælper dig med at tilpasse din software til fremtiden. Det giver dig mulighed for lettere at tage de virkelige udfordringer op, snarere end at beskytte dig mod imaginære.

Hvis du nød denne artikel, kan du også lide:

  • Fantasiske problemer er rodet til dårlig software
  • Vær venlig at opfinde hjulet igen