Jobb

Ting som enter konkret har med jobben min å gjøre, eller det å jobbe som utvikler generelt.

Dagens sitat via SMS

Jeg fortsetter å rote med Ruby, og deler villig med alle som har lyst til å lære. Denne gangen har jeg laget et lite skript som henter et daglig oppdatert visdomsord fra nettet, og sender det til en distribusjonsliste på SMS via PSWinCom‘s SMS Gateway. Programmet illustrerer hvor enkelt det er å hente og parse en RSS-feed, bruk av konfigurasjonsfiler i YAML-format, og sending av XML til en server over TCP (ett av PSWinCom’s mange integrasjonsgrensesnitt).

ruby_quote

Det komplette programmet er listet ut nedenfor. La meg kjapt gå gjennom de ulike delene:

Metoden get_quote (linje 5 til 11) tar inn URL’en til en RSS-feed fra BrainyQuote som gir meg ett nytt sitat hver dag. Jeg åpner en connection mot adressen, og parser den med RSS-parser som er en del av Ruby’s grunninstallasjon. Jeg plukker ut det første elementet, slår sammen beskrivelsen (selve sitatet) og tittelen (hvem sitatet stammer fra), og returnerer dette (siste statement i en ruby-metode returneres automatisk).

Metoden get_sms_xml (linje 13 til 28) tar inn nødvendige parametre og bygger opp XML’en jeg skal sende til SMS Gateway’en. Dokumentasjon av dette formatet er definert i denne pdf’en. I metoden bruker jeg noe som kalles for et Here-Document – en “tradisjonsrik” måte å definere strenger over flere linjer på som du også finner i PHP, Perl, Python, Unix shells, Windows Powershell etc.

Metoden send_sms (linje 30 til 34) åpner en TCP socket på en gitt adresse og port, sender XML’en, og avslutter. Det er alt som skal til for å sende SMS gjennom systemet vårt.., så sant du har en konto vel-å-merke.

QuoteSMS.rb:
1 require rss
2 require open-uri
3 require yaml
4
5 def get_quote uri
6   open(uri) do |con|
7     rss = RSS::Parser.parse(con.read, false)
8     quote = rss.items.first
9     #{quote.description} -#{quote.title}
10   end
11 end
12
13 def get_sms_xml gw, receivers_xml, text
14 <<EOF
15 <?xml version=”1.0″?>
16 <SESSION>
17 <CLIENT>#{gw[:client]}</CLIENT>
18 <PW>#{gw[:password]}</PW>
19 <MSGLST>
20 <MSG>
21 <TEXT>#{text}</TEXT>
22 #{receivers_xml}
23 <SND>#{gw[:sender]}</SND>
24 </MSG>
25 </MSGLST>
26 </SESSION>
27 EOF
28 end
29
30 def send_sms gw, xml
31   session = TCPSocket.new(gw[:host], gw[:port])
32   session.write xml
33   session.close
34 end
35
36 settings = YAML.load_file(settings.yml)
37
38 quote = get_quote settings[:quote_uri]
39 xml = get_sms_xml(settings[:gateway],
40                   settings[:receivers].map {|r| <RCV>#{r}</RCV>},
41                   quote)
42 send_sms settings[:gateway], xml

I linje 36 leser jeg inn konfigurasjonsdata (mer om dette om litt). Deretter er det bare å kalle de tre metodene, og hey-presto(!) så er jobben gjort. Nå kan jeg for eksempel sette opp en scheduled task til å kjøre dette programmet hver dag, og “spamme” mine venner med gode sitater på telefonen.

Legg merke til linje 40 som konverterer en array av telefonnumre til en XML streng array vha. metoden map. Dette tilsvarer å bruke Select-metoden i Linq i .NET:

    1 var list = new long[] { 4700000001, 4700000002, 4700000003 };

    2  IEnumerable<String> xml = list.Select(phonenumber

    3      => string.Format(“<RCV>{0}</RCV>”, phonenumber));

Det at jeg kan skyte inn arrayet i en annen streng som i linje 22, og at elementene da “flates ut” til én streng er minst like kult. Tilsvarende får du ikke til i .NET uten å eventuelt endre definisjonen av ToString() for enumerasjonen det gjelder. Let’s not go there…

YAML Ain’t Markup Language

Som sagt har jeg valgt å bruke YAML som format på konfigurasjonsfilen til dette programmet. YAML er et serialiseringsformat som er tilgjengelig for mange programmeringsspråk. Fordelen er at det er mye mere lesbart og editeringsvennlig enn XML, som har vært det mest populære formatet i noen år nå. YAML har mer til felles med JSON.., I praksis er JSON faktisk et subset av YAML. 

settings.yml:
1
2 :gateway: 
3   :port: 9876
4   :client: demoAccount
5   :password: somePassw0rd
6   :host: 127.0.0.1
7   :sender: RubyQuote
8 :quote_uri: http://feeds.feedburner.com/brainyquote/QUOTEBR
9 :receivers:
10   - 4790000001
11   - 4790000002
12   - 4790000003

Denne settingsfilen definerer en Hash (el. dictionary om du vil) med tre nøkler med tilhørende verdier. Som nøkler har jeg brukt symboler – de tingen som begynner med kolon i Ruby – men strenger eller andre datatyper hadde fungert like fint. Nøkkelen :gateway har en ny Hash som verdi, som definerer settingene for å kontakte og bruke PSWinCom gatewayen. :sender gir for eksempel navnet jeg har valgt på avsenderen (se bildet av mobilen tidligere i artikkelen). Og nei, dette er ikke reelle brukernavn og passord…

Nøkkelen :quote_uri refererer til en streng som inneholder RSS-adressen. :receivers refererer til en array med telefonnummer. Når denne filen parses får jeg tilbake en Hash med alle disse verdiene i korrekte typer.

YAML er heller ikke begrenset til primitive typer som streng, arrays osv – man kan også serialisere og deserialisere Ruby-objekter man selv definerer, uten at det ser spesielt mer komplisert ut enn filen over. Faktisk trenger det egentlig ikke eksistere noen definisjon av objektene i programmet i det hele tatt – YAML-parseren vil konstruere nye typer om det trengs basert på det som er definert i YAML-filen. Ruby er jo tross alt et dynamisk språk. Ganske fiffig faktisk!

Konklusjon

Du har nå sett hvor enkelt det er å hente og parse en RSS feed. Du har også sett hvor smertefritt det er å sende SMS vha litt XML og PSWinCom’s SMS Gateway. Og hvis ikke du fikk lyst til å bytte ut alle XML-konfigurasjonsfilene dine med YAML så har jeg kanskje forklart litt dårlig hvor kult det er.

Objektorienteringen er kanskje ikke så mye å skryte av, men for et program på 42 linjer ville det bare ha vært i veien. Håper dette inspirerte!

Se også: Send SMS med SOAP for hvordan du enkelt kan bruke PSWinCom’s SOAP-grensesnitt for sending i .NET.

PSWinCom KickOff 2010

På fredag var PSWinCom samlet på Solstrand. Det ble en flott dag med mye humor, spontane applauser og tonnevis av god energi. I løpet av dagen fikk samtlige i firmaet presentere litt om hva som er viktig for dem, og vi fikk gjort det som er nødvendig for at vi alle skal dra lasset i samme retning i året som kommer.

the_gang

Teknisk avdeling snakket selvfølgelig om hvilke prosjekter vi har jobbet med i året som har gått, hva som er status, og hvilke hovedoppgaver som ligger klare i backloggen. Men vi brukte også endel tid på å fortelle de andre om hvilke grep vi har gjort for å bli bedre. Jeg gav endel bakgrunnstoff rundt softwareutvikling generelt, og agile spesielt, mens de andre på teamet ble mer konkrete, og presenterte hvordan vi har jobbet med enhetstester og testdreven utvikling, kontinuerlig integrasjon etc. Vi holdt også en praktisk demonstrasjon av planning poker, og det fungerte veldig bra.

Dessuten fikk alle oppleve en hel dag på teknisk komprimert til 2 minutter – redigert av Henrik:

CropperCapture[50]

Jeg ble litt “tatt på senga” av all skryten vi fikk av de andre avdelingene. Jeg vet jo at vi har gjort og gjør mye bra, men for de som stod på utsiden var det antagelig lettere å se den komplette forvandlingen avdelingen har vært gjennom.

Takk til alle for måten jeg har blitt tatt imot i bedriften, og for at dere gjør PSWinCom til et så inspirerende og motiverende sted å jobbe. Vi utgjør en unik gjeng, det er det ingen tvil om!

Et usedvanlig år..

Da nærmer det seg slutten av et veldig spesielt år. 2009 var ikke bare det året jeg slanket meg 10 kilo.., for deretter å legge dem på meg igjen. Det var nemlig også det året jeg tok skikkelig tak i min egen karriære, og jobbet målrettet med å bli en mye bedre utvikler. Jeg byttet også jobb i 2009, jeg blogget ekstremt mye, og jeg ble med i NNUG-styret i Bergen. Og sist men ikke minst vil jeg alltid huske 2009 som det året jeg ble pappa til verdens søteste jente.

Her er noen tanker rundt året som har vært. Jeg er ganske stolt av hva jeg har gjort, så dette kan tendere mot selvskryt. Er du ikke fan av det får du surfe videre…

.Net ninja-initiativet

28. desember 2008 satte jeg meg selv et nyttårsforsett: Jeg skulle jobbe målrettet og strukturert med å utvikle mine ferdigheter som programmerer. Jeg hadde store forhåpninger, men ingen anelse om at det skulle forandre mitt forhold til faget mitt så mye som det har gjort. I løpet av året har jeg lest en rekke med fantastiske bøker, hørt på hundrevis av podcasts, sansynligvis kodet mer enn noensinne (både på jobb og fritid), og diskutert mer programmering med andre enn noen gang før. Jeg har fokusert mye på grunnleggende objektorientering, patterns og refakturering. Jeg har praktisert testdreven utvikling/design, tidvis parprogrammering, og lært meg å bruke mocking og Inversion-of-Control containers. Og jeg har utviklet min daglige bruk av C#, gjennom en dypere forståelse av ting som generics, linq og lambda.

Nå på slutten av året har jeg også tatt opp igjen Ruby. Jeg begynte så smått å lære meg dette programmeringspråket i 2006, men det ble for lite brukt, så da klarte jeg ikke holde kunnskapen ved like. Nå leser jeg The Ruby Way, og har flere småprosjekter på gang. Jeg tror tillegget av et dynamisk språk til “min portefølje” vil kunne gjøre meg til en enda bedre utvikler. Så det blir mer om Ruby her til neste år…

NNUG / Community

Som jeg allerede har nevnt inviterte Jon Arild meg med i NNUG-styret i starten av året, og i februar holdt jeg et foredrag om objektorienterte databaser (del 1 og del 2) som ble svært godt mottatt. Jeg har blitt en mere aktiv deltager i det norske .Net-miljøet, bl.a. gjennom bruk av twitter og gjennom bloggen min. Jeg har blogget MYE i år, et naturlig resultat av at jeg har lært så mye nytt, og jeg tror mine blogposter har vært inkludert i Microsofts nyhetsbev hele fire ganger nå.

NNUG-året i Bergen har forresten også vært helt eksepsjonelt; vi har blant annet hatt besøk av “kjendiser” som Jimmy Nilsson, Mary Poppendieck, Jeremy D. Miller, Greg Young, og sist men ikke minst Scott Hanselmann (introdusert av selveste Carl Franklin). MSDN Live i mars og september var også bra, og årets høydare var Norwegian Developers Conference i Oslo.

Farvel Contiki, hei PSWinCom

I sommer takket jeg farvel til CMA Contiki, og begynte som teamleder/seniorutvikler i telekom-selskapet PSWinCom. Det var en svært vanskelig avgjørelse å ta, men i ettertid er jeg veldig fornøyd med utfallet. I PSWinCom har jeg fått anledning til å innføre og praktisere mange av de smidige prinsippene som var vanskelig å gjennomføre i Contiki. Vi har et dyktig og motivert team som er villige til å lære nye ting.

Domenet vi jobber i har også gitt meg mange, nye utfordringer. Vi jobber med en ekte serviceorientert (SOA), event-drevet, asynkron arkitektur med høy throughput. Vi bruker mye windows-services, køer og parallellprosessering, som fører til mange problemer jeg aldri har måttet forholde meg til tidligere. For ikke å snakke om et utall integrasjonspunkter med protokoller av ulik art. Hva mer kan en utvikler ønske seg?

Og så ble jeg pappa..

Samme hvor mye jeg har fått til i løpet av året så er dette det mest fantastiske. Dette er en blog om programmering, så jeg skal ikke kjede dere for mye, og henviser derfor bare til en liten videosnutt (tidligere publisert på facebook):

Om 2010 blir bare halvparten så spennende som 2009 har vært så kommer det til å bli et fabelaktig år. Mitt nyttårsforsett denne gangen er rett og slett å fortsette som jeg gjør nå. Takk til alle som har fulgt utviklingen på bloggen min – jeg ønsker dere en riktig God Jul og et Godt Nytt År alle sammen!!!

ZipTalks på jobben

ziptalk

Det er viktig å skape et miljø for læring og utvikling på jobben. Derfor har vi i PSWinCom startet opp med ziptalks på utvikleravdelingen. Hver fredag før vi tar helg holder en av oss et innlegg på 15 til 30 minutter om et eller annet som kan være av interesse.

Sålangt har jeg holdt et innlegg om objektorientering jeg kalte “OO > O”, og et om “UML for smidige utviklere”. Vi har også hatt en sesjon om bruk av generics i .net interfaces, en demonstrasjon av Dispatch Table Pattern, og en fredag så vi Uncle Bob’s Prime Factors Kata i Ruby, og snakket litt om tanker vi gjorde oss rundt den.

Jeg har forsøkt å få til slike intern-presentasjoner de fleste steder jeg har jobbet, men det har alltid tidligere gått ganske dårlig. Utfordringen er både å skape motivasjon og å få tid til gjennomføring. Denne gangen kjører jeg mye hardere på, og satser på at vi klarer å etablere dette som en fast milepæl hver uke. Teamet er motivert, og med korte presentasjoner, en uformell setting og mange til å fordele foredragene på bør det ikke være noe problem.

Og det er mye å snakke om – mitt problem er å klare å velge. Jeg kunne tenke meg å snakke om alt fra prinsipper som Single Respoinsibility, Don’t Repeat Yourself og Command Query Separation, via TDD og parprogrammering til patterns som Strategy, State, Visitor osv. Det kan også være et greit fora for å introdusere eller gå dypere inn i ulike verktøy som IoC, NDepend, osv. Og jeg ønsker også å utfordre teamet med å snakke om andre programmeringspråk, og å gjøre mere praktiske ting – noe i retningen av coding dojos.

Har du lyst til å dele erfaringer og fortelle om hvilke slike aktiviteter dere gjør på jobben? Det er jeg veldig interessert i å høre om, så skriv en kommentar da vel.

Er du en av oss?

I skrivende stund, kl 14:58 en fredag ettermiddag teller jeg opp, og ser at totalt har 3.544.767 nordmenn stiftet kjennskap med våre SMS tjenester siden oppstart for noen år siden. Bare siste uken gjelder dette over 10.000 nye mennesker. Jeg er en av disse, men hvem er vi?

Vi er personer som bruker SMS til å:
    *     lese av strømmen
    *     få påminnelser om frisørtimen og bilen som er ferdig på service
    *     bestille helsekostprodukter
    *     flytte avisen med seg når en drar på ferie
    *     logge på nettbanken
    *     få melding om endrede treningstider
     … og mye mer.

Er du ikke en av oss? Da er du kanskje en som:
    *     fortsatt bor hjemme hos mor slik at du ikke har noen strøm å lese av
    *     er skallet, så ingen frisør er nødvendig
    *     ikke har råd til bil og må ta bussen (som ennå ikke forteller deg på SMS når den er forsinket)
    *     ikke leser aviser eller drar på ferie
    *     lever usunt siden du ikke bryr deg om helsekost
    *     har for dårlig creditrating til å få nettbank
    *     aldri trener
     …

Du vet det kanskje ikke, men du er mest trolig en av oss. For PSWinCom er de som holder de mobile kommunikasjonslinjene i gang hos Skandiabanken, Media Norge, Fjordkraft, NextGenTel, Toyota og over 3000 andre bedrifter og organisasjoner i Norge.

PSWinCom – En del av din hverdag!

Hilsen
Mr. PSWinCom

PS! Mens jeg skrev dette har ytterligere 65 personer til blitt en av oss! Var det deg kanskje? ;)

Positiv første dag på jobb

I dag tok jeg på meg min nye ransel på ryggen og reiste med båten til byen for min første arbeidsdag hos PSWinCom. Selv om det meste av dagen gikk med til å få riktig tilgang på citrix-miljøet – noe som ikke er helt i boks enda – så var det en interessant dag, og jeg har allerede begynt å få et lite innblikk i forholdene i utviklingsavdelingen.

Noe av det første jeg gjorde var å flytte en vegg! Det stod en skillevegg mellom pulten jeg skulle ha og pulten til min nye kollega Audun. Heldigvis var det helt i orden for han at vi fjernet veggen, som bare ville blitt et hinder for kommunikasjon. Og hvis man skal trekke frem kun én ting som det er viktig at fungerer i et team, så er det nettopp kommunikasjon.

Jeg sitter ved pulten til venstre i bildet.., Audun er der til høyre. Pultene er ikke akkurat ideelle for parprogrammering, men det er snakk om at vi skal få noen nye, så kanskje det vil bedre seg.

IMAG0009

Veggen som vi fjernet stakk en annen kollega, Bjørn, av med, for han ville bygge seg borg. Nå er det helt umulig å vite om han er på jobb eller ikke. Bjørn jobber vel mest selvstendig – han er ikke endel av det daglige utviklingsteamet – så da er det vel greit med litt privatliv da.

IMAG0010

På slutten av dagen fikk jeg litt innsyn i koden det jobbes med for tiden, og jeg ble positivt overrasket. Kildekoden er ganske ren, med beskrivende navn, små metoder etc., som gjorde det nokså enkelt å lese koden. Det eneste som virket mot sin hensikt var nokså store mengder med dokumentasjon i koden, som nokså tydelig enkelte steder hadde kommet ut av sync med koden de skulle dokumentere. Koden var i seg selv så bra at det var enklere å forstå den enn kommentarene – og siden kommentarer er enkle å slette så ser jeg ikke på dette som et stort problem ;)

Utviklerne på teamet var med og hentet inspirasjon på NDC i sommer, leser nå Clean Code, og har til og med så smått startet med å skrive enhetstester. Jeg synes dette lover veldig bra!

Takk for en fin mottakelse på min første dag – jeg gleder meg til å bli en del av dette teamet!

PSWinCom lanserte forresten nye websider i dag også, så ta gjerne en titt på dem.

Smidige ting å fokusere på i min nye jobb

Dette er en artikkel i en serie som handler om mine forventninger og forberedelser til min nye jobb i PSWinCom. Jeg håper de kan inspirere og være til nytte for andre i samme situasjon. Og jeg håper mine nye kollegaer setter pris på åpenheten.

Som nevnt et par-tre (eller fire, fem) ganger nå begynner jeg om få dager i ny jobb. Det er utrolig mange ting jeg har lyst til å ta tak i og forsøke å gjennomføre, selv om jeg selvsagt vet alt for lite om forholdene jeg kommer til og hvilke utfordringer som er viktigst – et forbehold du må ha i bakhodet når du leser denne artikkelen.

Jeg har plukket ut fire ting som jeg føler veldig sterkt for, som jeg vil forsøke å innarbeide så tidlig som mulig. Jeg håper teamet vil se verdien i disse tingene, og at ledelsen er med på at det er viktige fokusområder. Jeg vil gjøre hva jeg kan for at utviklingsavdelingen i PSWinCom skal bli en smidig enhet som kan levere høy kvalitet or respondere raskt på endringer, og for å få til det vil jeg forsøke å jobbe med følgende…

CropperCapture[19]1. Kontinuerlig integrasjon

Husker jeg riktig fra intervjurundene jeg har vært igjennom bruker man i dag ingen byggserver / continuous integration server. For meg er dette en absolutt nødvendighet for et profesjonelt utviklingsteam. Jeg satser på å installere TeamCity en av de første dagene mine (siden det er den jeg har best erfaring med – kjørte en test-install på laptopen på under 2 minutter, og integrerte Snookiepoof og Foosball Manager på rundt 15 minutter).

I tillegg vil dette være en fin øvelse å gjennomføre for at jeg skal bli kjent med hvilke løsninger vi har og hvordan de henger sammen.

En integrasjonserver er viktig av mange grunner. Den sørger for at vi har software som fungerer – ikke bare på utviklerens maskin – og at vi kan release hurtig. Den sørger for at alle testene kjører gjevnlig (se neste punkt), og reduserer betraktelig problemer knyttet til merging.

Jeg vil skape en kultur hvor man gjør hva man kan for å ikke bryte builden. Jeg vil at vi skal sjekke inn endringer så ofte som mulig, og få øyeblikkelig feedback om noe er galt. Som sagt vet jeg ikke hvordan forholdene rundt dette er i PSWinCom i dag, men jeg håper vi kan etablere kontinuerlig integrasjon som et senntralt konsept i vår utviklingsprosess.

CropperCapture[20]2. Testing

Det neste jeg vil sette fokus på er testing. Vi har ingen dedikerte testressurser i mitt nye selskap, men vi leverer en tjeneste hvor stabilitet er superviktig. Jeg kjenner ikke til (og tviler på) om det eksisterer noen form for automatiserte tester i dag, men jeg vil jobbe for å gradvis få systemene våre under test.

Videre vil jeg introdusere gutta for testdreven utvikling og design (TDD), og håper jeg over tid kan illustrere hvordan dette fører til design/arkitektur som er enklere å vedlikeholde og endre, og som er mer intuitiv, i tillegg til ferre bugs og mindre regresjon, hurtigere utvikling, og en større trygghet i hva man leverer.

For som Robert C. Martin sa det i hovedtalen på NDC i år: “Debatten er over. Testdreven utvikling fungerer, og det finnes ingen gode grunner til å ikke bruke det. Faktisk kan det tenkes man bør karakterisere det som uprofesjonelt å ikke bruke det.”

Igjen vil innføring av tester være en god øvelse for meg, som vil gjøre meg kjent med den eksisterende koden. Jeg leser nå Working Effectively with Legacy Code for å være bedre rystet til å skrive enhetstester for et system som i utgangspunktet ikke er designet for det.

Til slutt et lite gullkorn fra Martin Fowler: “Manual scripted testing should be a human rights violation!” Jeg tror han mener det oppriktig.

CropperCapture[21]3. Kvalitetskode

Kodekvalitet har etterhvert blitt noe av det viktigste for meg som utvikler. Det er ikke nok at programvaren tilfredstiller de funksjonelle kravene – vi må også stille krav til vedlikeholbarhet, og jeg ønsker derfor at vi i vår daglige utvikling skal legge vekt på ting som enkelhet i design, ren kode, og å følge DRY, SOLID og andre prinsipper som kjennetegner en god kodebase.

Jeg ønsker også at vi skal sammarbeide godt om utviklingen som et team, og at vi skal bruke en viss grad av parprogrammering og kodegjennomgang for å øke kvaliteten og felles eierskap til koden (Coding Horror: Pair Programming vs. Code Reviews). Parprogrammering er i tillegg nok en teknikk som vil hjelpe meg som er ny på teamet til å bli kjent med de eksisterende løsningene.

CropperCapture[22]4. Iterasjoner og prosess

Dette er området hvor det sansynligvis er størst forventninger til at jeg skal bruke min erfaring til å forbedre måten PSWinCom jobber på. De har brukt Scrum en viss tid, men jeg fikk inntrykket av at de selv ikke er helt fornøy med hvordan de har gjennomført det. Utfordringen er at dette punktet er det som er mest uklart for meg før jeg får et bedre innblikk i hvordan ting fungerer i dag.

Smidige prosesser er ikke enkle oppskrifter som man bare kan følge for å oppnå raskere utvikling, høyere kvalitet og forutsigbarhet. Smidige teknikker må tilpasses, og det er ikke sikkert mine erfaringer er direkte overførbare. Dessuten har det skjedd mye i Agile-miljøet etter at Scrum dukket opp (i den formen som jeg har lært); ting som Lean og Kanban er ting vi bør se nærmere på, og som sansynligvis vil passe bra i en bedrift som vår.

Uansett ser jeg på dette som en viktig oppgave – å etablere en god prosess for prioritering, planlegging og gjennomføring. Jeg ønsker at vi skal kunne slippe oppdateringer ofte – alltid ha fungerende software, og at vi skal kunne fokusere på få ting om gangen (multitasking fungere ikke!). Som jeg var inne på i forrige artikkel mener jeg det er viktig at teamet skaper denne prosessen i felleskap.

Så det var altså mine fire, smidige kjepphester. Jeg håper å kunne rapportere tilbake til mine lesere med gode erfaringer rundt alle disse om noen måneders tid.

Knagger: , , , , , , , , ,

En smidig team leder

Dette er en artikkel i en serie som handler om mine forventninger og forberedelser til min nye jobb i PSWinCom. Jeg håper de kan være til nytte for andre i samme situasjon. Flere poster følger denne uken.

1. august begynner jeg å jobbe for PSWinCom. Stillingstittelen er Senior systemutvikler / Team-leder. Jeg vil ha ansvar for organisering av og den daglige fremdriften i utviklingsteamet, planlegging og prioritering av iterasjoner, samt fasilitere smidig utvikling. Jeg har vært teamleder i et par år nå, men når jeg bytter jobb så føler jeg liksom at jeg kan starte med blanke ark, og tenker derfor mye på hvordan jeg vil fungere i denne rollen.

Så hva innebærer teamleder-rollen i et smidig team?

44E03BD9-F2BF-4AD4-9531-FB8BAD0ABA90_mw800_mh600
vs
ghandi9

Noen sier at i et smidig team er alle medlemmene likeverdige, og derfor skal man ikke ha en leder. Andre, som Robert C. Martin, snakker om mentor-teams, med én absolutt leder som alle skal se opp til, og som har total avgjørelsesmakt. Selv er jeg fan av selvorganiserende team som velger sin egen beste måte å gjøre ting på. Selvorganiserende team skaper et miljø hvor man stoler mer på hverandre, og tar felles ansvar. Men slike team trenger også en leder.

Den smidige teamleder fungere mer som en gjeter, i kontrast til den mere tradisjonelle lederen, som er som en millitær offiser. (Og nei, jeg sier ikke at smidige utviklere reduseres fra soldater til sauer, lol.) En smidig teamleder løper mye mer rundt utviklingsteamet, og påfører det ikke like mye direkte kontroll. Den smidige teamlederen gir teammedlemmene råd basert på egne erfaringer, han overvåker, men overstyrer bare når det er absolutt nødvendig. Han fjerner ting som forstyrrer teamets progresjon, passer på at prosessene teamet selv har vedtatt følges, og sørger for enighet.

En av hovedoppgavene til en smidig teamleder er å passe på at man lærer av feil, og endrer prosessen deretter. Et av de viktigste prinsippene et smidig team må følge er åpenhet.., man må snakke om hva som går galt – alle må ha fullt innblikk i hva som skjer, slik at man ikke får ubehagelige overraskelser som kunne vært unngått. Lederen må få utviklerne til å føle at det er helt greit, og at det er forventet, at man innrømmer og snakker om feil, og søker hjelp så tidlig som mulig. På den måten blir man bedre over tid.

Som teamleder ønsker jeg å følge disse fire pillarene, som legger vekt på smidige verdier:

1. Led gjennom eksempel

Jeg vil være et positivt eksempel for teammedlemmene gjennom hva jeg seier og gjør – under utvikling, i møter, i lunchen, i communitiet – alle steder. Jeg har forståelse om og erfaring fra smidig utvikling, og tror at “osmose” er den beste måten å overføre denne kunnskapen på. Det er for eksempel mye vanskeligere å overtale en utvikler til å prøve TDD enn å overbevise ham om at det fungerer ved å vise det i praksis.

2. Sørg for gjennomføring

Jeg må sørge for at vi bygger oss en prosess som vi har tro på, en prosess basert på våre egne erfaringer. Vi må fokusere på å levere forretningsverdi, men på en måte som skalerer og fungerer over tid. Vi må være fokuserte, og ikke forsøke å gjøre for mange ting på en gang – den eneste måten å gå raskt på er å gå godt!

3. Skap god energi

Jeg må legge merke til når teamet er i ferd med å miste den gode energien, og bruk mitt eget engasjement og eksempel til å stimulere teamets energi – spesielt når teamet står overfor tøffe utfordringer. Om (eller rettere sagt når) teamet fra tid til annen feiler, må vi analysere situasjonen i felleskap, og jeg må motivere teamet til å prøve igjen. Jeg må stimulere til både ståpåvilje og tolmodighet.

4. Promoter felleskap

Jeg må hjelpe alle til å føle seg inkludert, verdsatt og respektert. Mennesker jobber best når de har det bra! Vi kan ikke tollerere konflikter eller klikker. Vi må skape et miljø hvor vi stoler på folkene rundt oss – at de gjør jobben de skal slik teamet/bedriften ønsker at det skal gjøres. Heldigvis får mitt inntrykk av PSWinCom sålangt meg til å tro at dette blir en av de enkleste oppgavene.

Og så gjelder det bare å huske én ting: På samme måte som jeg forventer at teamet mitt skal være åpne for nye ideer, så må også jeg være åpen for ting jeg ikke har tenkt på, og som kanskje ikke er intuitive for meg. Et smidig team utvikler seg gjennom prøving og feiling, og ulike personligheter har ulike ting å tilby prosessen.

Knagger: ,

Send SMS med Soap

Mens jeg vurderte å begynne å jobbe for PSWinCom fikk jeg blant annet tilgang til deres SMS Gateway produkt, slik at jeg selv kunne teste hvor enkelt og bra det var. PSWinCom lar deg sende SMS gjennom mange integrasjonspunkter, som XML over TCP, HTTP/HTTPS post, SMTP, og SOAP web services, i tillegg til deres webgrensesnitt. Jeg bestemte meg for å teste ut SOAP i C#.

Først fant jeg adressen til wsdl’en, opprettet en ny konsollapplikasjon, og la til en web service referanse i Visual Studio.

CropperCapture[53]

Den genererte proxyen gav meg alt jeg trengte. Jeg opprettet en ny SoapClient, instantierte en ny SMSMessage, og på under to minutter hadde jeg sendt min første SMS fra kode.

    1 using (SMSServiceSoapClient client = new SMSServiceSoapClient())

    2 {

    3     string username = “torbjorn”;

    4     string password = “n0tth3r331passw03d”;

    5 

    6     SMSMessage message = new SMSMessage

    7     {

    8         ReceiverNumber = “004755560122″,

    9         SenderNumber = “004755596698″,

   10         Text = “Les om SMS via SOAP på http://kjempekjekt.com !”,

   11         Tariff = 0,

   12         TimeToLive = 0

   13     };

   14 

   15     ReturnValue returnValue = client.SendSingleMessage(

   16         username,

   17         password,

   18         message);

   19 }

ReturnValue-objektet har en Code property med verdien 200 om alt gikk bra, 100 om meldingen ble forkastet (detaljert beskrivelse blir gitt i Description propertien), og 500 ved SOAP interface error.

Så enkelt er det altå å integrere systemet sitt om man vil sende SMS med PSWinCom’s Gateway.

PSWinCom ansetter en ekte .NET Ninja

Jepp, målet er nådd, for nå omtales jeg som en “ekte .NET ninja” :D Her er et utklipp fra min nye arbeidsgivers siste nyhetsbrev:

En ekte .NET Ninja!
Klikk for full størrelse..

Man kan få prestasjonsangst av langt mindre! Er du interessert i å lese hele nyhetsbrevet, kan du laste det ned her. Vær tålmodig, det kan ta litt tid.


Alf Kåre Lefdal: Distributed Podcast er også ganske interessant. De tar opp tema som fx. ...

Stian: +1 for 6er til This Developer's Life! Min definitive favoritt. Jeg trengte også...

Torbjørn: Takk for flere tips, Vegard. Deep Fried Bytes ligger på oversikten min fra 2009...

Vegar: Og glemte helt ios: Nsbrief og ideveloper live. Har du hørt på deep fried byt...

Vegar: Mye kjekt her. TDL, hanselminutes og .net rocks ligger i en klasse for seg. Suv...

Torbjørn: Helt enig, arkivet til Software Engineering Radio er en gullgruve om man vet hva...

Einar W. Høst: Jeg synes at det kuleste med se-radio er backloggen av intervjuer... det er noen...

arnab: fantastisk :)...

Olav: Glimrende blogg ! Modellen av hjernens arbeid passer ikke bare på nyskaping: ...

Torbjørn: Ja, flydesign trekkes ofte frem som et eksempel på dette fenomenet. Design av b...

 Hold deg oppdatert

Søk i bloggen

Ferske innlegg

  • NodeJS vs. ASP.NET
  • Pulten min..
  • No ifs and buts
  • Community-fiskebolle på ROOTS 2012
  • Kategorier

  • .net ninja (37)
  • Bøker (18)
  • Diverse prosjekter (37)
  • DSL (10)
  • Erlang (10)
  • F# (5)
  • Hardware (1)
  • Jobb (78)
  • Julekalender (51)
  • kjempekjekt.com (23)
  • LISP/Clojure (34)
  • NDC (4)
  • NNUG / community (63)
  • O/RM & databaser (10)
  • Off topic (118)
  • OO-design/clean code (31)
  • Podcasts (15)
  • Polyglot (82)
  • Ruby (29)
  • Silverlight / RIA (3)
  • Software/verktøy (20)
  • Softwareutvikling (24)
  • Testing / TDD (30)
  • the contiki strip (13)
  • User experience (3)
  • WCF (3)
  • Webutvikling (34)
  • WPF (9)
  • WTF (13)
  • Last ned Wallpaper

    Programmeringsbloggens tøffe skrivebordsbakgrunn med snippets fra ulike språk laster du ned her!

    Abonner via epost

    Om du vil kan du få alle nye blogposter tilsendt til din epost. Abonner nå, det er kjempeenkelt!

    Meta