Kanban – Classes of Service

Jag arbetar just nu med ett IT-förvaltnings-team där vi kör Kanban. Med en Kanban-tavla visualiserar vi arbetet och identifierar potentiella flaskhalsar. Vi arbetar löpande med problem, orsak och förbättring. Vi har den senaste tiden börjat arbeta med klasser på aktiviteter/tjänster.

Vi arbetar frekvent och övervägande med saker som har fasta leveransdatum. Vissa gånger har det stor betydelse för hela verksamheten att vi håller leveransdatum. Andra gånger är det snarare önskvärt från beställaren att det är klart ett visst datum. På en tavla med en stor och dynamisk backlog kan det vara svårt för beställare att prioritera när de måste hålla reda på alla leveransdatum och samtidigt hur viktiga det är att datumet hålls.

Kostnad
Vi tittar på vad kostnaden blir om vi inte levererar till utsatt datum. Kommer det kosta väldigt mycket eller finns det lite utrymme för justering av planerad leverans. För att tydliggöra detta använder vi nedan klassificeringar (Baserade på David J Anderson beskrivning av Classes Of Service) Vi har fritt översatt vissa ord och gjort en anpassning som passar oss.

  • UTFÖR
    Först och främst har en en utför-klass. Aktiviteter som klassas som utför ska påbörjas så fort som möjligt och vi ska lägga så mycket resurser vi behöver för att på snabbast möjliga sätt ta aktiviteten i mål. Vi har inte många men när dom kommer kan det handla om produktionsstörningar som gör att verksamheten inte kan utföra sitt arbete. Dessa rör sig i en prioriterad fil på tavlan. Går ej att planera, måste utföras direkt när dom dyker upp.
  • KRITISKT DATUM
    Sen har vi aktiviteter som har ett kritiskt leveransdatum. Dessa aktiviteter har hög affärspåverkan om vi inte håller leveransen. Dessa aktiviteter är UTFÖR-aktiviteter men med skillnaden att leverandatum är i framtiden. Behöver inte påbörjas direkt. Går att planera.
  • FAST DATUM
    Aktiviteter där affärspåverkan om vi bryter leveransdatumet blir ringa klassas som FAST DATUM. Dessa har ett tydligt leveransdatum men ofta hänger leveransdatumet mer ihop med planerade releaser än stora kostnader för verksamheten. Vi har möjlighet att i värsta fall skjuta på leveransen av dessa en kortare tid.
  • STANDARD
    Detta är aktiviteter som ska göras men det finns inget datum då dom måste vara klara. Alla tjänar på att göra dom så fort som möjligt men dom har inget fast leveransdatum. Det kan till exempel vara förebyggande aktiviteter för att sänka risker eller förenkla/effektivisera arbetet.

Hur får vi standardaktiviteter att bli utförda om det hela tiden beställs fasta och kritiska-datum-aktiviteter? Att sätta begränsning i hur mycket arbete som får pågå samtidigt är ett sätt. När pågående arbete(WIP) begränsas kan detta ske per klass. T.ex. sätter vi WIP-Limit (Begränsningen av hur många aktiviteter som får vara påbörjade samtidigt) olika för de olika klasserna.

exempel:

  • WIP-Limit 1 10% - UTFÖR
  • WIP-Limit 4 40% - KRITISKA DATUM
  • WIP-Limit 4 40% - FAST DATUM
  • WIP-Limit 1 10% - STANDARD

Det innebär att när vi planerar aktiviteter tar vi automatiskt in STANDARD-aktiviteter när WIP-Limit för de övriga är fylld. Vi kan även procentuellt styra hur mycket aktiviteter vi måste arbeta med som är standard genom att justera WIP-Limit. Har vi en stor mängd förbättringsåtgärder som verkligen behöver göras kanske nedan fördelning gör att vi får mer av dessa proaktiva aktiviteter genomförda.

  • WIP-Limit 1 10% - UTFÖR
  • WIP-Limit 2 20% - KRITISKA DATUM
  • WIP-Limit 2 20% - FAST DATUM
  • WIP-Limit 5 50% - STANDARD

Så länge vi är noga med att vår totala arbetsbelastningen ligger justerad/med marginal efter vår förmåga att leverera har vi har möjlighet att göra klart aktiviteter i stället för att bara påbörja nya hela tiden. Då håller vi våra cykel-tider inom förväntade och uppskattade värden. Vi försöker nu noggrant klassificera allt samtidigt som vi diskuterar med beställare och beskriver våra klassers cykel-tider.  Det hoppas vi gör vår leveranskapacitet tydligare och lättare att förstå.

// Mats

Warden

Igår höll jag i internutbildningen på vårt månadsmöte, denna gång berättade jag om autentiseringsramverket Warden och lite kort om Rack.

lunch.athega.se

Lunch, startsida

Matmekka

Under Athega Code Base byggde jag en helt ny version av en webbapplikation som jag för två år sedan byggde i Ruby on Rails och Geokit. Denna gång valde jag att använda ramverket Sinatra, databasen MongoDB (genom Mongomatic) samt att hosta allt på Heroku och MongoHQ.

Vad jag blev mest imponerad över var det inbyggda stödet för geospatial indexing i MongoDB samt hur enkelt det var att jobba med Heroku.

Gränssnittet är utvecklat med hjälp av biblioteket jQuery Mobile och det har visat sig fungera mycket bättre än jQTouch som jag tidigare har använt. Vad jag speciellt gillade var den inbyggda routern.

Mountain.rb – Dag 3

Keynote: Aaron Patterson (@tenderlove) - ”Fear Driven Development”.

Aaron öppnade med en kort presentation om hans professionella liv som utvecklare där han började med Perl 1999 och blev mer eller mindre tvingad att byta till Java 2002 som fortsatte till 2007 då han började använda Ruby.

I och med att Aarons kunskaper kring Ruby ökade, ökade även hans rädsla för att han inte kunde tillräckligt mycket – kanske något många kan relatera till? Detta var i alla fall ämnet för hans tal.

Hans tips för att motverka den känslan är att ”Läsa, Läsa, Läsa” – varje dag, samt vad han gärna kallar ”The Buddy System” eller i en något mer bekant term Pair Programming. I Aarons fall fortsatte han lite längre och gick med i e-post listor för ruby-talk och ruby-core, började gå på massor av konferenser och även undervisa på ett lokalt universitet i Seattle.

En fras som är viktig i Aarons vardag är ”I don’t know”, om man inte förstår något hjälper oftast personen du pratar med att lära dig och hjälpa dig förstå.

Jonathan Dahl (@jondahl) – ”Programming and minimalism: lessons from Orwell and the Clash”.

Jons presentation började med liknelser mellan programmerare och andra professioner. Bland annat:

  • Ingenjörer: ”Not about building things – about building processes” och ”Designing solutions to direct problems”
  • Hantverkare: Att ha rätt verktyg, kunskaper, jobbar i små team och att ha rätt vanor och rutiner.
  • Författare: Skriv, skriv, refaktorera

Presentationen fortsatte med att antal musikdemonstrationer genom tiderna med exempel som Bach, Mozart, Mahler till lite mer nutida pop musik med Beatles och även punk musik. Han ville med dessa exempel demonstrera hur

Hans tips för att bli en bättre programmare är:

  • Konsumera: Läs mycket och inte bara om det du gör
  • Studera – hur skriver andra?
  • Producera – ju mer du skriver desto bättre blir du

Not only is bad writing impossible to understand, it is buggy.

Tech Block #2

Ett Tech Block består av tre kortare presentationer.

Jim Remsick (@jremsikjr) - ”Functionally Equivalent”

Jims tal var något kortare men med ett direkt budskap att förklara fördelarna med funktionell programmering som letade sig ner till dessa tre punkter:

  • Kortfattat (mer koncist)
  • Trådbarhet (Concurrency)
  • Inga buggar* – Går att bevisa matematiskt

Ruby är ett objektorienterat språk men det är inte helt ovanligt att skriva det i funktionell stil. Jim avslutade med en uppmaning

Gå ut och prova något du inte är bekväm med.

CJ Kihlbom (@cjkihlbom) – ”Frontend Testing Frontier”

Det var extra kul att höra CJ tala då han kommer från Göteborg och driver firman Elabs. CJ/Elabs var också initiativtagarna till konferensen Nordic Ruby som Athega sponsrade och vi har bloggat om tidigare.

Elabs har länge lagt ett stort fokus på frontend testning där Elabs, Jonas Nicklas (@jncoward) bland annat har gjort ett par stora bidrag till Ruby commityn via Capybara och Evergreen. Detta var fokus för CJs tal.

CJ pratade om verktyg för integrationstestning:

Capybara är ”driver agnostic” vilket innebär att man kan köra Capybara med hjälp av annan mjukvara som:

JavaScript unit testing är inte så vanligt så CJ tog tillfället att berätta om ett bra alternativ nämligen Jasmine av Pivotal Labs, tillsammans med Evergreen av Jonas Nicklas. En riktigt bra feature med Evergreen är att man kan skriva sina JavaScript tester i CoffeeScript. CoffeeScript är för JavaScript vad HAML/SASS är för HTML/CSS.

Front end testing is NOT hard

Paul Sadauskas (@theamazingrando) – Forms Don’t Have to be this Complicated

Forms Suck

Paul pratade om hur krångliga fomulär kan vara i Rails, framförallt om man har HABTM relationer mellan sina modeller. Eller ännu värre, nästlade formulär.

Paul visade exempel på krångliga formulär och olika lösningar, de inkluderade bland annat att ladda om hela sidan, olika sidor för olika formulärdelar eller att generera direkt från JavaScript.

Paul’s förslag till slut var att använda progressiv förbättring som laddar om sidan om man inte har JavaScript aktiverat men endast hämtar en partial via AJAX om man har JS aktiverat. Denna metod blir dessutom ganska enkel att testa.

Blake Mizerany (@bmizerany) – 1000 ways to kill a Buffalo

Killing Buffalo

Blake är uppfinnaren av Sinatra och jobbar till vardags på Heroku som har en intressant och mycket flexibel Rails

hosting med enkel Add-on arkitektur.

Blakes presentation tillhörde definitivt en av de mer humoristiska. I princip hela presentationen bestod av en serie tecknade figurer (”Ugh” grottmannen, hans familj och en buffel) ritade på en iPad i en rad olika situationer.

Presentationen (som kunde vart en säljpitch för Heroku) ville få oss att fokusera på problem istället för idéer, hur problem i vår vardag driver innovation och utveckling. För att knyta ihop med titeln var Blakes exempel på hur Ugh försökte jaga buffel på stenåldern.

Han pratade om hur man som Ruby on Rails utvecklare kan skriva små problemlösande add-ons till Heroku som andra utvecklare kan dra nytta av (och på så vis tjäna pengar).

Heroku add-ons är små självständiga tjänster som man laddar upp i Heroku som i läggs på en Amazon EC2 instans. EC2 arkitekturen var ett starkt argument eftersom alla Heroku appar ligger i EC2 så är det extremt låg latens mellan instanserna (add-ons/appar), även internationellt och mellan kontinenter.

Lightning talks

Lightning talks är snabba presentationer, man har 5-7 minuter att lära ut något. Det var många snabbpresentationer men en som jag tycker var värd att nämna.

Neal Enssle (@nealenssle) – How to be a better developer in 90 days

Denna presentation var tre bok rekommendationer för alla som vill bli bättre utvecklare (inte bara Ruby/Rails). Tanken är att man ska läsa en bok per månad.

The Passionate Programmer – Chad Fowler

  • Om du inte bryr dig kommer det att märkas.
  • Var en generalist.
  • Gör det du kan – klaga inte, lös problem.
  • Kom ihåg vem du arbetar för – hur mycket värde tillför du?
  • Daglig framgång – vad åstadkom du idag?
  • Är du bättre idag än igår? (n + 1)

Clean Code – Robert C. Martin

  • Semi-objektiv och praktisk.
  • Storleken spelar roll.
  • Gör en sak, på ett enda ställe.
  • Scout-regeln, lämna koden bättre än du hittade den.

Refactoring: Ruby edition – Martin Fowler (m.fl.)

  • Koda för att öka förtroende för gammal kod
  • ”Smells in code” - motverka dålig kod, duplicering, långa funktioner m.m.
  • Självförklarande variabelnamn
  • 60 refaktoreringsmönster

Mountain.rb – Dag 2

Jim Weirich (@jimweirich) – “To Infinity And Beyond

Jim höll i konferensens första keynote, titeln löd  och innehöll allt från Speciella relativitetsteorin, rymdresor och Jims släktskap med folkgruppen Amish.

Our world is stranger than we think

Jim identifierade några områden som går att förbättra:

  • Testning/Expressiveness (Han har börjat jobba på ramverket Given)
  • Parallellism och stöd för flera CPU-kärnor
  • Message passing mellan Ruby VMs

Tech Block #1

Jay McGavren (@jaymcgavren) – “Ruby on Android with Ruboto”

Jay berättade om Ruboto vilket är ett projekt som gör det möjligt att köra Ruby under Android.

Som demonstration körde han en DRb server med Ruby Processing som han sedan fjärrstyrde från sin Androidmobil.

Tydligen har Dalvik en väldigt långsam reflektion, men det är något man aktivt jobbar med att lösa.

Wayne Seguin (@wayneeseguin) – “Do not Bring a Sword to a Gun Fight”

Kortfattat kan man säga att föreläsningen handlade om att välja rätt verktyg för jobbet.

Common sense isnt’t that common

De steg som Wayne gick igenom var:

  • Definiera problemet
  • Förstå problemet
  • Hitta möjliga lösningar på problemet
  • Utvärdera de olika lösningarna
  • Lös problemet

Wayne är kanske mest känd för att ha skapat versionshanteraren RVM.

Tony Arcieri (@bascule) – “Reia: Ruby Evolved”

Tony berättade om Reia (uttalas RAY-uh), vilket är ett Ruby/Python-liknande språk som körs under Erlangs VM (BEAM)

Projektet är i sin linda, men källkoden ligger självklart på GitHub så det är bara att sätta igång och experimentera om man känner att man behöver en något trevligare syntax än vad Erlang erbjuder. En trevlig liten detalj är att en JSON-parser finns inbyggd i språket. Stränghanteringen är även helt OK, men inte direkt snabb.

The fun syntax isn’t that FUN in Erlang

Lunch

Under lunchen snackade jag lite med Joshua Timberman (@jtimberman) från Opscode. De utvecklar verktyget Chef vilket används för deployment och konfiguration av servrar på infrastrukturnivå (Server configuration management). Som alternativ kan man nämna Puppet från Puppet Labs.

Evan Phoenix (@evanphx) – “Staking your Claim in OSS”

Evan gick igenom hur man driver ett lyckat open source-projekt. Fyra av de viktigaste poängerna var:

  • Karma
  • Open source är ett socialt fenomen
  • Kommunicera!
  • Var trevlig och håll en sansad ton, även om du inte vill acceptera vissa patchar.

Fork for LOVE!

Det självklara exempelprojektet var hans eget heltidsprojekt Rubinius. (En implementation av Ruby, Engine Yard sponsrar utvecklingen)

Rubinius

Projektet har många utvecklare då man från början bestämt att det räcker med en enda patch för att få commit-rättigheter. Evan beskrev lätta buggfixar som lågt hängande frukt och en “gateway drug” för nya utvecklare.

De har haft färre än 10 reverts under de tre år som projektet har funnits. Mycket beroende på det sociala kontraktet mellan utvecklarna.

Joe O’Brien (@objo) – “Everyone should know a little about Sales”

Joe berättade om sina erfarenheter som säljare och varför försäljning fått ett så dåligt rykte. Hans poäng var att försäljning handlar om att identifiera behov och hitta lösningar som passar båda parter. (Ganska likt det vi utvecklare gör) Han fortsatte även med att alla anställda är säljande, oavsett yrkesroll.

Peter Jackson (@peteonrails) – “Introduction to Geospatial Programming with GeoRuby, PostGIS, and OpenLayers”

Peter hade en ganska generell genomgång av geospatiell mappning (projektion/geometri) samt en snabb genomgång av projekten GeoRuby, PostGIS och OpenLayers.

Jay Zeschin (@jayzes) – “Avoiding the Seven Year Itch”

Jay från Factory Design Labs avslutade dagens föreläsningar med lite tips för de som sitter fast i långtgående projekt, föråldrade projektmodeller eller legacy-system. Han nämnde även den stora tekniska skuld som (oftast) finns i projekt av den typen.

A project is a relationship

  • Uppbrott
  • Tyst lidande
  • Ta lärdom och gå vidare

Developers have a vast amount of domain knowledge

Jay hade även en lista på vad man bör göra för att rädda ett projekt av denna typ:

  • Snabb återkoppling (test/deploy)
  • Var hänsynslös
  • Spikes regelbundet + En titt på verkligheten
  • Driv engagemang
  • Sälj in fördelarna
  • Bygg upp ett förtroende

Quick Left Hackfest

På kvällen gick vi till Quick Left och fortsatte diskussionerna, kodade lite och käkade pizza.