11.27.06
Snittpriser på konsulttjänster
Apropå priser, jag läste just de senaste snittpriserna för några konsulttjänster: 857 kr/tim för systemutvecklare och 987 kr/tim för It-arkitekt (vad nu det är exakt?). (Källa: Computer Sweden, 2006-11-27)
Statistiken är tagen över hela Sverige. I Stockholm är bristen på konsulter större och priserna borde därför ligga högre. Hm, kanske dags att uppgradera sin prisstrategi…
11.20.06
Havererad konsultmarknad
Konsultpriserna i Stockholm verkar ha havererat. Nyligen hos en konsultmäklare blev jag erbjuden ett ganska avancerat javajobb, med moderna ramverk som Spring och Hibernate. Konsulten skulle inte bara ha lång erfarenhet av dessa tekniker utan skulle även ha goda ledaregenskaper för att i förlängningen kunna ta över ledarrollen för hela teamet. Pris: 600 kr/tim inkl. omkostnader.
Hallå! Skämtar folk!? Ok, bara för att sätta det priset i perspektiv, de flesta konsultbolag (ej fåmansbolag) går aldrig lägre än 650 – 700 kr ens för de enklaste uppdrag och de mest oerfarna konsulterna. Inte ens under bistraste dotcom-krisen gick vi lägre hos min förra arbetsgivare. Det täcker helt enkelt inte lön och omkostnader.
Nästa faktor: Vi har idag brist på duktiga systemutvecklare i Stockholm. Det går ju inte att få tag på folk. Kolla in jobbannonserna i Computer Sweden. Och bristen blir bara större och större.
Om vi jämför med andra branscher då? Tja, en jurist tar normalt 2 000 kr i timmen. En tandläkare ligger något lägre, runt 1 500 kr/tim kan man räkna med. Vi har samma typ av experthjälp, samma utbildningslängd och mer utrustning än en jurist. Möjligen kan man hävda att de ovan nämnda har kortare uppdrag och de bör ligga något högre för att täcka de oundvikliga luckorna mellan uppdrag. Men är en jurist värd över 3 ggr mer!?
Jag tror dock inte det är juristerna som ligger för högt. Ett rykte jag har hört är att en normal bilmekaniker tar ca 800 kr/tim. Inget ont om bilmekaniker, men borde inte vår typ av tjänst betala sig mer? Vi har ju till exempel studieskulder att betala tillbaka.
Det värsta är att priset är en missvisande faktor för en systemutvecklare. Många studier har visat en 5-20 gångers skillnad i produktivitet mellan olika personer. Det viktiga för kunden är ju att man får en person som har en hög ROI, dvs värde för pengarna. En konsult som, försiktigt uttryckt, är tre ggr mer produktiv men som kostar 900 kr/tim jämfört med en klen konsult som tar 600 kr/tim. ”You do the math!”, som Idol-Kishti skulle ha sagt (engelska uttryck är ju såå mycket coolare…).
Vad säger det om en kund som bara tittar på prislappen? Finns det något som talar för att den kunden inte kommer att vara lika kortsynt när det gäller andra saker? Tror någon ensamkonsult där ute att detta verkar vara en klok kund som värdesätter långsiktiga relationer med sina leverantörer?
Vad beror våra låga priser på? Ett problem konsulterna lider av är att vi inte har någon organisation. Vi har ingen skäggig, trovärdig talesman som på norrländska kan lägga ut texten på Aktuellt om hur illa det har blivit och vad de rekommenderade priserna på olika konsulttjänster borde vara.
Så därför, i brist på bättre, uppmanar jag alla kollegor: Vägra uppdrag på dessa premisser!
Fotnot: Jag sökte uppdraget ändå fast angav ett betydligt högre pris. Jag lär inte få det.
11.19.06
Välkommen!
Ok, jag har fullt upp med att vara ”högavlönad” IT-konsult, försöka sköta mitt eget bolag, renovera min lägenhet och flytta in till en ny bostad, träna och ha en glad flickvän, men varför inte? Varför inte börja blogga också!? Tanken har funnits rätt länge i mitt huvud, men nu kunde jag inte motstå längre. Jag är en idiot. Men nu är det påbörjat i alla fall.
Välkommen i alla fall till bloggen! Är man intresserad av systemutveckling, lättrörlig utvecklingsmetodik (Agile), IT-konsult som bransch i Stockholm eller att vara egen företagare i Sverige kan detta vara en blogg som kanske kan ge något. Det är i alla fall de ämnen jag kan se att jag kan skriva om just nu.
Det är så tråkigt med en tom blogg så jag tog de sammanställlningar jag gjorde vid senaste JAOO-konferensen i Danmark (oktober 2006) och la in som de tre första inläggen. De ger en viss bild av vad som är hett inom systemutveckling just nu. Hörs!
11.18.06
Rapport från JAOO, del 3
Tillägg till ”roten ur Pi” från förra gången. Ja, Alistair avsåg faktorn man multiplicerar estimaten med. Samtidigt himlade han med ögonen, viftade med händerna i luften och sa ”Transcendental numbers… flying around…”
Till saken…
Onsdag och sista dagen av konferensen. Man skuttar blixtsnabbt upp med ett stön och släpar sig mot duschen efter gårdagens ehh… thaimat. Idag är det både Ruby och ”Enterprise Open Source” på programmet.
Ruby har fått ett helt eget spår detta år (förra året var rubriken ”Dynamic Languages”) och det handlar inte så mycket om ”Vad är Ruby?” utan snarare ”Hur funkar Ruby med Agile?” eller ”Hur skriver man ett DSL i Ruby?”. Mer praktik, alltså.
Glenn Vanderburg är en erfaren Ruby-utvecklare (ja alltså, så erfaren som man nu kan bli med ett så ungt språk). Han ser ut som en amerikansk hacker, pratar med knarrig röst och rör sig ständigt över scenen. Men jag är beredd att förlåta honom för han är så duktig på att få fram varför han verkligen mumsmumsar Ruby.
Glenn lyfte fram den eleganta, rena syntaxen. Tänk bara på konstruktionen att anrop till en metod både kan skrivas med och utan paranteser runt argumenten. Det gör att när man anropar något som känns som en funktion så kan man använda paranteser, men när man anropar något som känns som ett kommando så kan man utelämna dem. Eller kanske skriva ett domänspecifikt språk som inte ser ut som grekiska för icke-programmerare (mer om det nedan). Det underlättar det agila, nära samarbetet med kunden.
Eller tänk på öppenheten. I Ruby kan man bygga ut det inbyggda (om uttrycket tillåts), dvs själva klasserna och objekten i språket. Saknar dina heltal metoden att fråga om det är ett primtal? Så lägg till det då!
Andra saker Glenn lyfte fram var block (anonyma funktioner), mixins (säkrare än multipelt arv, friare än rena interface), lispkänslan, operatorn ‘===’ samt exekverbara klassdeklarationer (klasser kan assistera med att bygga sig själva!).
Slutsats: Ruby är suveränt för metaprogrammering, dvs ändra själva språket, vilket visar sig vara en helt essentiell egenskap för att bygga agila, sköna ramverk som Rails.
ThoughtWorks (TW, Fowlers företag) har ju investerat ganska mycket tid och pengar på att få ryktet ”bäst på Ruby” och faktiskt kom 3 av 4 talare på Rubyspåret från just TW. Obie Fernandez berättade hur han i några projekt byggt DSL:er (Domain-Specific Languages, en annan stor Fowler-grej) mha Ruby.
Man skiljer på interna DSL:er (sådana som byggs inom andra språk, t.ex. Ruby) och externa (sådana som skapar ett eget språk, t.ex. SQL). Ruby har en ren syntax, vilket inte skrämmer bort användare eller domänexperter. Han berättade hur man inkrementellt bygger upp ett språk som alla kan förstå och hur man sedan använder Rubys metaprogrammeringsdelar för att bygga ut Ruby med de delar som behövdes. Han började ofta med intern, rubybaserad DSL, men om man verkligen ville ha det enkelt för icke-programmerare var man tvungen att skapa ett eget, externt DSL. Snyggt! Borde inte vara så svårt att få det här att hänga ihop med DDD.
Fred George, en intensiv, äldre herre, skulle prata ”Patterns and Idioms in Ruby” men det blev det inte alls. Istället blev det en beskrivning sammanfattad med: Agile + Ruby = True (but different).
Ruby är kraftfullt, utbyggbart och dynamiskt vilket gör att agila arbetssätt blir lite annorlunda än med t.ex. Java. Man får ju ingen kompilatorhjälp, mindre informativa felmeddelanden och man kör typiskt sina enhetstester oftare (5-6 ggr oftare). En hel cykel från ”tag en uppgift” till ”checka in” tar 2-4 tim normalt i Java och 30-60 min med Ruby, menade Fred.
En skön grej han berättade var om ett stort kontrakt på ett pensionssystem som TW hade vunnit. De hade konkurrerat med ett indiskt företag som använde CMM 5 vattenfall. Deras förslag estimerades till 12 mån, $26/tim, 2 MUSD. ThoughtWorks genomförande, med Agile tog 8 mån, innehåll 3 releaser, kostade $88/tim, totalt 1.1 MUSD. Forrester beräknade ROI för det agila projektet till toppnoteringen 94%, för vattenfallsprojektet: beroende eller som ännu större anledning att använda, är väl en fråga om attityd?
Det andra intressanta spåret för mig idag var, som sagt, Open Source. Det viktigaste, och mest välbesökta, föredraget hölls av Rod Johnson, från Interface21, skapare av Spring (ramverket). Spring har ju dragit fram hela IoC-tänkandet, som ju är intimt förknippat med förenklad enhetstestning.
Det sämsta man kan säga om Rods föredrag var att det drog över tiden, men det kunde gott ha fortsatt en timme till vad mig anbelangade. Rod påminde oss om hur landskapet för ”Enterprise Java” såg ut 2003 och hur oerhört annorlunda det ser ut idag. Då var EJB fortfarande den enda lösningen och O/S utsträckte sig ungefär till Struts och Log4J. Idag är det O/S som driver hela javacommunityn, enligt Rod. Men vi är inte i mål ännu, var hans budskap. Det hade han fångat i titeln ”Are we there yet?”, frågan som alla barn ställer i baksätet på bilen.
Rod vill att vi fortsätter kampen för ”bra OO” och bra domänmodell. Han lyfte speciellt fram DDD-boken av Eric Evans. Spring vill dra sitt strå till stacken. Ett problem som jag själv har upplevt är att det ofta är Hibernate eller dylikt O/R-mappningsverktyg som skapar domänobjekten – inte Spring. Då kan heller inte Spring injicera de eventuella tjänster som domänobjekt behöver. Tills nu. En förbättring man har gjort till Spring v 2.0 är att man nu *kan* injicera tjänster i domänobjekt som skapats på annat sätt.
Nästa otroligt coola nyhet är att Spring blir språkagnostiskt, bönor kan skrivas i andra språk än Java. Till att börja med JRuby, Groovy och BeanShell, men fler kommer. Rod gillar utvecklingen med dynamiska språk för vissa tillämpningar och det är klart att man inte ska behöva lämna den mysiga Springmiljön för det.
Till sist lyfte han fram integreringen av aspekter via AspectJ 5. Rod demonstrerade hur överlägset det var jämfört med ”förenklingen” man försökt i EJB 3 via ”EJB Interception”. Pinsamt nog påpekade han att specifikationen faktiskt har ett allvarligt misstag i exempelkoden för detta! Så blir det när en kommitté av produktleverantörer som aldrig gjort detta förut ska specificera hur vi utvecklare ska arbeta med deras produkter. Rod verkar tycka det är roligt att hacka ned på EJB. Och vi flinade med.
Det här var min sista rapport från JAOO. Hoppas någon haft lite behållning. Andra spår som jag inte rapporterat från har varit: Abstractions for Concurrency, Emerging Web Technologies, SOA, .NET Client Apps, DSL, Java Rich Client Dev, Performance, .NET Enterprise Dev, Architecture Quality och Back to the Future (om gamla tekniker som kommer tillbaka eller borde göra det).
Som en anmärkning kan nämnas att företaget InfoQ (med Floyd Marinescu, från The Server-Side) videofilmade många av de viktigaste föredragen och kommer att lägga ut dessa successivt. Just nu finns visst Jeff Sutherlands föredrag från förra året där.
Slutord: Leverera ofta. Gör kunden till din partner. Reflektera
Rapport från JAOO, del 2
Tortilla Flats lär vara Århus bästa mexikanska restaurang (finns det mer än en?). Dit styr vi kosan ikväll. Det ska bli gott med tacos efter det stora loppet: ”IT-run”, tävlingen där 300 nördar och 200 topptränade idrottsmän möts i ädel tävlan.
Detta var dagen då Agile och agilisterna stod i rampljuset. Alistair Cockburn höll (återigen) dagens roligaste föredrag. Han är så skicklig att han trollband en stor publik utan att till synes ha förberett sig nämnvärt.
Alistair utgick från skämtet om mannen som gått vilse i de skottska högländerna. Han möter en bonde och undrar hur han ska komma till Glasgow, varpå bonden svarar: ”If I were goin’ tae Glasgow, I wouldn’t start from here.” Tydligen får han ofta frågor liknande: ”Vi har en byråkratisk process, distribuerad utveckling i 14 länder och en ledning som hatar Agile, hur kan vi komma igång??”. Rätt svar: ”I wouldn’t start from there”.
Föredraget utvecklades som en debatt mellan lägret: Agile har inget att tillföra i Skandinavien för det är ”old news” (ett bisarrt påstående) och ”Ni kan inte köra Agile i Skandinavien” (Alistairs motargument). Storartad underhålling men kan säkert uppfattas som oseriöst.
Det fanns många guldkorn här, men ett jag minns var att han (på skämt) menade att det fanns tre faktorer man kunde använda för att göra utvecklares estimat mer trovärdiga: Pi, Pi2 och roten ur Pi. Pi används när en utvecklare gör grova estimat. Pi2 när ett helt team av olika kompetenser gör grova estimat. Roten ur Pi när en erfaren utvecklare gör finkornig estimering. Hmm, kan ligga något i det.
Fotnot: Alistair hade fått numret 200 i löpartävlingen. Han förklarade dock att nollorna egentligen är bokstaven ‘O’ och det skulle tolkas som att han var ”Too Object-Oriented”.
Jag hade uppfattat en del intresse inför Esther Derbys föreläsning. Hon är en sån där vithårig, amerikansk kvinna som troligen sett ut som 45 år sen hon var 16. Hon talade om organisationskultur och hur den kan underlätta eller försvåra införande av agila metoder. Hon karaktäriserade dem i fyra grundläggande typer: Power, Bureaucratic, Achievement, Relationship (jag orkar inte beskriva dem här). Alla organisationer är givetvis blandningar av alla och Agile var mer eller mindre lätt att införa beroende på vilken typ som dominerade.
Föreläsningen var kanske lite för grundläggande, kände jag. Men förändringshantering är definitivt något att titta närmare på. Preliminära siffror från Scrumgänget indikerar att ca 1/3 av alla införanden av Scrum lyckas. Det känns chockerande lågt. Eller kanske inte? Jag vet inte hur det rankas gentemot andra liknande, genomgripande, organisatoriska förändringar, men siffran i sig bör nog ge upphov till en viss ödmjukhet vid införandeprojekt.
Kevlin Henney är en snabbpratande, populär och rolig kille, men här hade han tyvärr inte mycket nytt att komma med. Kevlin beskriv sitt perspektiv på Agile som ”Agility Cube, 6 faces of Agile”. Dessa var Arbetssätt, Organisation, Arkitektur, Verktyg, Kunskap, Attityd.
Han liknade RAD med ett 100m-lopp. Då var Agile ett 10000m-lopp. Tips: Om du har en organisation som har problem med ordet ”Agile”, ersätt det med ”Sustainable”. Det lär funka lika bra.
Fotnot: Kevlin hade läst en rapport som berättade att andelen UML-modeller i doktorsavhandlingar som var korrekt var… 30%. Det verkar vara som de säger: UML-modeller är antingen korrekta eller användbara.
Roman Pichler höll ett uppskattat föredrag om ett misslyckat införande av en agil process. Vad var problemen? Vad var hans analys efteråt? Det fanns många potentiella svar, men för snabb uppskalning, svagt engagemang från produktägarna och ledning som inte förstod att förändringarna även skulle påverka dem, var tre tunga saker.
Morgonens keynote var överraskande tung, tekniskt sett. Guy Steele, språkmakare på Sun, presenterade sin nya skapelse: Fortress. Tanken med språket är att skapa ett modernt Fortran, för vetenskapliga och ingenjörsmässiga tillämpningar. ”To do for Fortran what Java did for C”. Målet var att skapa ett språk för det som matematiker klottrar på svarta tavlan.
Det var fascinerade att se hur de kunde använda framsteg i teknik (t.ex. högupplösta skärmar) och forskning till att skapa ett modernt språk. Det elegantaste var hur de använde tre notationer: ASCII med wikinotation, Unicode (där symboler översatts till rätt tecken) och matematisk stil, där typsnitt och format var klockren matte. Guy ställde upp beskrivningen av ett benchmarktest på formen av en matematisk formel. Bredvid stod Fortress-programmet i matematisk stil. De var så gott som identiska. Vackert! Fortresskompilatorn finns inte än och runt 2010-2011 trodde han att språket skulle vara moget.
Annat uppsnappat:
- Jeff Sutherlands föreläsning om Scrum var kompromisslös och full av metrics om hur bra Scrum är. ”Man vågade inte ställa frågor för man var rädd för att han skulle hoppa på en”, var en kommentar jag hörde. Han menade att om man inte får en produktivitetsökning på minst 6 ggr när man inför Scrum har man misslyckats. Hårt.
- Inlärning via flashanimeringar funkar som väntat; urdåligt! Sessionen Extreme Visual Learning var snarare Extreme Visual Confusion.
- Allas vår töntvän 118N har nu fått sällskap av L10N (localization, hyfsat känd) och A11Y (accessability, kanske mer okänd). Cheese, Louise…
Löpartävlingen då. Jo, det flöt på rätt bra för undertecknad. Jag hade kaxigt meddelat Dr Cockburn att jag skulle slå honom och tursamt nog gjorde jag det. För intresserade, Alistair sprang 7,5 km på ca 40 min. Sen blev det bastu och avgång mot den mexikanska topprestaurangen… som stängde kl 21 på en vardag . Vi kom dit kl 21.10… Så kan det gå. Men vi är ju i Danmark, herregud. Det finns ju alltid thaimat.