Månadsarkiv: augusti 2014

Det perfekta tillfället

Tidigare idag när jag kollade av Facebook dök det upp lite trevlig läsning från partiet Enhet i min news feed. Under sommaren har jag mer och mer förlikat mig med tanken på att skänka dem min röst, även om jag inte helt har bestämt mig ännu. Inlägget från partiet hade fått en uppsättning kommentarer och jag lät ögonen svepa över dem för att bättre förstå hur andra resonerar kring partiet.

En av personerna hade lämnat en kommentar som fick mig att fundera. Hen – jag minns inte om det var en man eller kvinna – berättade att hen skulle vilja lägga sin röst på partiet nu i höst om det inte vore för hotet om fortsatt borgerligt styre. Alltså resonerar personen att det i det här valet är viktigare att rösta med hjärnan än med hjärtat.

Men är det inte meningen att man ska rösta på det man vill rösta på?

Jag har hört många andra människor resonera så, att man kastar bort sin röst om man röstar på ett parti som inte har en rimlig chans att nå upp till den magiska fyraprocentspärren. Vidare kan jag tänka mig att det är fler människor till vänster på skalan som överväger att rösta på ett parti som Enhet, så visst kan jag se att det finns fog för oron som vår kommentatör känner. Enligt det resonemanget innebär en röst på Enhet en röst mindre på det vänstra blocket.

Visst. Fine. Jag fattar att man kan se det så. Men då kan man fråga sig hur alla dessa partier som ligger över eller nosar på fyraprocentspärren har blivit så stora om ingen röstade på dem när de var små? Alla partier har väl börjat med ett gäng eldsjälar? MP och vedervärdiga SD har varit små. FI var ett embryo för inte så värst länge sedan. Men någonstans måste människor ha bortsett från tanken att dessa partier är för små för att räknas och bestämt sig för att rösta på dem.

Kanske läget är synnerligen pressat mellan blocken just i år. Ska man då invänta det perfekta tillfället att följa sitt hjärta?

Tänk om det perfekta tillfället aldrig kommer?

En ros till trafikverket

Den trogne läsaren av min blogg kommer kanske ihåg en klagan jag framförde för ett par månader sedan. Vi hade då slussats mellan olika kommunala och statliga instanser i vår jakt på en fartbegränsande åtgärd utanför vårt hus. Det visade sig vara svårt att reda ut vem som hade beslutanderätt för vägen i fråga, en huvudled som löper genom hela vårt samhälle.

I april landade så ärendet hos Trafikverket Syd. Handläggningstiden hos dem var precis som vid de andra instanserna ordentligt tilltagen, i detta fall tolv (!) veckor. Utan för mycket tilltro till att det skulle hända något kände vi ändå att vi i alla fall hade lämnat över bollen.

Tolv veckor passerar alldeles för fort när det är sommar. Ur ett semesterperspektiv är det lite trist men ur ett fixavägenutanförvårthus-perspektiv var det alla tiders. När så de tolv veckorna hade passerat testade jag att ringa upp Trafikverket för att kolla av läget.

Handläggaren var på semester till den 18 augusti. Inga notiser om ärendet fanns i Trafikverkets ärendehanteringssystem. Jaha.

Idag har jag spenderat dagen mestadels i soffläge på grund av en fotoperation jag genomled i fredags. Eftersom jag inte har kunnat vara till större hjälp här hemma rent praktiskt tog jag tillfället i akt att slå Trafikverket en signal. Nu måste väl ändå handläggaren vara på plats. Efter den obligatoriska kön kopplades jag via växeln till min handläggare. Han svarade och efter lite ordväxling meddelade han att åtgärden ska ha genomförts.

Va? Vilken åtgärd?

Det visade sig att han innan sommaren beställde en beläggning av vägen utanför vårt hus. Om jag nu fattade honom rätt innebär beläggning helt enkelt nyasfaltering. I samband med detta ska den trottoar som finns utanför vårt hus – som i dagsläget inte leder någonvart – förlängas upp till ett övergångsställe vid kyrkan. Insatsen hade visst blivit aningen försenad men den är planerad att påbörjas om några veckor.

När han sa det blev jag väldigt glatt överraskad. Statliga förvaltningar kanske inte är de snabbaste men de fungerar och går i vilket fall inte i konkurs.

Förändringen innebär att vi om ett par veckor kan gå med barnen till dagis utan att på vinst eller förlust behöva springa över vägen. Lösningen känns också som en vettig kompromiss; att lägga in ett farthinder mitt i en kurva med skymd sikt bör rimligen öka risken för olyckor istället.

Ikväll blir det allt en liten dram för att fira att den enskilde faktiskt kan påverka.

Bedragare

Under min tid som systemutvecklare har jag upptäckt att det inom branschen finns en hel del människor som ger sken av att kunna allt. Ett slags supermänniskor of sorts som alltid har lösningen på alla problem. De behöver aldrig fråga eller undra när man pratar med dem för de vet ju redan allt. De tar stor plats på möten – gärna på andras bekostnad – och får med sin övertygelse allt som oftast igenom sina idéer. Det är liksom ingen som orkar ge sig in i den lönlösa debatten och argumentera emot.

Naturligtvis är det så att dessa personer inte kan allt. Det kan ingen. Och förmodligen finns det någon annan i mötesrummet som vet mer om ämnet i fråga när Superman (eller Wonderwoman för att vara PK) håller låda. Men det spelar liksom ingen roll; i denna svärm av fräcka och moderna buzzwords är det lätt att känna sig stressad, att få känslan av att alla i rummet verkar fatta utom jag. Det är ju ingen som ställer frågor?

Stressen över att inte räcka till kompetensmässigt kunde jag känna mer förr än nu. Jag minns speciellt som konsult att det i och med min roll fanns en förväntan på mig att jag skulle kunna både ditten och datten. Även som doktorand fanns det inslag av denna känsla, av att jag aldrig visste tillräckligt hur mycket jag än lärde mig.

Idag läste jag om något som kallas för Imposter Syndrome, vilket tydligen är vanligt inom yrken där ens arbete granskas. Med denna åkomma har man, trots bevisligen god kompetens, svårt att koppla samman de bra saker man gör med sin förmåga. Man ser sig nästan som en bedragare och inväntar den dagen någon kommer avslöja att ens förmåga inte lever upp till omvärldens förväntan.

Kanske har jag en lindrig släng av denna åkomma? Jag vet i vilket fall med mig att jag har höga krav på mig själv och att jag som sagt fortfarande kan känna att jag borde kunna mer för att känna mig tillräcklig. Här hjälper supermänniskorna jag inledde mitt inlägg med verkligen inte till utan bidrar istället i högsta grad till att arbetsklimatet blir prestigeladdat, att folk blir rädda för att säga fel saker eller ställa konstiga frågor.

Men vad är det för fel att fråga?

Bra fråga. För om det är något som jag har lärt mig att uppskatta så är det människor som vågar fråga, som vågar säga ”Kan du ta det där en gång till, jag hängde inte med?” eller ”Kan du berätta lite mer om X, det har jag inte koll på”. Och jag tänker att människor som vågar fråga rimligen också lär sig mer.

Fångar jag dagen?

Åtta veckor går alldeles för fort. Idag var det dags att vinka adjö till familjen och styra kosan mot jobbet. Det må vara en klyscha men tiden är verkligen relativ. Innan ledigheten började kändes åtta veckor som en evighet. Känslan i magen var lite som inför sommarlovet när man var liten. Skillnaden mellan då och nu är bara att den upplevda evigheten inte infann sig i vuxen ålder. Poff sa det.

Poffet till trots hade jag noll koll kvällen innan. Alla rutiner som en gång suttit som en smäck var som bortblåsta. Vad brukar jag ställa in larmet på? Vad brukar jag äta till frukost? Var är min jobbdator? Denna förvirring spillde över till dagen efter och gjorde morgonen till en vimsig tillställning där jag mest irrade omkring. Iväg kom jag i alla fall till slut, om än något senare än tänkt.

Väl installerad kändes det som att sparka igång en trött gräsklippare som stått i förrådet över vintern. Gräset var oväntat långt för att vara första dagen på jobbet; istället för en lugn dag var det planering och förändringar i arbetsgruppen som var på tapeten. Kaffekopparna avlöste varandra i hopp om att kroppen behövde denna form av bränsle för att vakna till liv. Och visst hjälpte det mig att varva upp, att börja fylla min hjärna med jobb igen.

Det sa poff och dagen var över. Jag satt i bilen på väg hem och sorterade tankarna. Anonyma ansikten i mötande bilar susade förbi, det sa poff igen och bilen rullade upp på vår uppfart. Jag öppnade dörren, gick uppför trappan och möttes av tjoande barn som längtat efter pappa. I denna stund kom jag på mig själv att reflektera över att det är såhär det ska vara nu framöver, i alla fall under hösten. Jag ska stiga upp på morgonen och stressa iväg, vara iväg när barnen är som gladast och komma hem igen när både jag och barnen är trötta.

Jag kommer att missa den bästa tiden på dagen med mina barn under hela hösten. I alla fall om vi bortser från helger. Denna tid kommer jag istället spendera framför en dator inne i stan, uppfylld av sånt som inte har med mina barn att göra. Livet är kort och än kortare är den period när våra barn är små.

Det är i dessa skeenden i livet jag kan önska att det här med basinkomst var realitet.

 

Kod är kommunikation – DDD style

Av någon anledning har jag alltid varit mer intresserad av att koden kommunicerar bra än all den där teknologin som finns runtomkring. Den ser jag mest som något nödvändigt ont som behövs för att få saker och ting att snurra. Visst kan jag emellanåt bli hänförd av coola tekniska lösningar, men i slutändan tappar de sin glans och jag faller tillbaka på det som gör mig sådär löjligt förtjust – att hitta rätt benämningar och modellera med dessa på ett lättförståeligt sätt som i slutändan hjälper till att lösa de problem man har.

Om en systemutvecklares intresse lutar mer åt det lingvistiska hållet finns det knappast något som gör henom så glad som Domain-Driven Design (DDD). En av de riktigt fundamentala delarna i DDD är något som kallas för Ubiquitous Language. Tanken här är att man innan ett systemutvecklingsarbete påbörjas sätter sig ner och fångar upp begrepp som återfinns inom det problemområde den tänkta lösningen avser. Detta arbete utförs av de utvecklare som ska arbeta med systemet och en eller flera domänexperter. Ut ur denna process kommer en uppsättning initiala begrepp som mappar ett till ett med verksamhetens begrepp och som sammantaget utgör ett Ubiquitous Language.

Från början behöver språket inte vara komplett eller perfekt; språket utvidgas och förfinas iterativt allt eftersom utvecklingen fortskrider. Detta språk används sedan uteslutande i systemets domänmodell – det vill säga i de klasser och konstruktioner som utgör hjärtat i systemet – för att göra den begriplig både för utvecklare och domänexperter. Den kommunikation man investerar mellan utvecklare och domänexperter har då potentialen att leda till kod som kommunicerar vertikalt  – från ledning ner till enskild utvecklare – i en organisation. Visst är det vackert?

Utökad förståelse

Så långt var jag med redan innan jag satte tänderna i Vaughn Vernons bok Implementing Domain-Driven Design. Det jag tänkte ta upp här är lite om den utökade förståelsen av DDD som jag fått i och med att jag läst boken. Lämpligt nog för detta inlägg har det just med Ubiquitous Language att göra.

Ubiquitous Languages existerar alltid i något man i DDD-termer kallar för Bounded Contexts. Man kan se dessa som partitioner i systemet i vilket ett visst Ubiquitous Language har mening. Att ett begrepps innebörd bestäms utifrån den kontext det används i är egentligen inget märkvärdigt. Det är ju så våra vanliga språk fungerar när vi kommunicerar människor emellan; med ordet ”hammare” menas förmodligen olika saker beroende på om man pratar med en snickare eller med en öronläkare.

Enligt författaren har i regel även enkla system flertalet Bounded Contexts, vilket då betyder att det i ett och samma system finns flera modeller som hålls åtskilda från varandra. Genom att man skyddar den interna modellen i en Bounded Context från att läcka ut kan den refaktoreras efter behov utan att omvärlden – det vill säga andra Bounded Contexts – behöver påverkas nämnvärt. Det gör också att modellen kan tillåtas att vara fokuserad eftersom den inte används för att lösa världens alla problem. Hur många gånger har man inte vågat ändra på en klass eftersom man då riskerar att förstöra någon helt annan del av applikationen? När jag då tänker på Bounded Context i samband med saker som Single Responsibility Principle blir jag nästan lite tårögd. 😉

Broar mellan öarna

Hur är det då tänkt att dessa isolerade ”öar” av Bounded Contexts ska hänga ihop om de inte får ta del av varandras modeller? För att förklara detta har jag skapat ett fiktivt exempel i form av en Context Map. Context Maps i DDD används för att hitta och synliggöra inbördes beroenden mellan olika Bounded Contexts. I mitt exempel (Figur 1) finner vi tre påhittade Bounded Contexts: Person registry context, Patient context och Billing context. Exemplet blir lite krystat eftersom vi inte har någon som helst insikt i domänen, men för mitt resonemang är det inte hela världen.

Figur 1
Figur 1: Context Map

Vi skulle kunna tänka oss att Figur 1 avser en Context Map för ett system inom sjukvården. U och D står för Upstream och Downstream respektive – analogin här är att upstream rinner downstream – och kan utläsas som att Patient context är beroende av Person registry context. I Person registry context – som jag tänker mig är en enkel CRUD-applikation för att registrera personuppgifter – hittar vi ett Ubiquitous Language som bland annat innehåller begrepp som ”Person” och ”Address”.

Men i Patient context finns inte begreppet ”Person” – här pratar man istället om ”Patient”. I DDD kastar man inte in begrepp bara för att det underlättar rent tekniskt – om personbegreppet inte passar in har det helt enkelt inte där att göra. Vidare ser vi att Billing context har ett beroende av både Person registry context och Patient context. I vårt exempel hämtas personinformation från Person registry context och underlag för fakturering från Patient context. I Billing context finner vi inte begrepp som ”Person” eller ”Patient” – här används istället termen InvoiceReceiver för att modellera räkningsmottagaren. Värt att notera är att både Patient och InvoiceReceiver kan ses som olika roller som kan antas av en Person. Det är tänkbart att dessa roller förmodligen håller en id-referens till aktuell Person i Person registry context.

Oavsett hur systemets Bounded Contexts hänger ihop rent tekniskt – man skulle till exempel kunna tänka sig web services – är min poäng att de aldrig, aldrig, aldrig exponerar sin interna modell. Och det finns ingen egentlig mening med det eftersom modellerna inte ska ha någon innebörd utanför sin kontext. För kommunikation mellan Bounded Contexts kan man använda Data Transfer Objects (DTOs) eller något motsvarande som endast syftar till dataöverföring. Mappning till det interna formatet sker via något som man i DDD-termer kallar för Anti Corruption Layer (ACL). Namnet låter finare än vad det egentligen är; med ACL menar vi helt enkelt ett lager som hanterar mappning från ett externt till ett internt format.

Den kritiske läsaren kanske tänker att upplägget jag beskrivit och illustrerat i Figur 1 inte är revolutionerande rent arkitektoniskt. En annan rimlig reflektion är att exemplet i Figur 1 inte heller är revolutionerande rent tekniskt. Här håller jag helt med. Vad som däremot kan anses som revolutionerande är att vi med DDD sätter lingvistik i första rummet, före coola tekniska lösningar. Om man som jag främst ser kod som kommunikation är detta perspektiv på systemutveckling oerhört intressant.