De tre principer jag nämnde i bloggposten:
… har i praktiken lett till en del konkreta sätt att tillämpa de tre principerna, som jag själv alltid följt när jag ansvarat för arkitekturfrågor. Hoppas att min sammanställning kommer till nytta. Som rättesnöre för mig har de under åren sparat en hel del tid. När jag arbetat efter omfattande metoder och ramverk har punkterna nedan varit de centrala.
Ny teknik och nya funktioner driver med automatik upp komplexiteten i en it-stack. Därför behövs ständiga förenklingar och konsolideringsinsatser. Det är en del av livscykelkostnaden.
Förenkling innebär kontinuerlig konsolidering, eliminering av överlappande funktioner och ett ständigt ifrågasättande av om man måste ta allt ansvar själv. Bara när varför är klarlagt, går det att vara säker på vilka delar som går att förenkla. Det är sammanhanget som i praktiken är avgörande. Den övergripande förståelsen för vad som vart system är på väg gör tvärfunktionella frågor som integration, regelefterlevnad och informationssäkerhet hanterbara och relevanta, istället för att bli allt svårare. Utan kontroll blir hela miljön lätt ett alltmer komplicerat lappverk.
”Utan varför, blir all prioritering meningslös.”
Dessutom är risken för att informationssäkerhet och integritet går förlorade på vägen. Tråkigt nog har jag under min karriär sett fler exempel på att så är fallet än motsatsen.
Att köpa färdiga funktionsblock som applikationskoncept, arkitekturkomponenter, publika molnkomponenter eller för den delen Basalts privata moln blir en nyckel. Det är den typen av åtgärder och förutsättningslöst tänk som gör helheten gripbar. Att se och förstå varför blir lättare.
Bara för att något går fort, innebär det inte att det är rätt. För mig är fort och rätt två oberoende parametrar. Hotet utifrån gör fort mycket viktigare idag, och det ställer krav på att helheten är anpassad för det.
Det finns självklart enkla ekonomiska principer som nuvärde, som säger att tillgänglig nu är värt mer än tillgänglig senare. Det är inte det jag avser, utan snarare att sätta förutsättningarna för att kunna leverera snabbare.
”Cyberhotet gör det allt viktigare att kunna jobba fort. Krav på reaktionstid har minskat från veckor till timmar.”
Både fort och rätt behöver vara en del av basfunktionaliteten, som det är när man köper färdigt. Det är ju till exempel ett av kärnvärdena med outsourcing. Hela miljön blir någon annans ansvar. Molnet är ju också en form av outsourcing, bara mer uppdelat på komponenter, och automatiserat från grunden. Fort går knappt att göra idag utan hög grad av automatisering, och som är en inneboende egenskap i ett moln, oavsett om det är privat eller publikt.
Det är den typen av struktur och genomarbetade lösningar som gör det möjligt att leverera i bitar, så att varje leverans blir liten, mindre komplex och värde kan genereras snabbare. Att bygga system så, tvingar hela arkitekturen och arbetssätt på såväl utveckling som drift att följa i samma spår – i den mån de numera är separata.
Med små och täta releaser minska risken för att man utvecklar funktioner som inte kommer till nytta och tillfällen till att få feedback om vilka problem som är viktigast att hantera blir fler.
”Fort och rätt behöver vara basfunktionalitet, när man köper färdigt.”
Den typen av lösningar leder vidare till exempel till att huvudprinciperna för kommunikation mellan system sker asynkront och med webb-orienterade tankesätt som meddelandeströmmar istället för synkrona integrationer med handskakning. De senare tenderar att kräva att hela informationskedjan är implementerad, istället som i det asynkrona fallet, där nya funktioner införs i mindre enheter och fungerar oberoende av varandra. Lösningarna man väljer, oavsett om de köps eller byggs behöver följa samma tänk.
För att lyckas med små och separata initiativ, behövs en tydlig bild av vart man är på väg och hur det är tänkt att saker hänger samman. Återigen kommer kartan till nytta.
Med en karta, eller långsiktig plan, blir det också tydligt hur lång livslängd mer kortsiktiga investeringar har. Först då går det egentligen att bestämma värdet av en lösning. Kortfristiga avvikelser från målbilden lösningar behöver inte vara fel, men utan målbild saknas sätt att bedöma städkostnaden och kalkylen kommer vara baserad på fel indata. Jag brukar kalla det för backspegel-metoden. Nu är väl tyvärr backspegeln snarare normalfallet för investeringar, där att sopandet under mattan av framtida kostnader bara ökar spretigheten.
Att ekonomiskt motivera en konsolidering eller förenkling går normalt inte i en sådan kultur. Trettiofem år senare sitter man fortfarande kvar med samma kärn-system, som en av mina tidigare arbetsgivare gjorde. Vad det gör för kulturen är förödande. Med tiden blev förändring i sig en risk och något man gick omvägar om. Att ta bort system blir svårare och svårare. Förståelsen på detaljnivå för hur information flödade lämnade dessutom en del övrigt att önska, så verklig säkerhet var en önskedröm minst tio år in i framtiden.
Backspegel-metoden gör det därför svårt att hantera tekniksprång och nya hot. Att något inte hänt innebär inte att det inte kommer att hända, och att hantera ett tekniksprång kommer upp på agendan först när konkurrenter sprungit ifrån en och du inser vad som hänt efter en analys av hur saker gått så illa. Att istället ha en karta, eller en målbild, innebär att någon åtminstone försöker förstå vilka utmaningar man står inför och kan börja prioritera åtgärder innan resten av marknaden redan gjort det.
”… att hantera ett tekniksprång kommer upp på agendan först när konkurrenter sprungit ifrån en …”
Dessutom ignorerar backspegel-metoden i princip risk. Risker blir en separat process och hanteras utan att synka med resten av it:s agenda, vilket i praktiken resulterar i lösningar som hanterar akuta problem men lämnar hål. Ännu mer lappa och laga, alltså. Dessutom hamnar man gärna i ett läge där ansvaret för att hantera en risk blir frikopplat från hur den uppstod. Kommunikation om risker som existerar tenderar att få något av ”vargen kommer” över sig eftersom de upprepas gång på gång i möten utan att något gjorts och gröper över tid ur förmågan att prioritera faktabaserat.
Därför blir en karta en nödvändig förutsättning för att kunna hålla en stringens i det man gör på it.
Sen har vi det där med att säga nej till verksamhetens initiativ. Det förtjänar ett eget litet avsnitt. När it säger nej till en verksamhet som har pengar, går verksamheten ut och köper en lösning på stan. Det är ju inget nytt. Sist jag blev överkörd själv – dessutom av ytterst seniora ledningspersoner som borde veta bättre – upptäckte man säkerhetshål som fördubblade projektets längd och all tid och pengar som icke insatta personer trodde sig spara försvann och rejält mer därtill. Dessutom blev den slutliga lösningen ett lappverk, där bara de största säkerhetshålen täpptes till. GDPR blev mer eller mindre ignorerat.
Nu fattas många beslut på det viset. Vi har väl alla sett det hända, och därtill alldeles för ofta. Vad som är förvånande, är att vi misslyckas med med att göra något åt det, att vi misslyckas med att förklara konsekvenserna så att vi kan fatta bättre beslut. Det enda sätt jag hittat att hantera problemet är svårt:
Verksamheten kanske inte får allt med en gång, men i takt med att den får det du lovat i tid, ökar förtroendet för att det blir gjort när du ber om respekt för andra prioriteringar. Så säg inte nej.
”Ta pengarna och kör så det ryker.”
Följer du principerna jag nämnt ovan, har du ju kartan och verktygen för att leverera snabbt.
Om jag extraherar actions ur det här resonemanget får jag:
Sök på sidan
Sök efter sidor eller nyheter
Kaka | Varaktighet | Beskrivning |
---|---|---|
cookielawinfo-checbox-analytics | 11 months | Denna cookie ställs in av GDPR Cookie Consent-plugin. Cookien används för att lagra användarens samtycke för cookies i kategorin "Analytics". |
cookielawinfo-checbox-functional | 11 months | Cookien sätts av GDPR-cookie-samtycke för att registrera användarens samtycke för cookies i kategorin "Funktionell". |
cookielawinfo-checbox-others | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other. |
cookielawinfo-checkbox-advertisement | 1 year | Denna cookie, som anges av GDPR Cookie Consent-plugin, används för att registrera användarens samtycke för cookies i kategorin "Annons". |
cookielawinfo-checkbox-necessary | 11 months | Denna cookie ställs in av GDPR Cookie Consent-plugin. Cookies används för att lagra användarens samtycke för cookies i kategorin "Nödvändigt". |
cookielawinfo-checkbox-performance | 11 months | Denna cookie ställs in av GDPR Cookie Consent-plugin. Cookien används för att lagra användarens samtycke för cookies i kategorin "Prestanda". |
viewed_cookie_policy | 11 months | Cookien ställs in av GDPR Cookie Consent-plugin och används för att lagra om användaren har samtyckt till användningen av cookies eller inte. Den lagrar inga personuppgifter. |
Kaka | Varaktighet | Beskrivning |
---|---|---|
bcookie | 2 years | LinkedIn ställer in denna cookie från LinkedIns delningsknappar och annonstaggar för att känna igen webbläsar-ID. |
bscookie | 2 years | LinkedIn ställer in denna cookie för att lagra utförda åtgärder på webbplatsen. |
lang | session | LinkedIn ställer in denna cookie för att komma ihåg en användares språkinställning. |
lidc | 1 day | LinkedIn ställer in lidc-cookien för att underlätta valet av datacenter. |
Kaka | Varaktighet | Beskrivning |
---|---|---|
_ga | 2 years | _ga-cookien, installerad av Google Analytics, beräknar besöks-, sessions- och kampanjdata och håller även koll på webbplatsanvändningen för webbplatsens analysrapport. Cookien lagrar information anonymt och tilldelar ett slumpmässigt genererat nummer för att känna igen unika besökare. |
_ga_756JKDQ1KE | 2 years | Denna cookie installeras av Google Analytics. |
_gat_gtag_UA_55739322_1 | 1 minute | Inställd av Google för att särskilja användare. |
_gat_UA-55739322-1 | 1 minute | En variant av _gat-cookien som ställts in av Google Analytics och Google Tag Manager för att tillåta webbplatsägare att spåra besökarnas beteende och mäta webbplatsens prestanda. Mönsterelementet i namnet innehåller det unika identitetsnumret för kontot eller webbplatsen det hänför sig till. |
_gid | 1 day | Installerad av Google Analytics lagrar _gid cookie information om hur besökare använder en webbplats, samtidigt som den skapar en analysrapport över webbplatsens prestanda. En del av de uppgifter som samlas in inkluderar antalet besökare, deras källa och de sidor de besöker anonymt. |
_hjAbsoluteSessionInProgress | 30 minutes | Hotjar ställer in denna cookie för att upptäcka den första sidvisningssessionen för en användare. Detta är en True/False-flagga som sätts av cookien. |
_hjFirstSeen | 30 minutes | Hotjar ställer in denna cookie för att identifiera en ny användares första session. Den lagrar ett sant/falskt värde, vilket indikerar om det var första gången Hotjar såg den här användaren. |
_hjIncludedInPageviewSample | 2 minutes | Hotjar ställer in denna cookie för att veta om en användare ingår i datasamplingen som definieras av webbplatsens sidvisningsgräns. |
_hjIncludedInSessionSample | 2 minutes | Hotjar ställer in denna cookie för att veta om en användare ingår i datasamplingen som definieras av webbplatsens dagliga sessionsgräns. |
_hjTLDTest | session | För att bestämma den mest generiska cookie-sökvägen som måste användas istället för sidans värdnamn, ställer Hotjar in _hjTLDTest-cookien för att lagra olika URL-understrängsalternativ tills den misslyckas. |
CONSENT | 2 years | YouTube sätter denna cookie via inbäddade youtube-videor och registrerar anonym statistisk data. |
Google_Tag_Manager | 1 year | |
nQ_cookieId | 1 year | Albacross sätter denna cookie för att hjälpa till att identifiera företag för bättre leadgenerering och effektivare annonsinriktning. |
UserMatchHistory | 1 month | LinkedIn ställer in denna cookie för synkronisering av LinkedIn Ads ID. |
Kaka | Varaktighet | Beskrivning |
---|---|---|
VISITOR_INFO1_LIVE | 5 months 27 days | En cookie som ställs in av YouTube för att mäta bandbredd som avgör om användaren får det nya eller gamla spelargränssnittet. |
YSC | session | YSC-cookien ställs in av Youtube och används för att spåra visningar av inbäddade videor på Youtube-sidor. |
yt-remote-connected-devices | never | YouTube ställer in denna cookie för att lagra videopreferenser för användaren som använder inbäddad YouTube-video. |
yt-remote-device-id | never | YouTube ställer in denna cookie för att lagra videopreferenser för användaren som använder inbäddad YouTube-video. |
Kaka | Varaktighet | Beskrivning |
---|---|---|
_hjSession_2668272 | 30 minutes | Ingen beskrivning |
_hjSessionUser_2668272 | 1 year | Ingen beskrivning |
AnalyticsSyncHistory | 1 month | Ingen beskrivning |
li_gc | 2 years | Ingen beskrivning |
nQ_userVisitId | 30 minutes | Ingen beskrivning |
Kaka | Varaktighet | Beskrivning |
---|---|---|
cookielawinfo-checbox-analytics | 11 months | Denna cookie ställs in av GDPR Cookie Consent-plugin. Cookien används för att lagra användarens samtycke för cookies i kategorin "Analytics". |
cookielawinfo-checbox-functional | 11 months | Cookien sätts av GDPR-cookie-samtycke för att registrera användarens samtycke för cookies i kategorin "Funktionell". |
cookielawinfo-checbox-others | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other. |
cookielawinfo-checkbox-advertisement | 1 year | Denna cookie, som anges av GDPR Cookie Consent-plugin, används för att registrera användarens samtycke för cookies i kategorin "Annons". |
cookielawinfo-checkbox-necessary | 11 months | Denna cookie ställs in av GDPR Cookie Consent-plugin. Cookies används för att lagra användarens samtycke för cookies i kategorin "Nödvändigt". |
cookielawinfo-checkbox-performance | 11 months | Denna cookie ställs in av GDPR Cookie Consent-plugin. Cookien används för att lagra användarens samtycke för cookies i kategorin "Prestanda". |
viewed_cookie_policy | 11 months | Cookien ställs in av GDPR Cookie Consent-plugin och används för att lagra om användaren har samtyckt till användningen av cookies eller inte. Den lagrar inga personuppgifter. |
Kaka | Varaktighet | Beskrivning |
---|---|---|
bcookie | 2 years | LinkedIn ställer in denna cookie från LinkedIns delningsknappar och annonstaggar för att känna igen webbläsar-ID. |
bscookie | 2 years | LinkedIn ställer in denna cookie för att lagra utförda åtgärder på webbplatsen. |
lang | session | LinkedIn ställer in denna cookie för att komma ihåg en användares språkinställning. |
lidc | 1 day | LinkedIn ställer in lidc-cookien för att underlätta valet av datacenter. |
Kaka | Varaktighet | Beskrivning |
---|---|---|
_ga | 2 years | _ga-cookien, installerad av Google Analytics, beräknar besöks-, sessions- och kampanjdata och håller även koll på webbplatsanvändningen för webbplatsens analysrapport. Cookien lagrar information anonymt och tilldelar ett slumpmässigt genererat nummer för att känna igen unika besökare. |
_ga_756JKDQ1KE | 2 years | Denna cookie installeras av Google Analytics. |
_gat_gtag_UA_55739322_1 | 1 minute | Inställd av Google för att särskilja användare. |
_gat_UA-55739322-1 | 1 minute | En variant av _gat-cookien som ställts in av Google Analytics och Google Tag Manager för att tillåta webbplatsägare att spåra besökarnas beteende och mäta webbplatsens prestanda. Mönsterelementet i namnet innehåller det unika identitetsnumret för kontot eller webbplatsen det hänför sig till. |
_gid | 1 day | Installerad av Google Analytics lagrar _gid cookie information om hur besökare använder en webbplats, samtidigt som den skapar en analysrapport över webbplatsens prestanda. En del av de uppgifter som samlas in inkluderar antalet besökare, deras källa och de sidor de besöker anonymt. |
_hjAbsoluteSessionInProgress | 30 minutes | Hotjar ställer in denna cookie för att upptäcka den första sidvisningssessionen för en användare. Detta är en True/False-flagga som sätts av cookien. |
_hjFirstSeen | 30 minutes | Hotjar ställer in denna cookie för att identifiera en ny användares första session. Den lagrar ett sant/falskt värde, vilket indikerar om det var första gången Hotjar såg den här användaren. |
_hjIncludedInPageviewSample | 2 minutes | Hotjar ställer in denna cookie för att veta om en användare ingår i datasamplingen som definieras av webbplatsens sidvisningsgräns. |
_hjIncludedInSessionSample | 2 minutes | Hotjar ställer in denna cookie för att veta om en användare ingår i datasamplingen som definieras av webbplatsens dagliga sessionsgräns. |
_hjTLDTest | session | För att bestämma den mest generiska cookie-sökvägen som måste användas istället för sidans värdnamn, ställer Hotjar in _hjTLDTest-cookien för att lagra olika URL-understrängsalternativ tills den misslyckas. |
CONSENT | 2 years | YouTube sätter denna cookie via inbäddade youtube-videor och registrerar anonym statistisk data. |
Google_Tag_Manager | 1 year | |
nQ_cookieId | 1 year | Albacross sätter denna cookie för att hjälpa till att identifiera företag för bättre leadgenerering och effektivare annonsinriktning. |
UserMatchHistory | 1 month | LinkedIn ställer in denna cookie för synkronisering av LinkedIn Ads ID. |
Kaka | Varaktighet | Beskrivning |
---|---|---|
VISITOR_INFO1_LIVE | 5 months 27 days | En cookie som ställs in av YouTube för att mäta bandbredd som avgör om användaren får det nya eller gamla spelargränssnittet. |
YSC | session | YSC-cookien ställs in av Youtube och används för att spåra visningar av inbäddade videor på Youtube-sidor. |
yt-remote-connected-devices | never | YouTube ställer in denna cookie för att lagra videopreferenser för användaren som använder inbäddad YouTube-video. |
yt-remote-device-id | never | YouTube ställer in denna cookie för att lagra videopreferenser för användaren som använder inbäddad YouTube-video. |
Kaka | Varaktighet | Beskrivning |
---|---|---|
_hjSession_2668272 | 30 minutes | Ingen beskrivning |
_hjSessionUser_2668272 | 1 year | Ingen beskrivning |
AnalyticsSyncHistory | 1 month | Ingen beskrivning |
li_gc | 2 years | Ingen beskrivning |
nQ_userVisitId | 30 minutes | Ingen beskrivning |