Je Monoliet naar Services Ombouwen

In het SDN-magazine zie je veel auteurs vertellen over microservices, maar ook op onze SDN-events of andere conferenties zijn er veel sessies over. Ze vertellen dan altijd dat het belangrijk is om naar microservices over te stappen, want daarmee wordt het leven een stuk eenvoudiger. De voorbeelden die ze geven zijn dat altijd de standaardvoorbeelden van een product-order systeem of ze komen met voorbeelden vanuit een greenfield situatie. De presentaties gaan bijna altijd uit van het niet aanwezig zijn van legacy code of legacy systemen. Maar onze werkelijkheid is vaak veel weerbarstiger.

Veel bedrijven hebben een monoliet en een monoliet is niet iets waar je voor hoeft te schamen. Er zijn maar weinig omgevingen waar niet een vorm van monolithische code of omgeving is ontstaan. Zelfs bij startups begint het altijd met een redelijk puristische manier van ontwikkelen, maar na enkele weken/maanden wint de tijdsdruk van de schoonheid en raakt de software langzaamaan vervuild. Op zichzelf hoeft dat ook helemaal niet erg te zijn. Mits je tijdig refactor-slagen uitvoert en bij iedere volgende aanpassing/verbetering/bugfix je code weer beter achterlaat (incheckt) dan dat je hem gevonden hebt: de Boyscout rule, laat het kampeerterrein schoon achter voor de volgende gebruiker en liefs nog iets schoner. Ook hier voer je dus verbeteringen uit stapje voor stapje, hapje voor hapje. Ik ben een groot voorstander van “Make-it-work-then-make-it-better-then-make-it-pretty”.

“Make it work then make it better then make it pretty”

Want hoe migreer je vanuit een bestaande omgeving naar een service georiënteerde omgeving of microservices. Het antwoord is heel simpel zoals je ook een olifant eet, hapje voor hapje. “Haha wat leuk, neem je ons niet serieus of zo?”. Jazeker wel en ik zal jullie uitleggen hoe ik dat bedoel.

Monoliet naar Services

Door de conferenties en artikelen (waar Microservice behoorlijk gehypet worden) hebben veel bedrijven de wens om over te stappen naar een service georienteerde architectuur en bij voorkeur naar een Microservices architectuur. Maar natuurlijk moet de winkel wel open blijven en dat betekent dat support en bigfixes wel gewoon moeten door blijven gaan. Tenslotte betalen de huidige klanten de rekeningen en organisaties hebben niet de mogelijkheid om voor een paar maanden of soms jaren onder een steen te kruipen om orde op zaken te stellen. Natuurlijk kan dat niet, tenslotte zijn klanten de reden waarom het bedrijf bestaat en zij betalen niet voor een product dat niet verbetert, wordt onderhouden en gewoon stilstaat. Ander risico is dat er een andere partij opstaat en jouw plekje inneemt.

Ik denk ook niet dat je dicht hoeft om tijdens het rijden een wiel te verwisselen. Alleen moet je dan als bedrijf wel een behoorlijke tijd uittrekken om te migreren. Je zult dat wel dubbel onderhoud en dubbele code moeten accepteren. Wat vaak in jaren is opgebouwd, is niet in een paar weken terug te draaien. En doordat je niet alles vanaf de grond opnieuw bouwt, zul je meerdere refactor slagen moeten maken en Projects/files/classes/code meerdere malen zult aanpassen. Het is pas af als jullie puntje op de horizon gehaald is.

Ja, dat is niet exclusief voor Service Oriëntatie! Klopt, want het begint bij het ontrafelen van de kluwen van code en zorgen dat alle onbedoelde maar ingeslopen afhankelijkheden weer ongedaan gemaakt worden. Pas als je de basis op orde hebt, dan kun je de stap voorwaarts maken en nieuwe dingen toevoegen. Ook microservices (hoe hip ook) zijn niet perse nodig. Wel wil je dat verantwoordelijkheden goed verdeeld zijn over de verschillende servers, computer systemen of code.

Eerst moeten we voor ons zelf bepalen, wat de reden is om te migreren naar Service Oriëntatie. Wat zijn de huidige uitdagingen met je applicatie, platform of service? Is het dat het testen niet meer te doen is? Of dat het aanpassen van code op de ene plek betekent dat er op een andere plek code / functionaliteit omvalt? Er te veel afhankelijkheden tussen verschillende onderdelen bestaan? Of dat het deployen een probleem is geworden en gewoon te lang duurt? Of wil de organisatie van het ASP (Application Serivice Provider) model af en omvormen naar overstappen naar een SAAS (Software As A Service) model? Is de applicatie, service of platform eigenlijk niet geschikt voor multi users omgeving? Of is je oplossing niet of nauwlijks in staat op te schalen bij meer gebruik? Is in het algemeen reageren op gewijzigde wensen van je klanten gewoon lastig, omdat er te vlug andere functionaliteit omvalt.

Belangrijk is, dat de reden niet moet zijn omdat iedereen het doet of dat services of erger microservices zo belangrijk lijken in de business. Op zichtzelf hoeft er niks mis te zijn aan een monoliet. Er moeten andere redenen zijn om aan te passen. Ik heb liever een goede monoliet dan een slecht uitgevoerde Service Oriëntatie. Technology is een middel en moet nooit een doel op zichzelf zijn.

Technology is een middel en niet een doel

De formele beschrijving van een Service Orientation Architecture service: “A SOA service is a discrete unit of functionality that can be accessed remotely and acted upon and updated independently, such as retrieving a credit card statement online. SOA is also intended to be independent of vendors, products and technologies.”. Microservices zijn opzichzelf niet heel anders, maar waar we de definitie van een op zichzelf staande eenheid van functionaliteit wel iets strakker wordt neergezet. In een minder goed uitgevoerde Service Oriëntatie omgevingen zijn de services vaak te klein, waardoor de services elkaar aanroepen en eigenlijk niet meer los van elkaar gebruikt worden. Dat resulteert meestal in een Chatty systeem, waarbij services elkaar herhaaldelijk aanroepen en allesbehalve onafhankelijk van elkaar zijn. Iedere aanroep van een service levert weer vertraging op en als het een losse service is. Soms zijn de services dan ook nog eens zo gebouwd, dat ze niet verwachten dat de aanroepende service stuk of niet aanwezig is. En dat gebeurt juist als het zo losgekoppeld is. Waarmee de “updated independently” uit de definitie eigenlijk niet meer kan, andere services rekenen op elkaar en feitelijk heb je dan een monoliet in stukjes.

Belangrijkste in de definitie is volgens mij ook op zichzelf staande functionaliteit. Er staat nergens hoe groot de “op zichzelf staande functionaliteit” moet zijn. Wat er wel staat, alles wat de service nodig heeft om volledig autonoom te kunnen werken onafhankelijk van de rest van de systemen. Even heel gechargeerd, een monoliet is in deze beschrijving dus ook een goede service. Een monoliet herbergt misschien te veel verschillende functionaliteiten. Zoals een ordersysteem, een productsysteem, een klantsysteem etc. Ik schrijf expliciet systeem om aan te geven dat het losse onderdelen moeten zijn. Maar het ordersysteem heeft informatie nodig van de producten en de klanten! Ja, dat klopt, maar het ordersysteem zal niet het adres van de klant updaten in de database. Ieder systeem heeft zijn eigen verantwoordelijkheden. Het ordersysteem gebruikt de data van het klantsysteem. Verandert het adres in het ordersysteem? Dan maakt het ordersysteem een werkbon voor het klantsysteem om dit aan te passen. Voor hier gaat het te ver om hier dieper op in te gaan, lees het artikel van Dennis van der Stelt uit ons vorige magazine eens over het Starbucks model. Vuistregel is, maak je functionaliteit niet te klein en let goed op welke verantwoordelijkheden de functionaliteit heeft. Services zijn ook een middel en niet een doel. Keep it simple, maar om met Einstein te spreken; maak het niet simpeler dan dat.

Terug naar ons initiële probleem. We zien de monoliet als een samengeklonterde functionaliteit, maar feitelijk bestaat deze toch ook uit losse stukken en op zichzelf staande functionaliteit. Echter de functionaliteit is alleen te veel op de achtergrond geraakt door gebruik van technology. Vaak zijn databases te ver uitgenormaliseerd (8st normaalvorm) of is object Oriëntatie te strict doorgevoerd. Heel vaak is door technologische overload de functionaliteit teveel door elkaar heen gaan lopen. De technologie geeft de mogelijkheid en de druk om snel nieuwe functionaliteit er uit te sturen neemt dat ook toe.

Maar als je het goed doet, dan kun je het best weer naar zijn oorsprong ontrafelen. Je zult dan strict bezig moeten zijn met de functionaliteit en de technologie weer een middel laten zijn.

Maak een vertical slice van je functionaliteit

Laagjes zoals in een taart

De volgende stappen kunnen dan gedaan worden. Bepaal een stuk functionalitieit dat op zichzelf staat of had moeten staan. Beschrijf het dan van de user interface tot aan de kern (de dataopslag of de servicebus of wat ook het eindpunt is). En zodra je een afhankelijkheid spot, bedenk dan steeds of deze afhankelijkheid noodzakelijk is en of er andere oplossingen zijn. Als er geen eindpunt is, dan is er misschien een uitdaging met de functionaliteit zelf. Poplulair gezegd maak een verticale doorsnede (vertical slice) van je applicatie. Zie het als de taart met die vele gekleurde laagjes, beschrijf alles van dat ene stuk uitgesneden staart en alleen wat bij dat stuk hoort. Bouw dan dat stuk opnieuw en hergebruik zo min mogelijk eerdere code. Anders word je te vlug weer in de rabbithole getrokken. Bereid je voor op het herhaaldelijk refactoren van de code. Er lijkt geen einde aan te komen, maar uiteindelijk zal het beter worden.

Vertical Slices

Deze strategie maakt het ook mogelijk om de oude flow van de functionaliteit nog beschikbaar te houden en de nieuwe er echt los van te laten. Uiteindelijk is dat ook je doel in Service Oriëntatie. Als je dan volledig tevreden bent met de nieuwe implementatie, dan zet je de wissel om.

Soms kan de aanpassing ook aan de buitenkant gemaakt worden, waardoor bepaalde werkvoorraad niet eens je platform/applicatie of omgeving bereikt. Controle aan de deur. Beschrijf deze functionaliteit zo onafhankelijk mogelijk en als je of het team de behoefte voelt om andere functionaliteit toe te voegen of samen te voegen, stel dan de waarom vraag zo vaak mogelijk. Als je dan nog steeds niet zonder kunt, dan moet je het samenvoegen niet laten.

Maar iedere andere wijziging verstoort het proces. Dus probeer niet gelijk ook volledig nieuwe functionaliteit toe te voegen of bestaande functionaliteit volledig te veranderen. Niet omdat het niet zou kunnen, maar als we technologie of functionaliteit wijzigingen gaan doorvoeren dan worden we afgeleid en wij mensen kunnen helaas niet teveel multitasken. Het onafhankelijk en losgeweken van het stukje functionaliteit is al moeilijk genoeg. Daarom moet je de eenheid ook zo klein mogelijk maken. Dat voorkomt dat de rest van de applicatie/omgeving op slot zit voor aanpassingen of wijzigingen.

Het is te doen, maar je zult wel heel gericht door moeten gaan en je niet laten afleiden. En als je eenmaal begonnen ben, dan kun je eigenlijk niet meer stoppen. Meer dan eens zullen verschillende stukken software door je handen gaan en meer dan eens zal je code aanpassen om deze later weer ongedaan te maken. Dat geeft niet, je doel is op zichzelf staande stukken software/services. Niets is onmogelijk. Maar laat technologie niet de reden zijn! En blijf refactoren.

Tesla Roadtrip

Hoe kan zo’n stuk (https://www.telegraaf.nl/nieuws/1456750301/veel-haken-en-ogen-aan-trip-met-stekkerauto) in de krant komen? Was de redacteur niet wakker? “Om de 200 kilometer ergens een paar uur gaan staan kuchen bij een oplaadpunt achter tien andere zielige Teslarijders?” “niet harder rijden dan 90 kilometer per uur, geen airco aan en niet te veel bagage. Anders trek je zo die accu leeg.” “Daar moeten we 50 minuten opladen”

Ik ben in het bezit van een Tesla Model 3 en eind juli zijn we er mee naar Disneyland Parijs gereden. Dat is voor ons een afstand van 523 km. Geen 1200 zoals in het artikel, maar het principe is hetzelfde. Als je in de auto de route intoets dan berekend hij zelf waar en wanneer je moet laden. En dat doet hij erg goed. Het handige van het rijden met een Tesla is, dat Tesla ook een Europees netwerk snellaad-palen (superchargers) heeft. Als de auto aan een dergelijke paal gehangen wordt, dan duurt het gemiddeld 30-40 minuten om tot 90% te laden. Dit is een beetje afhankelijk van hoe leeg je bent en hoe vol je wilt. De laatste 10% duren meestal het langs. Tesla rijders zullen zeggen, je hebt maximaal 80-90% nodig en moet niet leger dan 10% gaan. De navigatie zal altijd aangeven hoeveel je moet laden en dat is bijna nooit volledig vol.

Oke Marcel, dat klinkt leuk 90% in 40 minuten, maar wat betekent 90%. Een Tesla Model long range AWD kan ongeveer 490 km afleggen met volle batterijen. Als ik de auto tot 90% vol laad, dan heb ik meestal 445 of 446 km bereik. Voor mijn woon-werk verkeer betekent dat gemiddeld eens in de 2-3 dagen laden bij een snellader. Als ik hem aan een ander lader hang, bijvoorbeeld bij ons gemeentehuis, dan duurt het vaak iets langer om te laden. Meestal zo rond de 6-7 uur, maar dat is meestal ’s nachts en dan zit ik niet te wachten op het laden.

Voor de trip naar Disneyland Parijs betekent dat dus dat ik eenmaal hoef te laden, als ik 90% vol ben bij vertrek. Voor mijn route zou laden in Kortrijk voor 30 minuten voldoende moeten zijn en kom ik in Disneyland aan met 10% lading. 10% van 500 km is ongeveer 50 km. De eerste Tesla supercharger bij Disneyland ligt in die range. Niks aan de hand.

Nu ben ik soms wat conservatiever en wilde ik aan het eind iets meer range (armslag) overhouden. Dus moet je zelf wat plannen. Maar daar zijn handige tools en websites voor. Bijvoorbeeld https://abetterrouteplanner.com. Daar kun je aangeven welke elektrische auto je hebt en je voorwaarden (minimum lading bij de charger en minimum lading bij de eindbestemming, snelheid, wind etc). De enige variabelen die ik aangepast heb zijn de drempels bij een charger (20%) en aan het eind (50%). Dan blijk ik 3 keer te moeten voor 44 minuten en ik ben nooit tot 90% vol, wat positief van invloed is op de laadsnelheid.

Met deze waarden zijn we weggegaan. We hebben veel op de autopilot gereden en niet overdreven aan de snelheid gehouden. En het ging heerlijk relaxt en eenvoudig. We hebben een keer een supercharger in Belgie gehad met veel Nederlandse Tesla’s aan de palen, maar er was nog plek. Wat je natuurlijk altijd tegen kunt komen zijn defecte palen. Daar doe je niets aan en dat is een van de redenen waarom ik wat variabelen heb verhoogd. In Senlis bij een Ibis motel zit een McDonalds en daar wilde we wat eten. Het bestellen en eten duurde langer dan het laden van de auto.

Op de terugweg waren we nog relaxer. We kende de tussenpunten inmiddels en hadden nog meer vertrouwen in de geschatte afstand. Bij de supercharger in Lokeren duurde de koffie langer dan het laden en we waren daar behoorlijk leeg (20% nog vol).

Nogmaals ik snap niet hoe de mevrouw van het stuk zo’n slechte ervaring heeft kunnen hebben. Als ze al iets negatiefs over elektrisch rijden had willen melden, dan had ze ander slachtoffer moeten nemen. Er zijn meerdere elektrisch auto’s beschikbaar in Nederland, zoals Renault, Hyundai, Kia en BMW i3. Deze auto hebben allemaal een maximaal bereik van ongeveer 200-250 kilometer.

Wij hebben thuis ook nog een BMW i3. Mijn woon-werk afstand is gelijk aan die van mijn vrouw, maar ik hoef zoals gezegd ongeveer iedere 2 dagen pas te laden. Zij moet elke dag laden. Er is wel range over, maar niet genoeg voor een enkele reis. In de winter al helemaal niet. Disclaimer, mijn auto moet zich in de winter nog bewijzen hoor.

Als ik via https://abetterrouteplanner.com dezelfde trip bereken voor de BMW i3, dan kan ik inderdaad een slechtere ervaring beschrijven. Met dezelfde parameters (20% aankomen bij een charger en 50% op de eindbestemming), dan moeten we 5 keer laden voor bijna 2 uur. Bijna elke laadactie is tot over de 90%, op bepaalde delen mogen we niet sneller rijden dan 100 km/uur en zelfs een stuk maar 80 km/uur. De individuele laadacties duren nog steeds niet heel lang. Laadpalen van maatschappijen als FastNed, Allego etc zijn lekker snel en de accu’s van de BMW niet heel groot.

Elektrisch rijden is inderdaad een andere mindset. Je laadt als je kan, niet als je moet en je laadt genoeg maar niet teveel. En komt meer planning bij kijken. Laden kost inderdaad meer tijd, maar die tijd kun je plannen zodat deze samen valt met andere activiteiten. We gaan ook niet voor de wasmachine of vaatwasser zitten wachten tot die klaar is.

Bijna alle beweringen in het artikel zijn niet waar. Je zult nooit verrast worden door bezette laadpalen. Tesla’s kunnen altijd verder dan 200 km, zelfs de short range variant. 90 is helemaal niet de optimale snelheid, dat zou 110 moeten zijn en dit is bij een benzine auto eigenlijk niet anders. 50 minuten laden tot 100% is niet altijd nodig, maar ook niet goed voor de batterij. Dat laatste geldt overigens ook voor laptops, telefoons, tablets, kortom alles met accu’s.

Maar ja, het echte verhaal trekt geen lezers en verkoopt geen kranten.

Cloud Strategie

Er wordt de laatste tijd erg veel gesproken over het opstellen van Cloud Strategieën bij bedrijven. Maar gaat het daadwerkelijk om Cloud strategieën of gaat het om een breder omvattende IT strategie waar Cloud een implementatie vorm van is?

Voor een bredere IT strategie is het volgens mij belangrijk om te bepalen wat de core business is en welke processen ondersteunend zijn. De voorwaarden en eisen van deze processen bepalen welke software ondersteuning kunnen bieden. Mogelijk is out-of-the-box software  (OOB) of software as a service (SAAS) een oplossing. Als dan blijkt dat er geen software op de markt is om de processen te ondersteunen, dan is er een optie om de software zelf te ontwikkelen. Dit inzicht bepaalt dan waar de inspanningen moeten liggen. Voor de OOB software of zelfgemaakte software heb je dan een Cloud strategie nodig.

Maar is het dan een Cloud strategie of gewoon een implementatie strategie? Bijvoorbeeld OOB software stelt bepaalde eisen aan de onderliggende infrastructuur. De frequentie waarmee de software pieken en dalen van gebruik zal ondergaan, gecombineerd met ondersteuning van de software voor het opvangen van deze pieken, met deze parameters kunnen dan de kostverschillen tussen eigen hosting of een Cloud omgeving bepaald worden. Hierbij dienen dan wel de non functionele parameters voor o.a. beheer, back-ups en monitoring meegenomen worden. Applicatie beheer moet ook een plekje krijgen in het kostenplaatje.

Als de ondersteunende software zelf ontwikkelt wordt, dan gelden dezelfde afwegingen als bij iedere implementatie. Welke architectuur, welke technieken en welke diensten kunnen we hergebruiken. Een strategie hier is dan buy-before-build, of populairder kunnen we gebruik maken van PAAS (platform-as-a-service diensten).

Welke deployment omgeving is mede afhankelijk van de gebruikte technieken of platform onderdelen. Daarbij komt ook de vraag, ontwikkelen we in eigen beheer of besteden we ontwikkeling uit? In het laatste geval kunnen we ook bepalen of de ontwikkelpartner wellicht de hosting en beheer over kan nemen.

Een Cloud strategie zou onderdeel kunnen zijn van de IT strategie. Cloud is een implementatie methode en behelst het geheel van on premise private Clouds tot public Clouds. In welke Cloud de software optimaal en flexibel landt, is helemaal afhankelijk van de requirements.

Op basis van een matrix met de requirements en de applicatie behoefte, zou je met een beslisboom redelijk kunnen bepalen waar de keuzes uit bestaan. De IT strategie zal dan zijn SAAS versus eigen hosting. Voor software ontwikkeling is de Cloud strategie dan PAAS versus IAAS of buy-before-build.

Eigenlijk is iedereen een Startup!

In het weekend van 13-14 mei was ik bij een Startup weekend van RockStart in Moldova. In twee maanden tijd worden startups begeleid in het geheel rondom hun product/dienst/service. Ze moeten een aantal milestones halen met als doel in een accelerator programma te komen en funding van investors te krijgen.

De twee maanden is verdeeld in verschillende onderdelen. Het weekend dat ik mentor/presentator was, ging over Global Market potential. Wij (Remi, Eduard en ik) deden sessies over Global Market, Things to love as Entrepreneur, Exponential Organisations, Agile and what is a MVP en Mapping Competitors. De startups gingen hiermee met workshops aan het werk. De workshops bestonden onder andere uit het doen van een Pecha Kucha en een Competitor mapping oefening. Op de zaterdag avond was er een persoonlijk Sad Founders story, de ups en downs van een entrepeneur door Remi.

De sessies en oefeningen werden allemaal gretig gevolgd en uitgevoerd. Er ontstonden leuke discussies en tussendoor werden er erg veel goede vragen gesteld. Erg leuk om te zien dat de theorie en oefeningen bij de startups daadwerkelijk veranderingen opleverde, zowel in hun houding als in aanpassingen aan hun initiële idee. Nog belangrijker ze waren allemaal geïnteresseerd en behulpzaam bij elkaars uitdagingen.

De sessie over MVP (Minimal Viable Product of liever Experiment) leverde een mooie interactieve sessies op en leverde veel aha momenten op. Tijdens de sessie over “Things to love as Entrepreneur” vertelde iedere founder wat hij/zij leuk vond en wat niet. Een hele levendige en interactieve discussie over de pains and gains van een startup. En het kwam overeen met de lijst van items die wij hadden opgesteld. Het panel van Remi, Eduard en mijzelf konden verschillende tips en tricks meegegeven om nog effectiever te worden.

De Pecha Kucha werd als erg lastig ervaren, maar wel als erg leerzaam. Een Pecha Kucha is een presentatie die bestaat uit 20 slides van elk 20 seconden. De slides bevatten geen (of nauwelijks) tekst en alleen een visual, beetje ala Steve Jobs altijd deed. 20 slides lijkt dan erg veel, maar de tijdsdruk van 20 seconden levert dan weer hoge druk op. Belangrijk bij een Pecha Kucha is om je te focussen op je verhaal. Daarna plaatjes te zoeken die je verhaal ondersteunen en je geheugensteuntjes geven voor het verhaal. De plaatjes en de slides vullen elkaar aan en leiden het verhaal niet. Veel van de startups vonden dat lastig. Bijna iedereen stelde zijn team voor en het was lastig om 20 seconden iets te vertellen over ieder lid. Het vergt het vermogen om compact te vertellen wat je product, dienst of service doet.

Tijdens de Competitor mapping oefening (gebaseerd op Red Ocean/Blue Ocean) keken veel van de startups voor het eerst echt naar hun concurrenten. Ze hebben wel een idee van competitie, maar nu gingen ze een stuk dieper. Tijdens deze oefening moesten ze een slide maken met de specifieke functionaliteiten van hun idee. Hun slide werd gepresenteerd en beoordeeld door iedereen. Dat leverde voor sommige eye-opening momenten op.

Ik vond het een heel gaaf, interessant en (ook voor mezelf) leerzaam weekend. Gaaf om te zien hoe de startups met de input omgingen en hun eigen initiële ideeën pivotten. Mooi was ook om te zien hoe verliefd en trots de startups waren op hun ideeën. Heerlijk!

Maar waarom vind deze begeleiding wel plaats bij startups en niet bij bestaande bedrijven. En ik bedoel dan niet alleen bedrijven die een product verkopen, maar die intern producten of diensten ontwikkelen. Veel bedrijven zie ik toch nog vaak worstelen met MVP, Agile en Competitors mapping.

Want is niet iedereen in beginsel een Startup?

Recruitement Tips

Op verschillende media lees ik vaak klachten over recruiters en hoe zij omgaan met CV’s. Maar wellicht is een beetje zelfreflectie ook wel op zijn plaats. Vanuit de aanbiedende kant, maar ook vanuit de vragende kant kunnen we het makkelijker maken. Ik pretendeer niet het beter te weten, maar mijn zelfreflectie levert dit op.

In mijn vorige rol was ik in de positie om freelancers in te huren, de vragende kant dus. Op het moment dat je een dergelijke vraag dan uit zet in de markt, krijg je inderdaad verschillende CV’s opgestuurd. Het is lastig om dergelijke CV’s op waarde te schatten. Ze bevatten allemaal generieke informatie over de potentiële opdrachtnemer. Ik weet dat veel recruiters de CV in eerste instantie anonimiseren, maar als je interesse hebt dan sturen ze de juiste versie.

Maar als ik eerlijk ben, was onze uitvraag naar de tijdelijke capaciteit niet heel smart geformuleerd. De opdrachtomschrijving bestond uit een aaneenschakeling van algemeenheden en technische vaardigheden. De complexiteit van de opdracht en de functionele requirements stonden niet uitvoerig beschreven. De opdracht was als een vacature opgesteld. Dan is het niet zo gek, dat je heel algemene CV’s aangeboden krijgt.

Maar ook algemene CV’s kunnen meer waarde bevatten; Een beschrijvend stukje wie je bent en wat je wilt. Dan kun je aanvullen met specifieke ervaringen en kennis. Ik heb mensen afgewezen op basis van hun CV omdat ik oprecht dacht dat ze bij ons erg ongelukkig zouden worden en botweg niet de juiste competenties leken te hebben.

Als ik iemand op gesprek liet komen, dan deed ik wel onderzoek met mijn vrienden Google, Bing en Linkedin om iets meer te weten te komen over de persoon. Soms vind je dan ook blogs of andere uitingen van de persoon op het internet. Kleeft ook wel een gevaar aan, je zult het dus nooit als enige bron kunnen gebruiken. Maar daarvoor is dan ook een gesprek. Het is als opdrachtnemer dan wel van belang om je Linkedin profiel op orde te hebben.

Nu zit ik weer aan de andere kant, de aanbiedende kant. Ik heb mijn CV her en der neergelegd, in de hoop dat de droomopdracht er tussen gaat zitten. In mijn CV hadden korte en lange klussen ogenschijnlijk hetzelfde gewicht, opdrachtgevers zouden daaruit kunnen opmaken dat ik heel veel korte klusjes heb gehad. Wat tot heel veel speculaties en verkeerde conclusies kan leiden.

Via de verschillende vacaturesites heb ik inmiddels een aantal keren gereageerd op advertenties. Met alle respect ook hier zijn niet alle opdrachten smart geformuleerd. De meeste advertenties zijn zelfs opgesteld, alsof ze vast personeel zoeken. Het een sluit het ander uit, lijkt mij. Als ik een loodgieter inhuur, dan vertel ik hem ook heel specifiek waarom ik hem inhuur en wat ik van hem/haar verwacht. Ik reken op een langdurige relatie, maar niet permanent bij mij in huis. Bij freelance advertentie voor een bepaalde tijd (met opties tot verlengen) zouden ook zo opgesteld moeten worden. Welke expertise verwacht je van de tijdelijke arbeidskracht. En wat houdt de tijdelijk opdracht in, sugarcoating van de opdracht is niet nodig. En deze duidelijkheid helpt ook weer voor de wet DBA.

Zo zou je dan ook het intakegesprek moeten voeren. Je wilt als opdrachtgever helemaal niet weten welke ambities de freelancer allemaal heeft of waar hij over een x periode wil staan. Jij hebt een opdracht of een gat in de kennis of capaciteitsgebrek om iets uit te voeren of in te vullen. Je wilt weten of hij die kennis bezit, of hij de klus kan uitvoeren en de vastgestelde tijd zal blijven. Als het probleem is opgelost, dan kan de tijdelijk kracht weer gaan. Als je het op deze manier insteekt, dan weet je beide waar je aan toe bent en waar je of op afgerekend te wordten.

En als je dat gesprek voert, doe dan ook een beetje onderzoek naar de persoon. In deze digitale tijd laten we allemaal meer digitale voetafdrukken achter dan soms wenselijk, maar alleen iemands linkedin profiel bekijken is vaak al genoeg (wie kent hij, wat leest hij etc.). Sommige vragen hoef je dan niet meer te stellen en kun je beide tot essentie van het gesprek komen. Het inhuren van tijdelijke krachten of vast personeel is gewoon werk en kost ook gewoon tijd. Tijd die je terugverdiend als je de juiste persoon hebt in gehuurd. Soms ga je harder door even stil te staan.

Samengevat heb ik voor mezelf de volgende tips. Als aanbieder/opdrachtnemer: zorg dat je CV iets van jezelf bevat (je valt dan toch op als je CV anoniem gemaakt is) en zorg dat je Linkedin profiel in elk geval relevant en up-to-date is. Voor de vragende kant/opdrachtgever de tips: formuleer een heldere, smart opdracht en bevraag de freelancer daarop uit, en doe een beetje backchecking van de kandidaat en maak tijd. Voor de freelance recruiters, jullie zouden kunnen helpen de aanvragers/de aanbieders de opdracht helder en smart te krijgen, jullie hebben er baat bij dat de juiste informatie wordt gedeeld. Vraag en aanbod komen dan beter bij elkaar.

Oja en als je dan op iemand zijn Linkedin pagina kijkt, doe dat dan met open vizier en niet annoniem. Ik vind het leuk om te zien wie er naar mijn profiel kijkt, en zeker als dat de gesprekspartner van het intakegesprek is.

My two cents.

Boekentip(s)

Naast het delen van kennis lees ik ook graag blogs, artikelen, luisterboeken en boeken. En ik ben vooral een fan van Audioboeken. Afgelopen week heb ik een paar korte boeken gelezen in dezelfde trant als The Goal van Eliyahu M. Goldratt en The Phoenix Project van Kevin Behr, George Spafford, Gene Kim. Deze boeken beschrijven allemaal een serieus Management / IT onderwerp als een roman. Ik vind dat een elegante oplossing, vaak blijft een dergelijk net iets beter hangen dan een academisch boek. Deze manier van romans schrijven is ook erg goed voor het hogere management van bedrijven om toch technische oplossingen te snappen.

Het eerste boek was van InfoSupport (Raimond Brookman, Ronald Bosma, Wiljag Denekamp, Wim van Gool, Sander Molenkamp, Rogier Schrama en Edwin van Wijk met hulp van Freek Jansen en Martijn Vet). Een CIO van een ziekenhuis gaat naar een Gartner conferentie en in het vliegtuig discuseert hij met de CIO van een vliegmaatschappij. De een heeft het probleem dat de ander heeft opgelost. In het verhaal komen oa microservices, CQRS aan de orde. Een aanrader om de mythe rond Microservices eens eenvoudig uitgelegd te krijgen. Goed gedaan!

Meer informatie: Vlucht WS7102 – fast forward naar web-scale architectuur
http://wsa.infosupport.com

Danny Burlage van Wortell heeft een boek geschreven over Digitale Transformatie. Een op leeftijd zijnde directeur van een Arbodienst krijgt een bod van een concurrerende Arbodienst Smiles. Deze concurrent was eerder kandidaat over overname door de ander. Het business model van Smiles is volledig gebasseerd op digitale dienstverlening en vertrouwen. Door het boek heen krijg de directeur meer insight van Smiles en snapt hij beter waarom ze zo zijn. Grappige van dit boek is dat je volledig meegenomen wordt in de reis. Erg leuk gedaan!

Meer informatie: SMILES: Een verhaal over Digitale Transformatie
http://info.wortell.nl/ebook_smiles_digitaletransformatie

Veel leesplezier!

===

De format van beide boeken is licht afgeleid van deze boeken.

The Goal: A Process of Ongoing Improvement

https://www.amazon.de/Goal-Process-Ongoing-Improvement/dp/0884271781
http://www.audible.com/pd/Business/The-Goal-Audiobook/B00IFG88SM (Audiobook)

The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win

https://www.amazon.de/Phoenix-Project-DevOps-Helping-Business/dp/0988262509
http://www.audible.com/pd/Business/The-Phoenix-Project-Audiobook/B00VAZZY32 (Audiobook)

Macbook Pro Touchbar

Vol verwachting zat iedere Apple Fan te wachten op de nieuwe versie van de Macbook Pro. De verwachtingen waren groot, er werd veel verwacht van de opvolger. De laatste vernieuwingen aan de Macbooks waren alweer een tijdje geleden. Groot was de teleurstelling tijdens de grote Macbook Pro aankondiging van Apple. De innovaties waren niet zo groot als iedereen had gehoopt. Naast de aanwezigheid van 2-4 USB-C / Lightning connectors valt alleen de Touchbar nog op. Dit touch gevoelig schermpje zit op de plaats waar de functie toetsen ooit zaten. De locatie betekent dan ook dat de fysieke functie toetsen niet meer bestaan en dat betekent inclusief een niet meer fysieke Escape toets. Microsoft fans hadden minstens verwacht dat er nu eindelijk een touchscherm toegevoegd zou worden. Zoals verwacht kon de touchbar dus op veel hoongelach verwachten.

Ik heb er nu een tijdje mee gewerkt en het went wel. Hij is volledig configurable en naar je eigen zin in te regelen.

Standaard staan deze items op de bar.

De functies op de Touchbar kunnen door de MacOS applicaties aangepast worden en voor die applicatie handige shortcuts laten zien. De applicatie die ik nu gebruik (Blogo) heeft deze functies toegevoegd. Nog niet helemaal bugvrij, want voor de screenshot was het anders ;-). De mockup die ronddwaalde van de Spotify app is inderdaad een mockup, want de echte integratie met de Touchbar ziet er iets minder grafisch uit.

Er zijn natuurlijk ook onzin applicaties. Zoals deze met het Knight Rider liedje en het beruchte KITT lichtje, wie kent het nog 😉

Of een Piano op de Touchbar, ook leuk.

Maar zoals gezegd je kunt zelf onzinnige applicaties maken of serieus gebruik maken van de Touchbar in je applicaties. Onderstaande demo is geschreven in Swift met Xcode.

De beruchte lemmings.

Er zijn ook handige applicaties, zoals de TouchSwitcher. Met deze app kun je schakelen tussen de verschillende open applicaties, maar je kunt ook nieuwe applicaties openen.

Met velen zal ik gelijk toegeven dat deze versie van de Macbook niet heel veel nieuwtjes bevat. En zeker dat dit niet de verwachte opvolger is voor alle Apple fans. Persoonlijk vind ik het niet zo erg, dat je dongels nodig hebt voor de USB-C poorten. Dat is bij sommige Windows laptops niet anders. Disruptie komt niet door te blijven bij het oude en de bestane oplossingen.

Dat er nog een keer een Touch scherm gaat komen op een Macbook dat geloof ik ook wel. MacOS is mogelijk nog niet zover of de Macbook gebruikers hebben daar nog niet een use case voor. Aan de andere kant als je een touch laptop gebruikt in een kantoor situatie waarbij je veel met Office producten of Business applicaties werkt, dan heb je je laptop meestal aan een niet touch scherm hangen (daar zou Microsoft of hun partners nog eens iets aan moeten doen, een PixelSense monitor voor kantoorgebruik). Ik merk dat ik touch op mijn Surfacebook redelijk vaak gebruik als ik geen apart scherm gebruik, maar eigenlijk alleen maar voor het scrollen door websites of als ik moet klikken op grote knoppen. En vooral dus in Tablet mode. De pen gebruik ik nog niet voor handschrift herkenning, want dat valt nog steeds een beetje tegen.

Wat ik wel mooi vind aan de Touchbar. Het schermpje en je aanraking ontneemt niet je zicht op het scherm. Ik vind de concept telefoons, waarbij het touchscherm aan de achterkant van een telefoon zit, briljant. Dan zie je tenminste wat je doet tijdens het aanraken.

Maar goed, het laatste is nog niet gezegd over de Touchbar. Vriend en vijand zal hem verafschuwen, maar het is zeker weer iets anders. Jammer, dat de bluetooth Keyboards van Apple niet een Touchbar hebben, dat helpt niet mee aan het accepteren van deze nieuwe standaard.

Visual Studio for Mac Preview

Het was natuurlijk al mogelijk om C# en DotNetCore te gebruiken op niet Windows omgevingen met behulp van Visual Studio Core. Daar hoorde MacOS natuurlijk ook bij. Na de overname van Xamarin door Microsoft is Xamarin Studio samengevoegd met de Visual Studio producten en dat heeft geresulteerd in Visual Studio for Mac.

Xamarin Studio was natuurlijk al super om Android en iOS apps te maken op een Apple device. Natuurlijk kun je dat ook doen door Xamarin Studio te gebruiken op Windows en een MacOS device te gebruiken als Build omgeving.

Voorheen kon je alleen een Native MacOS app maken met Xcode (de ontwikkelomgeving van Apple). Daarvoor moet je dan Objective C, C, C++, Swift etc leren en gebruiken. Als je normaal gesproken voor Windows programmeert of multi platform wilt programmeren, dan moet je een nieuw kunstje leren en bestaande libraries herschrijven. Met Xamarin Studio kun je gebruik maken van DotNetCore en C#, veel van je bestaande code kun je een-op-een hergebruiken. Met Visual Studio for Mac is het nu ook mogelijk om een native MacOS applicatie te maken met Xamarin en C#. Hiervoor heb je nog wel Xcode nodig om de Storyboards te kunnen definieren. Voor Android en iOS heeft Xamarin eigen tools en editors ontwikkeld, maar voor MacOS nog niet.

Als je Visual Studio for Mac start krijg je een bekend beeld van je Visual Studio for Windows.

Net als op Windows doe je File->New Project en dan krijg je de keuze aan de verschillende project templates.

Een van de templates is een MacOS applicatie.

Om de visuele controls op het scherm te zetten, dan moet je het Storyboard gebruiken en daarvoor maak je een uitstapje naar Xcode. Zodra je dan de aanpassingen opgeslagen hebt, dan zullen deze gesynced worden met de Visual Studio solution.

Als je de applicatie dan start, kun je uiteraard ook debuggen.

Zoals je gewend bent in Visual Studio / Xamarin Studio kun je meer details zien tijdens het debuggen.

Ik heb nog geen applicaties in de Mac App Store gezet, maar dat zou wel gewoon moeten. De applicatie kun je in elk geval gewoon starten op je Mac-je.

Erg leuk en goed van Microsoft/Xamarin om een vertrouwde ontwikkelomgeving naar andere platformen te halen. Visual Studio Core is natuurlijk al heel erg mooi, maar Visual Studio for Mac is net ietsje uitgebreider en completer.

Feitelijk is Microsoft weer terug waar ze begonnen zijn en is de cirkel weer rond. Microsoft is begonnen als leverancier van ontwikkeltalen en omgevingen op oa Apple computers. Dat is met Visual Studio en DotNetCore zekere weer gelukt. Nu is de markt voor platformen nog groter, dus is herbruikbaarheid van code nog belangrijker.

Visual Studio for Mac is nog een preview, maar inmiddels zien we dat ontwikkelingen elkaar erg snel opvolgen en dus zal deze preview ook met dezelfde vaart doorgroeien. De toekomst voor developers wordt alleen maar mooier.

Paint 3D Preview

Met de volgende major update van Windows 10, ookwel de Creators update genoemd, wordt 3d meer onderdeel van Windows 10. De afgelopen insiders builds van Windows 10 laten al iets meer zien van wat we mogen verwachten. Paint 3D is in preview te downloaden vanuit de Windows 10 App store. We hebben er al mee gespeeld en het werkt verbluffend eenvoudig. Met de laatste insiders build zijn ook een paar problemen met vertragingen verholpen. https://www.microsoft.com/en-us/store/p/paint-3d-preview/9nblggh5fv99 Het werkt prima op een Surface Pro 3, Surface Pro 4 of Surfacebook.

Microsoft Teams

In Office 365 zit al langere tijd het fenomeen Groups. Een Group is een verzameling van Office 365 accounts die gezamenlijk een e-mailadres hebben, een gezamenlijke onedrive voor het delen van bestanden en een teamsite hebben. Het gebruik van Groups is handig om een gelijkgestemde groep gelijke rechten uit te delen. Enige nadeel van dergelijke Groups is communicatie moet nog steeds via losse Skype 4 Business contacten en er is niet een afgescheiden hoekje om samen informatie uit te wisselen. Veel bedrijven wijken dan uit naar tools zoals Slack. Nadeel hiervan is, dat je weer een apart tool hebt met zijn eigen credentials. Vanuit Teams kan ook een meeting ala Skype gestart/gepland worden, dat is met Slack dan weer niet mogelijk.

Daar komt Microsoft Teams met de oplossing. Microsoft Teams is een Office 365 Group met de toevoeging van Chat channels. Een Group heeft dan een Team met daarin binnen meerdere Chat channels. De deelnemer van een groep is automatisch lid en de chat channels kunnen door de leden van de group aangemaakt worden. Dit levert een paar voordelen op, als iemand de group verlaat dan verdwijnt ie ook automatisch uit het team. Teams zijn onderdeel van Office 365 en daarmee heb je credentials, die je toch al gebruikte voor de rest van Office 365. Data blijft dus ook binnen de datacenters van Microsoft en in de buurt van je Office 365 spullen.

Om Microsoft Teams te benaderen zijn er verschillende mogelijkheden. Er is een website (https://teams.microsoft.com en voor alle platformen zijn er apps (Win10, iOS, Android, Macos).

Er zitten nog wel een paar haken en ogen. Zo moet degene die je toevoegt aan een group een Office 365 licentie hebben. Een externe persoon toevoegen van buiten de Office 365 tenant is dan een beetje lastig. Bij Yammer kan je externe personen toevoegen met een Office 365 account, maar zondere Office 365 licentie. Ander bezwaar is dat je nu binnen Office 365 verschillende mogelijkheden om te communiceren hebt: Skype4Business (meer voor meetings en een-op-een communicatie), Yammer (hele Office 365 populatie met soms afgeschermde groups) en Teams (meer voor een projectteam). Op deze manier wordt het veel wisselen tussen verschillende applicaties.

Desalniettemin is het een mooie toevoeging en maakt groepscommunicatie toch weer eenvoudiger. Microsoft Teams is nog in Preview, dus we moeten afwachten welke functionaliteit er nog toegevoegd gaat worden. Het ziet er wel veelbelovend uit.