SpareBank 1 Utvikling

Dette er SpareBank 1 Utvikling, og på denne siden kan du bli bedre kjent med hvem vi er, hva vi gjør og hvordan vi jobber – gjennom oss som faktisk jobber her. Så kan du vurdere selv om du også har lyst til å bli en del av det vi mener er det beste og triveligste IT-miljøet i bransjen. Med de flinkeste folka.

Vi skaper en enklere og bedre hverdagsøkonomi

Vi utvikler og forvalter løsninger som brukes av over 1 million kunder. Det er vi skikkelig stolte av! Her kan du bli enda bedre kjent med selskapet, måten vi jobber på, løsningene vi lager, og ikke minst - ukas aller beste dag: Fagdagen.

Miljøbilde fra SpareBank 1

SpareBank 1 Utvikling på Medium @sparebank1-digital

Coachende ledelse med fem små spørsmål

I SpareBank 1 Utvikling bruker vi gjerne strukturert problemløsning når en utfordring ikke er rett frem å løse. A3 er en slik problemløsningsmetode som hjelper oss til å få felles innsikt i problemet før vi jobber med løsning, og det har gitt gunstige resultater hos oss. På ledernivå har vi imidlertid erfart en utfordring med A3-arbeid. I en hektisk hverdag kan det være krevende for lederen å følge opp forbedringsinitiativ man selv har prioritert oppstart av. Varierende grad av dialog og forankring underveis blir da et hinder for fart og kvalitet i problemløsningen, der A3-teamet kan ende opp med å kun sporadisk rapportere status til lederen. Vi bestemte oss for å teste om dette mønsteret kunne endres for skape bedre flyt i A3-arbeidet. Ambisjonen var å stimulere til økt lederinvolvering mens forbedringsarbeid pågår og unngå for stor avstand ved at man går hver til sitt etter oppstarten. Valget falt på et eksperiment der A3-problemløsning ble kombinert med samtaleverktøyet Coaching Kata.Hva er Coaching Kata?En kata er en sekvens av steg som repeteres mange ganger, til mønsteret er automatisert og kan utføres som en enhet, uten å måtte tenke over hvert enkelt steg. Kata er kjent fra bl.a. kampsport og musikkøvelser.“the karate kids” by Orly Orlyson is licensed under CC BY 2.0.Mike Rother beskriver i boken Toyota Kata to slike mønstre som hører sammen: Improvement Kata og Coaching Kata.Improvement Kata er en forbedringsmetodikk med fire steg: 1) Forstå målet, 2) få oversikt over nåsituasjonen, 3) sett et kortsiktig, tidfestet mål (target condition), og 4) utfør eksperimenter for å fjerne hindringer og bevege deg i retning av target condition. Når target condition er nådd, kan man reevaluere nåsituasjonen og sette et nytt target condition. Det er viktig å innse at det finnes en grense for kunnskapen vi har i dag, vi kan bare se et lite stykke fram. Eksperimentene gjør at vi lærer, og gradvis ser og forstår mer av veien vi må gå for å komme frem til målet. Bruk av dette mønsteret trener inn den vitenskapelige metoden for problemløsning.Coaching Kata er lederens motpart til Improvement Kata. Den består av et lite sett spørsmål som lederen bruker for å hjelpe den som driver med Improvement Kata, og forsterker mønsteret av vitenskapelig tenkning. Spørsmålene printes gjerne ut på et lite kort med hovedspørsmålene på den ene siden og refleksjonsspørsmålene på den andre.Kilde: Toyota Kata Practice GuideLederen starter med å stille spørsmål 1 og 2, og snur deretter kortet og går gjennom de fire refleksjonsspørsmålene, før man snur kortet tilbake for å gå gjennom resten. Dette mønsteret vil føles unaturlig i starten, både for lederen og den som blir coachet. Men ved å holde seg til mønsteret (kataen) mange nok ganger, vil flyten etterhvert bli naturlig for begge parter. Når mønsteret er automatisert, kan man begynne å tilpasse det til situasjonen fra gang til gang, og få enda mer verdi ut av disse korte samtalene.“Those who have seen The Karate Kid have seen kata in practice; those who have watched a jazz band play have seen the results.”- Jeffrey Liker, How the Toyota Way and Toyota Kata Fit TogetherCoaching Kata på A3-arbeidI et A3-problemløsningsarbeid er det flere planleggingssteg før man kommer fram til beskrivelsen av en ønsket fremtidig situasjon (target condition): Man må forstå problemet godt, kartlegge nåsituasjonen, spisse problemstillingen ned til den delen som skal løses først og kartlegge rotårsaker, før man er klar til å se på forslag til løsninger.Kilde: Toyota Kata Practice GuideUnderveis i planleggingsfasen er det noen faste delmål som er svar på Coaching Kata-spørsmål nr. 1 (“Hva er delmålet du jobber mot nå?”):Enighet om formuleringen av “observert problem”, dvs. hva er problemet, hvem er det et problem for, hva er konsekvensene av problemet og hvor stort er det?Enighet om hvordan problemet skal spisses og mål for forbedringen, dvs. hvilken del av problemet er det vi skal løse, og hvor stor forbedring ønsker vi å oppnå?Enighet om hypotese for fremtidig situasjon, dvs. hva er første “target condition” vi skal eksperimentere for å nå?Hva som kan være et “neste steg” eller eksperiment varierer etter hva slags delmål man jobber mot. Eksempler vi så underveis i arbeidet:En kartleggingsjobb, f.eks. måle størrelsen på problemet, prosesskartlegging, rotårsaksanalyse.Administrative ting, f.eks. finne teammedlemmer, innkalle workshops, forberedelser.Test av en ny løsning, herunder planlegging, gjennomføring, måling av resultater.Alle slike steg kan betraktes som eksperimenter hvor det kan være noe å lære, enten om selve problemet som skal løses eller om problemløsningsmetodikken.Oppsett og gjennomføringI eksperimentet ble tre deltakere coachet. Dette var medarbeidere som skulle lede hvert sitt problemløsningsarbeid sammen med et A3-team. Felles for teamene var at forbedringsarbeidet fokuserte på hvordan de kunne gjøre utviklingsprosessene sine mer effektive. Underveis var det en av deltakerne som måtte prioritere bort forbedringsarbeidet, og avbrøt derfor også deltakelsen i eksperimentet. Coachen i Coaching Kata-samtalene var deltakernes leder og eier av problemene som skulle løses. Artikkelforfatterne fungerte som 2nd coach, og var med og observerte samtalene og ga tilbakemeldinger til coachen underveis.Møtene ble kjørt en gang i uka, med 20 minutter til hver deltaker. Disse ble lagt rett etter hverandre, slik at coachen hadde satt av en time pr uke i sin kalender for de tre deltakerne. Møtene ble kjørt på Teams fordi deltakerne befant seg på ulike steder. Hvis vi skulle kjørt fysiske møter, ville vi ønsket å samle oss rundt en fysisk tavle, mens på Teams viste deltakerne fram sitt arbeid på en digital tavle eller i PowerPoint.Kilde: Toyota Kata Practice GuideHva lærte vi?Underveis i det 5 måneder lange eksperimentet ble tre retrospektiver gjennomført. Nedenfor presenteres de tydeligste læringspunktene fordelt på positive opplevelser og muligheter for forbedring.I stort erfarte deltakerne Coaching Kata som et effektivt møtepunkt med høy verdi. Samtalene tok mellom 7 og 20 minutter, og skapte nyttig dialog mellom leder/coach og medarbeider. Her kom lederen nærmere problemstillingen teamet arbeidet med gjennom løpende involvering. Videre bidro Coaching Kata-strukturen til flyt i samtalen og til at man i stor grad pratet om rett ting: Hva har vi lært siden sist og hva skal vi gjøre framover for å lære mer? Arenaen ble ikke opplevd som et klassisk statusmøte. I stedet la de hyppige møtene til rette for dialog og tilbakemeldinger som ga medarbeiderne et “puff for fremdrift” som de opplevde positivt. Samtidig bidro strukturen i samtalen til at lederen fikk trene på og forsterke et mønster for coachende ledelse. Visualisering av arbeidet ble vurdert som svært nyttig for fokuset i samtalen.«Som A3-eier gir slike samtaler langt mer involvering enn vanlig, og med minimal bruk av tid»- Leder og coach i eksperimentetEt punkt deltakerne tidlig kjente på var hvordan man kunne stille riktig forberedt til samtalene. Kvaliteten og lengden på de første iterasjonene varierte en del. Ved tydeligere fokus på hvorfor visualisering av arbeidet var viktig, kombinert med sterkere forpliktelse til å stille forberedt, økte kvaliteten på møtene samtidig som tidsbruken ble redusert. Vi mener nå at en innkalling på 15 minutter skal være nok.En annen utfordring i starten av eksperimentet var at sparring med 2nd coach på A3-tekniske spørsmål ble til hinder for gjennomføring av Coaching Kata-syklusen. For å avverge dette problemet ble møteagendaen oppdatert med en eksplisitt rekkefølge for innholdet, der Coaching Kata stod først på kjøreplanen, mens A3-teknisk sparring var mulig når det var tid til overs. Med dette grepet ble det tydelig for alle involverte at Coaching Kata-spørsmålene hadde prioritet.Utklipp fra retrospektiv-tavle for eksperimentetEt tredje hinder under den første fasen av eksperimentet var at 2nd coach brøt ut av sin observatørrolle for å ta aktivt del i samtalen. Da vi ble oppmerksomme på denne utfordringen, fokuserte 2nd coach mer på aktiv lytting, ble mer oppmerksomme på egen iver etter å delta, og overlot samtalen til de øvrige deltagere. At A3-teknisk sparring ble plassert etter Coaching Kata-syklusen gjorde det også enklere å overholde rollefordelingen.Ukesrytmen for samtalene fungerte bra for deltakerne. Behovet varierte dog underveis, da det ikke alltid hadde skjedd så mye som man følte var verdt å diskutere. Andre ganger kjente man på at det kunne være nyttig å ha muligheten for flere samtaler i løpet av en uke. Selv om kadens ble diskutert underveis i forsøket ble det ikke foretatt justeringer på oppsettet.Observasjoner fra 2nd coachUt over erfaringene som er beskrevet over, observerte vi som 2nd coacher at fremgangsmåten med de fem spørsmålene muliggjorde en form for situasjonsbestemt ledelse, der hver enkelt medarbeider fikk sparring ut fra hvor man befant seg i problemløsningen. Vårt inntrykk var at coachen benyttet spørsmålene godt, og fikk fram elementer som kanskje ikke ville ha kommet fram i en mer tradisjonell dialog om status. Blant annet observerte vi at coachen så bort fra flere forsøk på å starte samtalene med å liste opp aktiviteter man hadde lagt bak seg, og i stedet vennlig oppfordret til å starte møtet med en beskrivelse av hvilket delmål man fokuserte på, etterfulgt av detaljert refleksjon over det siste steget man hadde vært gjennom. En annen fordel med oppsettet av samtalen var muligheten for rask feedback fra 2nd coach rett i etterkant av Coaching Kata-sesjonen, med denne friskt i minne.“Being a good coach is essential to being a good manager and leader. Coaching is no longer a speciality; you cannot be a good manager without being a good coach.”-Trillion Dollar Coach: The Leadership Playbook of Silicon Valley’s Bill CampbellEffektiv arena for coachende ledelseDet kan ta tid å snu mentalitet fra status-rapportering til læringssløyfe. Erfaringen fra vårt lille eksperiment var at samtaleverktøyet traff godt ved behov for en mer coachende tilnærming til ledelse. To klassiske grøftekanter, “set & forget” preget av alenegang, og sporadisk reaktiv statusrapportering, ble unngått. Både lederen og medarbeiderne i eksperimentet synes Coaching Kata fungerte godt til formålet om dialog og forankring underveis, samtidig som samtalene tok lite tid og ga positiv effekt på selve forbedringsarbeidet.Uavhengig av problemløsningsmetode er det kanskje flere som kjenner seg igjen i en situasjon der dialog med en opptatt leder blir flaskehals for fremdrift på problemet man jobber med? Samt ledere som opplever at med covid-pandemien og fremveksten av hybridkontoret har det blitt vanskeligere å finne naturlige arenaer for samhandling med folkene man leder? Hvis man kjenner på en slik utfordring tror vi Coaching Kata kan være et interessant alternativ å teste ut.Skrevet av:Ragni Ryvold ArnesenKristoffer BergReferanserToyota Kata: Managing People for Improvement, Adaptiveness and Superior Results, Mike Rother.The Toyota Kata Practice Guide: Practicing Scientific Thinking Skills for Superior Results in 20 Minutes a Day, Mike Rother.Understanding A3 Thinking: A Critical Component of Toyota’s PDCA Management System, Durward K. Sobek II and Art Smalley.Managing to Learn: Using the A3 Management Process to Solve Problems, Gain Agreement, Mentor and Lead, John Shook and Jim Womack.Coachende ledelse med fem små spørsmål was originally published in SpareBank 1 Utvikling on Medium, where people are continuing the conversation by highlighting and responding to this story....

Av Kristoffer Berg

Speed up your Multi Module Maven Builds with turbo-maven-plugin

Fast feedback makes us happy. So if you are only looking for how to speed up your multi module build as fast as possible, go straight to turbo-maven-plugin.If you want to know more about why, and also how turbo-maven-plugin works, please keep on reading.The reason we are happy when we get fast feedback, is that it triggers the production of dopamine in our bodies. Dopamine is a happiness drug we can give ourselves for free. This is a smart thing to do as often as possible — it makes us happy.In addition to making us happy, fast feedback makes us deliver value faster. This not only feels good, it is also good for our team and the place we work.When working with Kotlin and Java, feedback from building our apps, is something we need often. Where I work, we code and run our tests in IntelliJ. As soon as we want to move the change to production, we normally build the app locally with Maven before pushing the code, to see that the tests run as they should, and that everything is working fine.A Multi Module Maven repository with 250 applicationsWe have our 250+ apps in a monorepo. The monorepo is one multi module Maven repository, where everything is on head all the time. When we build our app, we build both the app itself, and all the modules that it depends on.This is why it is important for us to build smart.A typical app builds and runs all tests for itself and its dependencies in 2–3 minutes. This is a long time to wait, so we started looking for a way to get faster feedback.A multi module Maven build with a change in one of the modules.We quite often have a code change in a module the app depends on.It is possible to ask Maven to build only the modules that we want, using the — projects <list of projects to build> argument, and building from the root pom. This is faster than building all required dependencies with — also-make.Using a maven command with — projects requires both mental capacity and finger acrobatics on the command line, so we seldom do this. We rather build with variants of cd in and out of modules and mvn clean install, hoping that we have built everything that needs to be built. Or we build everything to be sure.Building only what needs to be builtA multi module Maven build with a change in one of the modules. We only need to build this module and the modules depending on it.We only want to build what needs to be built, without having to hand code a special Maven command for every change we do. Both Bazel and Gradle knows how to do this.There are several strategies here, and all we have seen, is based on analysing what files have changed, then making scripts or programs calculating what modules the changes reside in, and then create a Maven command that builds these modules.We have created a Maven plugin helping us with just that. It is called turbo-maven-plugin.How does turbo-maven-plugin work?turbo-maven-plugin is based on the same strategy, that is analysing what modules have changes in their source code, and then build only these modules, and the modules depending on them.For every module, the plugin looks for a file containing one row per source code file in the module. A row contains the name of the source code file and a checksum of the contents of the file.If it doesn’t find a file for a module, it creates it, and puts it in the the module’s directory in the local m2 repo. It does this for all modules that is required for building the app, and also the app itself.If we build again, without changing anything, nothing will be built, since all the checksums are the same.If we do a change, the plugin will first get the complete list of modules that needs to be built from the Maven Reactor. This is the the app itself, and all its dependencies. For each module, it compares the checksum for each source code file in the module, with the checksum in the file in the m2 repo. If the checksums are the same, the plugin removes the module from the list.For the modules that have changes, we make sure we also add the modules that are dependant on them. In pseudo code, it looks like this://Find changed modules:modulesToBuild = modulesFromMaven.filter(isModuleChanged())//Find the modules dependent on the changed modules:modulesToBuild.forEach(module -> downStreamProjects.add(module.getDownstreamProjects()))//Return the distinct set of modules to build:return modulesToBuild.addAll(downStreamProjects).removeDuplicates()How do we use the turbo-maven-plugin?The plugin is defined in our root pom, and is disabled by default, so that Maven behaves normally for everyone when using regular Maven commands:<plugin> <groupId>no.sparebank1</groupId> <artifactId>turbo-maven-plugin</artifactId> <version>${turbo-maven-plugin.version}</version> <extensions>true</extensions> <configuration> <enabled>false</enabled> <ignoreChangesInFiles>swagger.json</ignoreChangesInFiles> <alwaysBuildModules>distribution</alwaysBuildModules> </configuration></plugin>We have a tool, that really is just a structured collection of scripts, called bob. When we want to build an app, we run bob mvn build from the app root. This command actually does this:mvn -T4 -f <path-to-the-root-pom> --projects <path-to-the-app-pom> --also-make -Dturbo.enabled=true clean installBut that is something our developers don’t have to think about.With this, we have cut the average app build time in half, from 2–3 minutes to 1–2 minutes. We have also reduced the cognitive load of our developers. They don’t have to think about what modules need to be built anymore. They just run bob mvn build, and Maven and maven-turbo-plugin take care of the rest.If you want to try the plugin, it is on Maven Central, and you find both source code and pom configuration on the turbo-maven-plugin’s home page.Speed up your Multi Module Maven Builds with turbo-maven-plugin was originally published in SpareBank 1 Utvikling on Medium, where people are continuing the conversation by highlighting and responding to this story....

Av Vidar Moe

Fra agile team til agil organisasjon: Slik jobber vi agilt i SpareBank 1 Utvikling

For 10 år siden skjønte vi i SpareBank 1 Utvikling at vi måtte gjøre noe annerledes. Flere års dedikert arbeid hadde resultert i en monolitt av en løsning. Men tiden, teknologien og forventningene fra kundene hadde endret seg. Vi måtte rett og slett begynne å tenke annerledes.Rettere sagt — vi måtte begynne å tenke agilt. Det ble starten på vår agile reise.I 2013 begynte vi å dele opp monolitten. Bit for bit. Ikke bare var kravene fra kundene og teknologien endret, men leveransemodellen vår i SpareBank 1 Utvikling begrenset muligheten til å levere det vi ønsket.Vi endret arkitektur og teknologi, og etablerte tverrfaglige utviklingsteam. Vi begynte også det året å måle T2M og omfanget av endringene vi klarte å skape.Grepene hadde enorm effekt:I dag har vi 25 forskjellige utviklingsteam som blant annet jobber med mobilbanken og nettbanken.Kundetilfredsheten går oppover, og vi opplever økt salg gjennom de digitale kanalene.Innovasjonstakten har aldri vært høyere. Antall dager fra produksjonsstart til ferdig utviklet løsning gått fra over 50 dager til å kunne gjøre løpende produksjonssettinger på bare noen timer eller dager.Høy endringsevne har gitt mulighet for å kunne jobbe datadrevet for å forbedre kundeopplevelser, fjerne hindringer og å øke salget.Større grad av måloppnåelse gir høyere medarbeidertilfredshet.Lignende suksesshistorier og veien dit kan du høre mer av fra andre norske utviklingsmiljøer i NAV, Skatteetaten, FINN, Vipps og flere andre dyktige og forbilledlige organisasjoner. Men, jeg har den senere tiden stilt meg et spørsmål:For til tross for de strålende resultatene på de endringsreisene vi har gjort med agile team, er vi en agil organisasjon?Og har det egentlig noe å si?Jeg deler mine tanker her. Og, jeg har lyst til å høre dine. I kantina, innboksen eller kommentarfeltet.Hvorfor agilt?Før vi diskuterer agil organisasjon, er det nødvendig å spørre seg selv hvorfor et selskap skal jobbe agilt og å være en agil organisasjon.Hvis svaret er at man skal fremstå som en moderne organisasjon og tiltrekke seg nye medarbeidere, er det i og for seg bra og viktig, men det holder ikke som grunn alene.Jeg mener man må ha et mer gjennomgripende og grunnforankret forretningsmessig perspektiv om hvorfor man skal være en agil organisasjon. I SpareBank 1 Utvikling var det som nevnt innledningsvis så enkelt — og så vanskelig­ – at vi ikke fikk produsert alle tjeneste og produktene som ønsket. Vi rakk heller ikke å gjøre endringer raskt nok. Vi slet rett og slett med å skape verdi for selskapet og kunden når vi ønsket det.Med andre ord, vi hadde ikke nok fart i utviklingsarbeidet.I manifestet til agil arbeidsmetode, som du kan lese på agilemanifesto.com, står det tydelig hva man skal gjøre for og med smidig programvareutvikling. I fare for å repetere det som står der, vil jeg gi et innblikk i hvordan vi selv har tolket og adoptert den agile måten å jobbe på hos oss.1. Vi har fartFart og skalerbarhet er et helt sentralt fundament i agil utvikling. Det å ha evnen til å utvikle raskt har enorme fordeler for et selskap. Men, det krever også enorme endringer. Siloer må brytes ned, og nye tverrfaglige team må etableres. Prosesser må revideres og optimaliseres. Og under alt dette må det være en teknologi og arkitektur som bidrar til at teamene kan jobbe parallelt og minst mulig avhengig av hverandre.Alt for å først og fremst oppnå én ting; fart.Mine dyktige medarbeidere i SpareBank 1 Utvikling har publisert flere artikler om hvordan vi har gjort dette. De kan du lese mer om på sparebank1.dev.2. Vi har kunden og forretningsfokus i sentrumFart alene løser ikke kunde- eller forretningsbehov. Det krever tydelige ambisjoner og målsetninger. Målstyring er et sentralt grep og en forutsetning for selvgående, tverrfaglige team som jobber i høy fart.Kort forklart er det en strategisk retning som brytes ned i ambisjoner og deretter ned i ulike mål som kan følges opp av de ulike teamene.I fastsettelsen av ambisjoner og mål må grensene mellom forretningssiden og IT brytes ned. Med det mener jeg at det er eierne av forretningsbehov som eier målene. Disse har igjen flere produkteiere og produktledere til å hjelpe seg.Men disse forretningsbehovene kan også kreve endringer i arkitektur, datafangst, infrastruktur og dataanalyse.Teknologimiljøene må derfor også være tett på eieren av forretningsbehovene. Tilsvarende gjelder de som jobber med at teamene til enhver tid er best rigget for de endringene som må gjøres.Dette høres kanskje enkelt ut, men det å bryte ned en strategisk retning til tydelige mål, uavhengig av silo, er vanskelig. Samtidig er det helt avgjørende for å få ønskede resultater. Over tid vil det skape for mye friksjon hvis forretning og IT jobber for separat.3. Vi har topplederforankringÅ fjerne grensene mellom forretningssiden og IT er kun mulig med en tydelig topplederforankring. Det vil alltid, og særlig i større organisasjoner, være behov for å sette opp styringsstrukturer og tydelige ansvarsområder. I tillegg er det viktig at lederne ser hverandres bidrag for å nå selskapets mål.Det vil i dette oppstå ulike vurderinger om hva som er riktig å gjøre og hva som er balansen mellom forretningsmål og etablerte retningslinjer et selskap har av blant annet regulatoriske grunner.Styrken i en organisasjon handler ofte om hvordan man klarer å navigere effektivt og uten for mange konflikter når det som er riktig å gjøre ikke alltid er helt rett frem. I dette blir topplederforankringen på felles mål, retning og arbeidsform avgjørende for å bidra til å komme frem til gode løsninger og ikke større avstand.Overgangen fra en mer tradisjonell organisasjon til en mer agil organisasjon er stor. Eksempler på kjente smertepunkter er endringer i løsninger og prosesser, etablere tydelig ansvarsdeling og rolleforståelse, fordeling av midler og kapasitet, samt både faktisk og opplevd styring og kontroll.Det er med andre ord mange mulige grunner til at overgangen blir vanskelig. En sterk topplederforankring er sannsynligvis helt nødvendig for å lykkes godt.Avslutningsvis må et positivt menneskesyn der trygghet og tillit gjennomsyrer hverdagen ligge i bunn. Det blir ikke fantastiske resultater av frykt, forsiktighet og å holde seg til sin lille del av løsningen og ikke oppleve en trygghet til å utfordre det eksisterende på en god måte. Man må tro på at man er bedre sammen med andre og at man hele tiden lærer. Den kulturen må ligge til grunn i et selskap.Så, er vi en agil organisasjon, eller er vi «bare» agile team?Kanskje en liten brannfakkel til slutt: Å jobbe agilt og å være en agil organisasjon kan skape fantastiske resultater, men det er ikke alltid verken forutsetningene er på plass eller at det er riktig å jobbe agilt i form av ulike smidige metoder.I SpareBank 1 Utvikling har vi særlig erfart det ovenfor leverandører som jobber tradisjonelt med kravspesifikasjoner og større releaser. Dette gjelder særlig når det er større fagsystem med kompliserte forretningsregler som skal endres. Da kreves det andre typer av prosesser. En agil organisasjon må derfor også kunne tilpasse metodene som benyttes for å kunne håndtere sine omgivelser.Størrelse på organisasjonen har mye å si. Jo mindre organisasjon desto mindre avstand, ofte mindre legacy og færre leverandører skal håndteres. Mange av momentene over blir enklere å håndtere i mindre selskap, men det er viktig å ha en forståelse av om selskapet vokser mye under en periode.Agil utvikling og arbeid med agile organisasjoner krever kontinuerlig forbedring. Det vil være stadig nye problemstillinger som krever en kontinuerlig endringsevne og å kunne være tilpasningsdyktig.Merk at kontinuerlig forbedring kan fort bli for operativ. Vi kan ikke bare jobbe med selve løsningene, vi må også kontinuerlig forbedre prosesser, metoder og ikke minst organisering. Derfor blir punktene om verdiskapning, målstyring og topplederforankring igjen viktige for å sikre at forbedringene går langs de rette aksene.Jeg tror vi i SpareBank 1 Utvikling er nære å kunne si at vi er en agil organisasjon, men vi er ikke i mål.Det dukker hele tiden opp nye temaer som må jobbes med. Fokus i tiden fremover er å få teamorganisasjonen til å bli enda tydeligere knyttet til forretningsområdene og linjeorganisasjonen og tilhørende ansvarsgrenser.Ordtaket «behovet for endring er det eneste som er konstant» oppsummerer det godt.For hva som kommer rundt neste sving må vi se på da.Fra agile team til agil organisasjon: Slik jobber vi agilt i SpareBank 1 Utvikling was originally published in SpareBank 1 Utvikling on Medium, where people are continuing the conversation by highlighting and responding to this story....

Av Espen Kjølberg

Parprogrammering for flyt og fokus

(Dette er en oppfølging artikkelen Hvordan vi fikk høyere fart med hyppige prodsettinger og parprogrammering)Det er noe rart med parprogrammering. Det er en gammel teknikk som er godt kjent og respektert blant utviklere, men som likevel er lite brukt.Hvis jeg spør, opplever jeg at de fleste er positive til parprogrammering. Spørreundersøkelser hos oss i SpareBank 1 Utvikling viser stor interesse og at de fleste vil parprogrammere mer enn de gjør i dag. Kompetansedeling, læring og at det er sosialt scorer høyt på undersøkelsene.Likevel er det få som gjør det, selv hos oss. Vi kan også lese om samme type utfordringer andre steder. Hvorfor? Vi ser er at dette går igjen når man spør hvorfor vi ikke parprogrammerer:To kan heller jobbe i parallell med oppgavene fordi de vet hvordan de skal løse det hver for segVi bruker det bare på vanskelige problemstillingerVanskelig på hjemmekontorVi trives best med å jobbe aleneVi hjelper hverandre heller litt underveis, og tar resten i Pull RequestsVi vet ikke helt hvordan vi kommer igangVi er redd for å blottlegge oss, redde for å dumme oss utVi ser ingen umiddelbar effektFlytsonenFlyt. Vi har alle vært der, men jeg tror at for oss utviklere er det spesielt. Å være i flyt er fantastisk. Etter litt arbeid med en oppgave glemmer du tid og sted, og konsentrasjonen blir ekstra høy. Du får opp en god del av kodebasen i hodet, og vet hele tiden neste steg før du har utført det. Fingrene flyr over tastaturet. Nye ideer popper lettere opp en vanlig. Du har fokus. Du er motivert. Og ikke minst, du får gjort masse.De dagene jeg har vært mye i sonen, er de dagene jeg går ut av kontoret med et smil om munnen. Kone og barn får en bedre mann når jeg kommer hjem, og jeg har mer overskudd. Jeg flyr gjennom skogen på løpeturene mine. Jeg sover godt.Så da er spørsmålet: Burde ikke vi utviklere etterstrebe denne tilstanden mest mulig av tiden?Har du to minutter?Slack er fantastisk, det mener jeg. Vi har nesten sluttet med e-post, vi har alle ansatte tilgjengelige på et blunk og vi jobber asynkront over en lav sko. Mye blir løst raskt uten at vi trenger å sette opp egne møter for det.Men det har en pris.For hva skjer når du sitter midt inni denne gode flyten, og det plutselig dukker opp popup fra Slack med teksten “Har du to minutter?”I det du går inn på Slack, så ser du også andre kanaler som lyser som et juletre. Du blir interessert, leser noen tråder og forsvinner enda lenger bort fra det du egentlig holder på med.Utviklere er ikke datamaskiner.Forskning viser at det tar ca 15 minutter fra man blir avbrutt til man kommer tilbake der man var i konsentrasjonen.Når du går tilbake for å jobbe videre, vil du også automatisk tenke på det du ble avbrutt av, og flyten blir enda verre å komme tilbake til.Resultatet? Du får gjort mindre av det du hadde planlagt, og er mest sannsynlig mindre fornøyd etter arbeidsdagen.Parprogrammering som verktøy for flytDet er så kraftig og så enkelt. Når to sitter sammen og jobber på en oppgave så blir det fullstendig unaturlig at den andre skulle sjekke e-post, Slack, nettaviser, mobilen og andre ting.En sesjon med parprogrammering kan betraktes som et tradisjonelt møte. Sesjonen legges inn inn i kalenderen for å vise til andre at her er du og den du jobber sammen med er opptatt. Og slik får dere fullt fokus.Test gjerne med to tastatur mot samme maskin når man parprogrammererMen hva med alle meldingene på Slack? Og alt annet som krever tiden din?Vi tar avtalte pauser ca. annenhver time der vi svarer opp andre meldinger, og vi parprogrammerer heller ikke 7.5 timer om dagen, fem dager i uka. Vi setter av tid til slakk, fordi vi vet det dukker opp uforutsette hendelser hver eneste uke. Og vi liker å hjelpe andre.Hvordan kommer du igangStart med å planlegge dagen med den du skal jobbe sammen med.Slik kan en dag se ut. Jeg har en avtale hos legen og en workshop, Ola har et personalledermøte. Men merk at selve oppgaven har lite fri, den får full fokus og fart hele dagen. Og man får jobbet litt alene også, selv de mest ivrige parprogrammererne liker det iblant.Selv om man har litt forskjellig agenda, får oppgaven fokus hele dagenFerie og oppgaver på ventVi har opplevd at når folk jobber alene, drar på ferie eller blir syke, så blir oppgaven satt på vent til de er tilbake. Med parprogrammering kan den andre parten fortsette arbeidet, og lett rulle på andre utviklere.Og hva blir effekten av dette?Oppgaven blir raskere ferdig målt i kalendertidTrikkefaktor blir betydelig redusert og vi får høy grad av kunnskapsdeling. Flere kan kodebasen, mindre superhelter som eier hver sin applikasjon, mindre av “den der har Ola jobbet mest med”WIP (work in progress) reduseres, vi gjør ferdig oppgaven før vi starter noe nyttDobbel flytsoneTilbake til flytsonen. Vi er nå to utviklere som konsentrerer oss 100% om en oppgave og går inn i flyt. Hvilke konsekvenser får dette? Utviklerne har ofte litt ulik kompetanse, erfaring og måter å se oppgaven på. Man utfyller hverandre og slik oppnår man høyere fart, mindre avbrudd og bedre kvalitet. Og pull requests? De blir ofte overflødige, vi er ferdig diskutert lenge før koden kommer dit. Og vi prodsetter hele tiden.To utviklere med litt forskjellig erfaring kan ofte komme frem til solide løsninger i et større tempoMye av bittelitt istedenfor bittelitt av myeHar du noen gang pratet med en som har møtt veggen?Du vil ofte høre at “det ikke var en ting, det var summen av alt”. Jeg opplever at de mest stressa og slitne folka på jobben, er de som driver med for mye samtidig. De som ikke klarer å si nei. Dette resulterer ofte i tidspress, lite fokus og til slutt går det utover kvaliteten på det som blir gjort. WIP (work in progress) blir for høy.Planlegger man at oppgavene skal gjøres med samarbeid og parprogrammering, setter man automatisk ned WIP. Slik planlegger man altså inn fokus, får bedre flyt og vår erfaring er at vi får gjort mer med skikkelig kvalitet. Dette øker motivasjonen, og motiverte utviklere kan få til hva som helst.Jeg skrev at de dagene jeg gikk mest fornøyd ut fra kontoret, var når jeg har vært i flyt. Men så hørte jeg kollega Stian Conradsen si at de dagene han gikk hjem og var mest fornøyd, var de dagene han hadde parprogrammert. Hvorfor? “Det er de dagene jeg får gjort mye”, svarte Stian.Mest sannsynlig kan du sjekke av dette etter en dag med parprogrammering. Du har:Opplevd høy kompetansedelingHatt gode tekniske diskusjonerFått fokus og jobbet med bare en sak om gangenVært sosial med en eller flere kollegaerFått gjort mye, og gjort det skikkeligSå hvorfor parprogrammerer ikke alle hele tiden da?Jeg tror det er sammensatt, men den største faktoren virker å være at det er vanskelig å komme igang.Og jeg kan merke det selv noen ganger. Det er mye enklere å bare komme til plassen sin, sette seg ned og begynne å kode på sin oppgave i sitt eget tempo. Ingen som forstyrrer, du kan dypdykke, svare på Slack, prate med kollegaer og jobbe med det du mener er viktigst og i ditt tempo. Og dette mener jeg vi skal fortsette med også, men ikke hele tiden 5 dager i uka.Parprogrammering krever at du retter deg opp i stolen, konsentrer deg og setter deg skikkelig inn i oppgaven. Det er en intens måte å jobbe på, så ta pauser.Hvor mye skal vi parprogrammere?Ikke legg lista for høyt. Hvis teamet som en start setter av tid til parprogrammering et par dager i uka, vil det fort ha stor effekt. Et nyttig tips er at det er lurt å rotere på hvem som jobber sammen. Dette vil ikke bare gi hver enkelt en bedre hverdag og øke kvaliteten på det som blir levert, men det vil ha en positiv utvikling av kulturen i teamet.Har du lest om hva som er best for teambuilding? Det er ikke at de ansatte drar på rafting, paintball eller gokart. Det er at vi prøver å løse en vanskelig oppgave sammen, gjerne over tid. Da får vi tilbakemelding, det er lett å spørre om hjelp og frykten for å gjøre feil blir borte — teamet får psykologisk trygghet.Hva er det som stopper deg fra å komme i gang?ReferanserOn Pair Programming fra Martin Fowler’s blog, av Birgitta Böckeler, Nina SiesseggerHvordan vi fikk høyere fart med hyppige prodsettinger og parprogrammering av Asgaut MjølneFlow (psychology) fra WikipediaTegneseriebilde med parprogrammering, fra monkeyuser.comTegneseriebilde av fokus, fra monkeyuser.comDisse formene for teambygging har ingen effekt, fra forskning.no og NTNUSlik får du hybride team til å fungere fra e24.no av Nils Brede MoeWhat happens to psychological safetywhen going remote? av Anastasiia Tkalich, Darja Smite, Nina Haugland Andersen, Nils Brede Moe. SINTEF, NTNU, Blekinge Institute of TechnologyParprogrammering for flyt og fokus was originally published in SpareBank 1 Utvikling on Medium, where people are continuing the conversation by highlighting and responding to this story....

Av Asgaut Mjølne

Hvordan vi fikk høyere fart med hyppige prodsettinger og parprogrammering

I november 2021 hadde vi besøk av Terje Heen og Julian Ravn Thrap-Meyer fra NAV. De fortalte hvordan de prodsatte mange ganger om dagen. De brukte ikke annet testmiljø enn produksjon, de parprogrammerte alt, hadde sluttet med Pull Requests samtidig som de opplevde økt kvalitet. Wow.Jeg jobber som utvikler i “Område Hverdagsøkonomi” hos SpareBank 1 Utvikling. Vi har stort fokus på modernisering av plattformen, og de siste årene har vi kunnet prodsette oftere og oftere, gjerne flere ganger i uka. Pull Requests er en sentral del av utviklingsprosessen. Akkurat som hos mange andre selskap.Vi ble inspirert av NAV og ønsket å teste ut mer parprogrammering og hyppigere prodsettinger. Og vi hadde én oppgave foran oss som var perfekt for å akkurat dette.Kjenner du deg igjen?La oss ta et steg tilbake. Dette er ofte den klassiske måten man jobber med utvikling av et API:Du jobber alene på en oppgave i branch som bare vokserMye manuell testing av HTTP-kall i ulike testmiljøerÉn egen testansvarlig. Du får en rapport på hva som er galt og fikser feilene.Underveis ber du teamet om å ikke endre så mye på samme kodebase før man selv har merget til master, det blir så vanskelig å merge. Man blir mer og mer stressa for å bli “ferdig”.Du sparer automatisk testing til slutt, og skriver bare tester på en brøkdel-som du også påstår er “den viktige delen”.Pull Requesten inneholder mye diskusjoner og meninger, gjerne på smådetaljer som syntaks. Men lite om helheten, og den kan bare du.Du er nervøs ved prodsetting. Endringen er med i en release. Denne er full av andre endringer også. Feilsøking blir vanskeligere.Det feiler på flere ting ved prodsetting, du har ikke kontroll på hva og det er krise i teamet. Du har høyest puls, det er jo “din” kode.I fremtiden kommer alle til deg hver gang det skjer noe i denne delen av koden.Så er oppgaven din ferdig, koden er i prod og det fungerer. Du og teamet ditt blir hyllet fra nært og fjernt. Men i notepad har du en lang liste over ting som må forbedres.Men nå vil produkteieren videre. “Det funker jo, kundene er fornøyd”, sier han. Er ikke det det viktigste? Du får høre at “forvaltning vil vi alltid ha, og det må prioriteres mot andre viktige ting”. Vi kan gjøre det senere.Du taper diskusjonen. Resultatet er splitter ny teknisk gjeld. Hvordan kunne dette vært unngått?Hva må til for å kunne drive med hyppige prodsettinger?For å jobbe med hyppige prodsettinger, kan du ikke bare ha effektiv teknologi og prosesser i teamene. Du må også ha en leder som skjønner hva som skal til. En som har forstått at utviklere ikke er datamaskiner. Og at koden ikke er ferdig selv om funksjonaliteten tilsynelatende er det.For å utvikle med høy fart og hyppige prodsettinger nytter det ikke bare å være dyktig ninja-utvikler.En sentral del er at du ikke er redd for å endre og prodsette. Og skal man endre uten å være redd, bør man ha visse mekanismer på plass:Kunne utvikle slik at du kan prodsette små endringer om gangen.Mulighet for parprogrammering.Holde god testdekning.Raske bygg på byggserver, gode tilbakemeldinger på feil.Enkelt å prodsette og rulle tilbake.Bruk av feature toggling og gjerne soft release (canary deploys).God logging, monitorering og alarmerDet finnes mer avanserte deploy-strategier, og flere selskap i Norge har kommet mye lenger enn oss. Men vi kan vi sjekke av mesteparten her, og det holdt for å teste ut hyppige prodsettinger.Utprøving av hyppige prodsettinger med parprogrammering i oppgaven “Endre kategori”Transaksjoner i SpareBank 1 får i dag satt kategorier på transaksjoner basert på data fra vår maskinlæring. F.eks. at en transaksjon fra Spotify får kategorien “strømmetjeneste” under “ferie og fritid”. Dette bruker vi til å gi deg en fin inndeling av hva du bruker penger på.I enkelte tilfeller klarer ikke maskinlæringsmodellen å finne kategori, eller så den feil. Vi ønsket at kunden selv skulle kunne endre kategori. Slik ville også maskinlæringsmodellen bli trent og funksjonaliteten bli bedre for kunder alle i fremtiden.Dette skulle vi utvikle. Her har maksinlærignsmodellen ikke fanget opp at Adam og Eva er frisør, og kunden skal kunne endre selvOppgaven inneholdt masse utvikler-snacks:Mikrotjeneste for behandling av kategorier sammen med transaksjonerPersistering og cachingKall på kryss og tvers av interne tjenester, bruk av maskinlæringAlgoritmerFrontend-utvikling og designKodespråk: Kotlin og ReactHvordan la til rette for hyppige prodsettinger og parprogrammeringGeir Olav og Bård Kristian parprogrammerer på et privat, dyrt nerdetastaturParprogrammering, gjerne med innblanding fra andre. Fysisk eller over Teams/Slack.Delte opp funksjonaliteten i mindre deler. Og delte den så opp enda mer. Hver enkelt del ble prodsatt fortløpende, også deler som ikke var i bruk enda.Endringer styres via “Feature toggles” på f.eks. fødselsnummer. Vi prodsatte fortløpende, men bare for oss selv på teamet. Ble utvidet til flere brukere ved behov.Utviklet REST-endepunkter tidlig, men stubbet APIer, database o.l. som også ble brukt i produksjon. Slik kunne vi teste helt spesifikke deler av koden, i produksjon, uten at vi gik ut med for mye samtidig.Litt kode om gangen, men alltid med kjærlighet og automatiske tester.Ingen egne testere, vi testutvikler og tester selv konitnuerligVi startet midt inni kodebasenDet klassiske ville vært å starte med databasen. Lage det persistente laget, serviceklasser og endepunkter. Og så implementert endringer i andre APIer vi er avhengige av, og til slutt sydd det hele sammen og testet alt på en gang.Men vi valgte å snu på dette.Vi startet med å utvikle koden som modifiserer transaksjonskategorien, en liten del langt inni kodebasen. Vi erstattet baksystemer med stubs, til og med selve APIet som skulle lagre kategori-endringen. Og så prodsatte vi det, men bare for min bruker.if( socialSecurityNumber.equals(“Asgauts fødselsnummer”)) { // Kall til den nye koden} else { // Kall til gammel kode}På denne måten fikk vi testet noe av kjernen av forretningslogikken umiddelbart og lærte fortløpende hva vi videre måtte implementere i andre tjenester.Samtidig fikk vi endret kategori på en transaksjon i produksjon og fikk en visuell opplevelse. Og feedback-loopen på endringer var lynrask.Vår første del av koden så noe sånn ut. Vi laget en ny klassse som modifiserte på transaksjonkategorier feature togglet og stubbet baksystemerFørste endring i produksjon hvor vi bare endret kategori på én transaksjon, men kun for min bruker, med stubbede data fra baksystemDet smalt i produksjon med en gangSelv med denne bittelille endringen smalt det i produksjon. Vi fikk meldinger om rar oppførsel på eksisterende sortering av transaksjoner. Altså på en del av koden vi rørte, men vi ikke trodde skulle feile. Dette var enkelt å oppdage, fikse og prodsette — fordi endringen vår hadde vært såpass liten og avgrenset.Dette ble også betydelig enklere når vi hadde parprogrammert og begge hadde full kjennskap til endringen.Ved å teste i produksjon fikk vi altså ikke bare testet vår endring isolert. Vi fikk også testet hvordan koden vår oppførte seg sammen med resten av produksjonsmiljøet.Vi parprogrammerte på alle endringerVi jobbet på oppgaven i ca. en måned og endte totalt opp med over 50 prodsettinger før det var live for alle kundene våre.Utvalg av commits som ble merget og prodsatt, alt parprogrammertMens vi jobbet ble vi stadig bedre på at hver fiks, små refaktoreringer, integrasjoner mot andre system, oppdatering av tester osv. ble til egne commits som vi merget og vi prodsatte, sammen. Her nærmer vi oss “ekte” Continious Integration slik det orginalt ble beskrevet av Kent Beck.Legg merke til deploy8 i gult. Det ble mer naturlig å rydde teknisk gjeld underveis da vi ikke var midt inne i en kjempestor branchLokalt og så rett i prod?Vi opplever nå en endring i måten vi jobber på. Og metoden har oppstått uten av vi aktivt har forsøkt å endre oss:Vi har så lite kode som går ut om gangen, med så gode tester, at behovet for å teste i test-miljøer reduseres. Og ikke nok med det, vi starter faktisk nesten aldri opp appen lokalt, ettersom vi får så bra svar gjennom gode automatiske tester.Vanlig prosess har blitt: Tester kjører lokalt →merger til master → bygg og test OK på CI Server →ruller ut i prodVi koder med hvilepuls. Vi stoler på tester, stoler på den gode gjennomgangen vi får med parprogrammering, stoler på alarmer. Så lenge byggserver sier OK så går det bare rett ut i produksjon, samtidig som vi opplever mindre og mindre feil.Vi opplever veldig lite av “jeg har bare igjen å skrive tester”. Det er allerede gjort som en del av utviklingen fortløpende og holder nede teknisk gjeld.Dette øker farten betraktelig og vi har kontroll.Nå forstår vi hvorfor NAV kunne ta bort Pull RequestsDa vi parprogrammerte, ble all koden diskutert og reviewet fortløpende til minste detalj. Det Pull Requesten derimot ble brukt til, var infodeling til de andre og et verktøy for diff på koden for oss selv.Tiden Pull Requesten lå før den ble merget ble betraktelig redusert. Det ble mer en teknisk formalitet for compliance vi måtte gjennom for å få koden til master. Vi markerte Pull Requester som vist under, merget umiddelbart når bygg ble grønt, og så kunne resten av teamet se på diff om m vil.Opplysning til teamet at vi har samarbeidet, og at vi derfor godkjente Pull Request og merget uten å vente på andreSkulle hele teamet godkjent alle Pull Requests hadde, farten gått betraktelig ned. Vi hadde også måte avbryte det andre teammedlemmer jobbet med.Slik beholder vi fart og flyt i teamet. Kunnskapsdelingen skjer hovedsakelig gjennom parprogrammering og rotering på hvem som jobber sammen.LangtidseffektenVi hører ofte at man må kode på hver sin oppgave for å bli fort ferdig. I SpareBank 1 Utvikling jobber mange team med Radical Focus metodikken. Da jobber teamet i ukessykluser hvor man mandag “commiter seg” til å bli ferdig med noe til fredag.Men det store produktet Sparebank 1 Digitalbank blir aldri ferdig. Vi er ca. 160 utviklere som endrer på kodebasen hver dag. Vi bør tenke langsiktig og på helheten.1% forbedring hver dag gjør deg 37 ganger bedre på et årJames Clear forklarer i boken “Atomic Habits” at en forbedring på 1% om dagen, vil gjøre at du får en forbedring på hele 37 ganger over et helt år.Med hyppige prodsettinger og parprogrammering får man forbedringseffekten til Clear inn i software utvikling:Små endringer gjør at man enklere kan endre retning og jobbe mer innovativt.Kompetanseheving. Diskusjonene gjennom parprogrammering er som et uendelig kurs i programmering.Ingen “min og din kode. Kunnskapen om kodebasen økes på tvers hele tidenTeknisk gjeld tas fortløpende.Teamsamarbeidet og pyskologisk trygget blir litt forbedret hver dag.Kunden får kontinuerlige forbedringer på produktet.Alt dette er fint, men hvordan kommer du i gang i ditt team?Det ikke-tekniske er ofte det viktigste. Her er noen enkle grunnprinsipper:Bryt ned oppgavene så godt du kan. Og så bryt dem ned enda mer. Og få dem ut i produksjon så fort som mulig.Planlegg ukentlig med lav WIP (work in progress). Ha gjerne færre oppgaver enn antall utviklere, det vil gjøre det naturlig å jobbe sammenI starten kan det være uvant å skulle gå sammen i par for å løse oppgaver. En måte å komme i gang på er å avtale par i starten av uken inntil man får parprogrammeringen litt inn i fingrene.Stop starting, start finishing. Teamet, ikke enkeltpersoner, skal bli ferdige med oppgaver. Hjelp andre med å bli ferdige fremfor å starte på noe nytt selv.Stop starting, start finishing, hold WIP nede. Simen spør hvem som trenger hjelp i stedet for å starte noe nytt selvGjør en retro etter noen uker på hvordan det har gått. Finn det som passer ditt team.Lykke til!Les videre om hvordan vi fikk fart, flyt og fokus med parprogrammering.ReferanserJames Clear (2018) Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones. Random House Business BooksContinuous Improvement: How It Works and How to Master It av James ClearHver commit er en ny deploy til prod, del 1 av Terje HeenIkke nok et jævla statusmøte! av Marthe Slaatsveen og Thomas Allan NygaardContinuous Integration av Martin FowlerTestDouble av Martin FowlerHvordan vi fikk høyere fart med hyppige prodsettinger og parprogrammering was originally published in SpareBank 1 Utvikling on Medium, where people are continuing the conversation by highlighting and responding to this story....

Av Asgaut Mjølne

Synlighet og kunnskapsdeling styrker personvernarbeidet

Det er ikke enkelt å lykkes med å etterleve personvernkravene som stilles til norske virksomheter i dag. Det finnes ingen tydelig oppskrift vi kan følge. I personvernteamet i SpareBank 1 Utvikling erfarer vi at det lønner seg å være synlig, tilgjengelig og engasjerte overfor våre kollegaer. Opplæring bidrar til at vi er flere som kan imøtekomme personvernregelverkets krav. Fremover skal vi i tillegg jobbe for at det blir lettere å gjøre rett.Personvernregelverket er kommet for å bliDen 25. mai er det fire år siden personvernforordningen (GDPR) ble tatt inn i norsk lov. Det fantes regler for behandling av personopplysninger lenge før 2018, men de siste årene har det blitt satt et særlig søkelys på etterlevelse av personvernregelverket. Det samme kan vi si at gjelder internt i vår virksomhet, SpareBank 1 Utvikling. Vi er et produkt- og tjenesteutviklingsselskap som leverer tjenester til bankene og produktselskapene i SpareBank 1-alliansen. Med dette følger behandling av et stort volum av personopplysninger.I likhet med mange virksomheter har vi gjennomført flere prosjekter og tiltak for å øke kompetansen og etterlevelsen av personvernregelverket. Modenhet kommer med tiden, og vi opplever at kompetansen er styrket siden vi gjennomførte vårt første GDPR-prosjekt i 2018. Dette gjenspeiles i alle ledd, fra styret i selskapet til utvikleren i et av våre mange utviklingsteam. Modenheten vises også i antall personer som jobber med personvern hos oss. Siden 2018 har oppgaveporteføljen til personvernombudet vårt økt betraktelig, og i dag er det fire personer i selskapets personvernteam som i fellesskap håndterer personvernombudets oppgaver. I tillegg har vi personvernadvokater og mange produkteiere, systemforvaltere og andre som jobber med personvern i førstelinja. Vi jobber sammen for å sikre etterlevelse av et stadig mer krevende regelverk.Vår suksessfaktorFor å sikre at vi jobber sammen om personvern, etterstreber vi i personvernteamet å være synlige og tilgjengelige for våre kollegaer. Dette medfører at vi blir koblet på utviklingsprosesser eller anskaffelser i selskapet, slik at vi kan samarbeide om å finne løsningene som etterlever personvernregelverket på best mulig måte. I personvernteamet bruker vi ikke pekefingeren, men forsøker å være en løsningsorientert lagspiller. I tillegg forsøker vi å engasjere våre kollegaer gjennom ulike opplæringstiltak. Dette er vår suksessfaktor, og det skal vi fortsette med.Målet fremover er at våre kollegaer skal oppleve at det er lett å gjøre rett. For oss betyr dette slagordet flere ting. Personvernteamet skal fortsette med å jobbe tett med de ulike fagmiljøene i selskapet. Vi skal ha bedre systemer og prosesser som understøtter de kravene selskapet er satt til å etterleve. Disse systemene og prosessene skal være forståelige, tilgjengelige og oppdaterte. Dette vil forhåpentligvis medføre at vårt personvernteam kobles på tidlig i enhver prosess som gjelder behandling av personopplysninger. Dette vil redusere faren for feil, øke kvaliteten på arbeidet vårt og effektivisere arbeidet med personvern. Dersom det er lett å gjøre rett håper vi det vil være enda enklere å jobbe bedre sammen.Opplæring er viktigOpplæring er en nødvendighet for å lykkes med å etterleve kravene i personvernregelverket. Derfor har vi flere ulike aktiviteter, digitalt som fysisk, for å heve personvernkompetansen i selskapet. I personvernteamet jobber vi for at etterlevelse skal være en ryggmargsrefleks for våre kollegaer.Vi opplever særlig å ha suksess med et opplæringstiltak som vi kaller Personverntimen. Dette er et månedlig webinar som alle i selskapet kan lytte inn på. Her tar vi opp ulike personvernrelaterte tema som våre kollegaer bør kjenne til, og vi inviterer ofte andre kollegaer til å holde innlegg. Det gir en ekstra verdi dersom andre enn personvernjurister snakker om personvern, med egne ord og fra eget perspektiv.De siste årene har vi også markert den internasjonale personverndagen den 28. januar. I år gjennomførte vi et webinar for hele SpareBank 1-alliansen, der Datatilsynet, Kripos og vår administrerende direktør snakket for hele 900 av våre kollegaer. På GDPR sin bursdag den 25. mai skal vi også sette personvern på dagsorden, ved å gjennomføre en personverntime hvor vi løfter frem alt personvernarbeid som er gjort og ambisjoner fremover. Vi erfarer at det lønner seg å bruke både de store og de små anledningene til å rette oppmerksomheten mot personvern.Synlighet og kunnskapsdeling styrker personvernarbeidet was originally published in SpareBank 1 Utvikling on Medium, where people are continuing the conversation by highlighting and responding to this story....

Av Karen Grinvoll

Hvordan kan vi lede og kode samtidig — del 2

Hvordan kan vi lede og kode samtidig — del 2For å finne leder til Utvikleravdelingen vår i 2018, bestemte vi oss for å PoC-e ledelse. Dette endte blant annet opp med en lederstilling på åremål. Du kan lese mer om bakgrunnen for dette i den første delen av artikkelen.Der forteller vi også om communityledelse og de tre gjengene Faggjengen, Sosialgjengen og Personalledergjengen. Vi så at for å kunne lede og jobbe operativt samtidig, trengte vi å delegere flere av de tradisjonelle lederoppgavene.Distribuert rekrutteringÅ rekruttere er en av de viktigste tingene vi gjør. For å kunne lykkes med rekruttering samtidig som vi både leder og koder har distribuert rekruttering vært viktig, siden det ågjennomføre en ansettelse er mye jobb. Hos oss er det teamlederne som har behov for utviklere som driver rekrutteringsprosessene. Den kanskje mest avgjørende delen av rekrutteringsprosessen er intervjuene. For at de skal være så gode som mulig, har vi jobbet mye med innholdet i både første- og andregangsintervjuet, med QA fra HR og andre som synes slikt er spennende. Det er alltid minst en utvikler med i førstegangsintervjuene, og gjerne to i andregangsintervjuene, slik at flest mulig får dannet seg et bilde av kandidaten.Uten distribuert rekruttering kan vi med sikkerhet si at vi aldri hadde kunnet hatt ledelsen av utvikleravdelingen på deltid.Ledelse på åremålÅ gjøre ledelse på åremål ligner mye på å løpe stafett.Den kanskje viktigste endringen vi gjorde, var å gjøre lederstillingen for Utvikleravdelingen om til en åremålsstilling. Å gjøre ledelse på åremål, ligner mye på å løpe stafett. Du gjør ditt aller beste på din etappe, og på slutten fokuserer du maksimalt på å gjøre en så god veksling som mulig.I tillegg til at avtroppende leder kan gå tilbake til å fokusere på utvikling på heltid igjen, så er det flere styrker med åremålsmodellen. Blant annet sørger det for dynamikk og nytenking rundt ledelsen, og ikke minst nytenking også rundt selve lederrollen. Så selv om vi hadde et par overleveringsmøter, så er mye av poenget at den nye lederen setter sitt eget preg på de faste sermoniene våre.Åremål er som leasingPodcasten Mannspanelet har en episode hvor de debatterer en ide om at ekteskap burde være på leasing. I ekteskapet tenker vi gjerne at denne utfordringen har vi lang tid på å løse. Et helt liv. Men om vi vet at ekteskapet skal opp til vurdering innimellom, så er det større sannsynlighet for at vi fikser riper og skader mer fortløpende.Dette gjelder kanskje for lederskap også? Når vi har en dato å forholde oss til, så er det ikke like lett å utsette oppgaver. Det kan også hjelpe til med at vi er mer til stede og aktiv i perioden vi har fått.Det eneste negative vi har opplevd med åremålsmodellen, er at det kan være vanskelig for personer utenfor avdelingen å vite hvem de skal prate med. Ett år går fort.Hva har vi lært?En av de fine tingene med at flere av oss nå har fått prøvd oss som ledere, er at vi har har lært mye.Vi lærte at en bør delegere så mye jobb som mulig. Når flere er med og løser opggaver, øker sannsynligheten for gode løsninger, engasjement, og eierskap til disse. Å delegere heller enn å gjøre det selv, kan være uvant i starten. Som utviklere er vi både vant til, og ikke minst liker, å løse utfordringer, så det er lett å bare starte på dem uten å tenke over at det nok er bedre å få hjelp fra flere.Når det er mye å gjøre, må vi prioritere. Da må vi også si nei til mer. Det kan være vanskelig, men en blir vant til det også. Et konkret tips her, er å forklare hvorfor du må si nei. Da blir avvisningen litt lettere å godta.I en verden som endrer seg raskere og raskere, og i en organisasjon som er doblet i størrelse på få år, er det bra med noe som er stabilt. Strukturer og faste rutiner skaper trygghet og stabilitet. Det gjelder for barna, og det gjelder også for oss voksne. For oss er det blant annet slikt som avdelingsmøtet vårt hver torsdag, fast after work og stabil personalledelse. Og selv om vi bytter personen som har på seg lederhatten vår hvert år, så er hovedoppgaven som leder for Utvikleravdelingen også fast.Hovedoppgave til lederen for Utvikleravdelingen er å fortsette og bygge utviklerkulturen vår. For å skape en god kultur, må vi hele tiden jobbe med å skape arenaer og muligheter som øker den psykologiske tryggheten blant utviklerne.Vi skaper psykologisk trygghet når vi gjør ting sammen.Den beste måten å skape psykologisk trygghet i en gruppe på, er å la gruppen gjøre ting sammen, dele opplevelser sammen. Så får vi krysse fingrene for at vi får muligheten til å fortsette med det, nå som pandemien ser ut til å roe seg og det går mot vår.Vil du vite enda mer om dette, så kan du se foredraget vi holdt på JavaZone, eller ta kontakt med oss direkte.Hvordan kan vi lede og kode samtidig — del 2 was originally published in SpareBank 1 Utvikling on Medium, where people are continuing the conversation by highlighting and responding to this story....

Av Vidar Moe

Hvordan kan vi lede og kode samtidig — del 1

Hvordan kan vi lede og kode samtidig — del 1Da jeg ble spurt om å lede den nye Utvikleravdelingen i 2018, sa jeg nei.Jeg hadde lyst til å prøve meg som leder for avdelingen. Men jeg var redd for å komme i en situasjon hvor jeg ikke kunne kode profesjonelt igjen på flere år. En god kollega, Stian Conradsen, ble også spurt. Han sa også nei. Han følte det samme.Dermed lyste vi ut stillingen. Intervjuprosessen med de mange gode søkerne gav oss mer innsikt i hva lederrollen for utviklerne burde være. Vi forstod at Utvikleravdelingen var mer å se på som et utviklercommunity heller enn en klassisk avdeling, i og med at vi generelt ikke jobber sammen, men er spredd ut i mange team.Dette gjorde at vi skjønte at vi trengte en communityleder heller enn en klassisk avdelingsleder. Det ble en runde til internt.Det går heldigvis an å lede og jobbe operativt samtidig.Hvordan kan vi PoC-e ledelse?Vi er vant til å prøve ut nye ideer og muligheter i vår bransje. Vi gjør gjerne en spike eller en PoC (Proof of Concept). Vi tenkte at det kanskje går an å gjøre det samme med ledelse? Vi tok en prat med ledelsen i SpareBank 1 Utvikling, og ble enige om at vi kunne gjøre stillingen som leder for Utvikleradelingen om til en åremålsstilling. Dermed var det maksimalt et år til vi kunne ha koding som hovedaktivitet igjen. Det endret alt. Stian og jeg ble enige om at jeg kunne starte, og så skulle Stian ta over etter et års tid. Vi hadde landet ikke bare en, men to ledere for Utvikleravdelingen.Et engasjert utviklercommunityUtviklercommunityet vårt var sterkt, og fungerte godt allerede før avdelingen ble opprettet. Vi hadde faggrupper, brown bag lunsjer, bokklubb og jobbet strukturert med JavaZone og andre viktige konferanser. I tillegg hadde vi også distribuert personalledelse. Det betyr at hos oss er det utviklere som er personalledere for opptil fem andre utviklere.Selv om vi hadde alt dette på plass, så vi at vi trengte å delegere enda mer av arbeidet en tradisjonell leder gjør for både å kunne lede avdelingen og jobbe med kodeoppgaver i et team.Vi opprettet Faggjengen, Sosialgjengen og Personalledergjengen for å få til dette.FaggjengenFaggjengen har det overordnede ansvaret for den faglige utviklingen i avdelingen. Den lager blant annet heldags fagdager, fikser faglig opplegg når vi er på tur, og har også et ansvar ifm prioritering av felles forbedringsopgaver.Faggjengen ordner frokost med godt påfyll av både mat og fag.SosialgjengenEn kan ha det gøy sammen med mer enn faget vårt. For å fikse det har vi Sosialgjengen. Også det er en sammensatt gruppe av utviklere som får energi av å gjøre noe for andre på det sosiale planet. Fra uke til uke har vi gjort det veldig enkelt. Da er det after work. Når vi skal på tur, er det også Sosialgjengen som ordner det.PersonalledergjengenVi må fortelle mer om måten vi gjør personalledelse på. En vanlig modell er at en avdelingsleder har ansvar for mange, gjerne alle ansatte i sin avdeling. Da kan det bli krevende å være tett på de en har ansvar for.Vi ønsket å prøve en annen modell, hvor utviklere har personalansvaret for et lite antall utviklere. Å hjelpe den enkelte med faglig utvikling er en vesentlig del av personallederansvaret. Vi tenker at dette er lettere å få til når det er utviklere som hjelper andre utviklere med dette. Og når antallet utviklere en har ansvaret for er lite, blir det enklere å komme tett på. Vi ønsker heller mange hyppigere samtaler enn store og få. Smidig HR kaller vi det.Flere av våre utviklere har erfaring med personalledelse fra tidligere. I tillegg kjører vi kurs for de som kommer med som nye personalledere, slik at de får ballasten de trenger. Vi har også fast møte i personalledergjengen, hvor vi kan prate om utfordringer og praktiske ting som dukker opp.Men det er merSelv om vi har distribuert mye ansvar i Faggjengen, Sosialgjengen og Personalledergjengen, så er ikke det nok til at Avdelingslederen for Utvikleravdelingen i praksis skal få tid til også å drive med utvikling. I del to av artikkelen forteller vi mer om hvordan vi har distribuert blant annet rekruttering. Vi deler også mer om hva vi har lært etter tre års erfaring med ledelse på åremål.Vi pratet også om dette på JavaZone i desember 2021.Hvordan kan vi lede og kode samtidig — del 1 was originally published in SpareBank 1 Utvikling on Medium, where people are continuing the conversation by highlighting and responding to this story....

Av Vidar Moe

SpareBank 1 Utvikling på JavaZone

Endelig ble det JavaZone 2021. Det ble avholdt i Oslo Spektrum 8–9. desember, med sju parallelle tracks begge dagene, og med et begrenset antall publikum inne onsdag 8. desember. Nye koronaregler trådte i kraft natt til 9. desember, og siste dag var det bare speakere som hadde mulighet til å møte i Spektrum.Vi vil benytte anledningen til å si en stor tusen takk til JavaZone arrangementskomiteen som har hatt to veldig krevende år. På tross av situasjonen vi har vært i, har de klart å arrangere en mindre og heldigital JavaZone i 2020, og en full JavaZone, dog uten ordinært publikum, nå i 2021.SpareBank 1 Utvikling var involvert i fem foredrag i år, og alle ble streamet live fra Spektrum. I tiden som kommer vil vi skrive artikler basert på flere av foredragene her på bloggen. Vi vil også legge ut lenker til foredragene når de blir tilgjengelige online.Her er foredragene:Mer enn gode talks og kald pils — derfor burde Du snakke på JavaZone!Jonas Nordstrand holdt denne lyntalen om hvorfor du bør snakke på JavaZone, og ikke minst hva som gjør at mange vegrer seg for akkurat dette.Jonas forteller om hvorfor akkurat du burde snakke på JavaZone.Norske byggeklosser — Hands-on bruk av norsk BERTJan Erik Modal kjørte dette maskinlæringsforedraget om praktisk bruk av nye norske språkmodeller.Fun and controversial programming tricks they don’t teach you at schoolGunnar Kriik pratet om utradisjonelle måter å løse programmeringsutfordringer på.Hvordan lede 86 utviklere og samtidig levere kode hver dag?Stian Conradsen og Vidar Moe pratet om hvordan SpareBank 1 Utvikling gikk fram for å finne en intern leder til stillingen som leder av Utvikleravdelingen samtidig som ingen interne ville slutte å kode.Team på tomgangJostein Emmerhoff og Marius Mikalsen (Sintef) pratet om hvordan vi kan kan jobbe både med allignment og autonomi i organisasjoner som både både vokser hurtig og har flere og flere kryssfunksjonelle team.JavaZone 2021 ble en spesiell JavaZone både for publikum og speakere.Vi gleder oss allerede stort til JavaZone 2022. Vi sees der.SpareBank 1 Utvikling på JavaZone was originally published in SpareBank 1 Utvikling on Medium, where people are continuing the conversation by highlighting and responding to this story....

Av Vidar Moe

Hvilken skal jeg velge?

Vi vil hele tiden lage de beste og smudeste løsningene for kundene våre. For å få til det, må vi innimellom oppgradere teknologiene og verktøyene vi bruker. Men hvordan skal vi egentlig velge et nytt produkt / teknologi / plattform når det er flere gode valg, i en industri der det som er State of the art i dag gjerne er worst practice i morgen?Det finnes mange jevnbyrdige konkurrerende produkter innenfor de fleste områder, det være seg databaser, byggesystemer eller skyleverandører. Hvordan skal vi finne de teknologiene som er best for oss når det er så mange alternativer å velge mellom?Hvilken skal vi velge?Top of the PopsVi tror det er lurt å basere oss på teknologier som er populære i industrien generelt, og godt likt blant utviklere spesielt. Det er det flere grunner til:Sannsynligheten er stor for at også våre utviklere vil like, eller allerede liker teknologienNår vi skal ansette nye utviklere, så er det stor sjanse for at de også liker tekonlogienPopulære teknologier har som oftest god og enkel dokumentasjon, slik at det er lett å få hjelpDet som ikke står rett fram i dokumentasjonen, står som gjerne på stackoverflowMen det er ofte flere teknologier som er populære, og har sine følgerskarer. Hva gjør vi da?Spør en vennDet kan være lurt å finne ut om noen andre en kjenner og stoler på, har erfaring med en eller flere av de aktuelle teknologiene. I så fall, inviter til en prat og få dem til å fortelle om både fordeler og ikke minst ulemper og ting å tenke på. Da er det også fint å få høre mer om konteksten de bruker teknologien i — er den lik nok ditt behov til at deres erfaringer er relevante?Et annet tips er å gå utover venner og kjente, og rett og slett gjøre et moderne literaturstudium. Det består av å se talks, lese reviews, bloggposter og artikler om de aktuelle teknologiene. De mest populære teknologiene kan ofte gjenkjennes på at det også er de det er flest artikler og talks om.Det viktigsteHvis dere har noen absolutte krav, så er disse bra for å snevre inn valget. Er det noen egenskaper med produktet som er ekstra viktige for dere? Kanskje har dere for eksempel en del absolutte sikkerhetskrav rundt autentisering og autorisasjon? Eller kanskje har dere et konkret problem dere trenger å løse? Det hjelper ikke om en teknologi er aldri så bra på aldri så mye, om den ikke leverer på de viktigste kravene.Har du troen?Hvem er det som backer teknologiene? Har dere troen på firmaet eller personene som står bak? Hvis det er en open source teknologi, er det aktivitet og videreutvikling på teknologien? Vil det sannsynligvis også være det om to år?Det kan være mye å velge mellom.Bli skitten på hendeneNår dere har en shortlist på to-tre produkter, er det på tide å bli skitten på hendene for å finne ut av hvordan produktene faktisk fungerer i din kontekst. Dere må prøve dem ut.Vi anbefaler å lage et testcase som er så enkelt som mulig, og samtidig stikker fingeren inn der det gjør mest ondt. Dere må verifisere at dere får løst utfordringene som er grunnen til at dere startet denne vurderingen.Trenger dere en ny database fordi den gamle er for treg når den jobber med store JSON datasett? Da lager dere et digert JSON datasett og utstetter testkandidatene for dette. Eller kanskje dere trenger et nytt byggsystem fordi det gamle ikke takler at dere bygger de 400 nye flotte mikroserviceappene deres i parallell? Starte med å teste ut bygging av 800 apper i parallell.Med reell uttesting kan dere også samtidig verifisere at for eksempel sikkerhetsmekanismene faktisk fungerer som beskrevet.Utvikleropplevelse og brukervennlighetReell uttesting er også den eneste måten å få en følelse med brukervennligheten til teknologiene dere vurderer. Er APIene hensiktsmessige og enkle å bruke til for eksempel automatisering? Hvordan føles det å jobbe med dem? Er de lett å bruke i konteksten som er viktig for dere? Er de raske? Er dokumentasjonen rett? Eller mangler kanskje de viktigste APIene for dere helt, og eneste mulighet for automatisering er screenscraping av triste pek-og klikk-grensesnitt?APIene gir også røntgensyn som lar oss se inn i firmaet som utvikler dem. Gjennom APIene kan vi se hvordan utviklerene tenker og hvilket fokus de har på utvikleropplevelse. Skal dere for eksempel vurdere en ny partner som leverer tjenester via APIer, ta med en utvikler på det første møtet. Gå rett på sak. Det kan spare dere for mye bortkastet tid.Hvis dere til slutt sitter igjen med mer enn en teknologi som svarer godt på punktene over, så er dere heldige. Da spiller det trolig ingen rolle hvilken av disse dere starter med. Skulle det senere vise seg å bli utfordringer, så har dere allerede en alternativ teknologi klar til å ta over.Lykke til med valget.Hvilken skal jeg velge? was originally published in SpareBank 1 Utvikling on Medium, where people are continuing the conversation by highlighting and responding to this story....

Av Vidar Moe

SpareBank 1 Utvikling på Instagram@sparebank1design@sparebank1utvikler