Alle berichten van Timo van de Put

Google hallucineert over waar ik ben geweest

Omdat ik voor het vinden van bezienswaardigheden ๐Ÿ›๏ธ en goede eetgelegenheden ๐Ÿฝ๏ธ regelmatig gebruik maak van Google reviews, deel ik zelf al jaren mijn ervaringen voor anderen. Zo ben ik in Google Maps langzamerhand opgeklommen tot een “Local Guide” van (bijna) niveau 8, met onder andere ruim een miljoen fotoweergaven.

Om dit bij te houden ga ik er soms even voor zitten om korte reviews โœ๏ธ te schrijven, foto’s ๐Ÿ“ท te uploaden en simpele vragen โœ… te beantwoorden over de plaatsen waar ik ben geweest. Hierbij is het telkens weer fascinerend hoe goed Google weet waar ik allemaal ben geweest.

Maar deze week gebeurde er iets vreemds: Ik kreeg vragen over een bedrijf waar ik een paar weken geleden slechts met een bemiddelaar over heb (gebeld en) gemaild. ๐Ÿ•ต

๐Ÿค” Zou Google werkelijk mijn emails en fysieke locatie combineren tot een (hallucinante) nieuwe werkelijkheid?

Mensen zijn te “dom” om complexe systemen te begrijpen

Stop dus met fantaseren ๐Ÿฆ„, en begin met bouwen!ย ๐Ÿš€

Ken je dat? ๐Ÿค” De harde eis dat er eerst een volledige specificatie ๐Ÿ“š moet zijn voor we “veilig” aan de realisatie kunnen beginnen? Bij een van mijn klanten lag er na een jaar zwoegen een enorme berg documentatie, waar zelfs de auteurs het overzicht kwijt waren ๐Ÿ˜…. – Wat zouden we ook alweer bouwen?

Het probleem: te veel tijd in plannen, te weinig tijd in de praktijk. Documentatie is waardevol, maar alleen als het project vooruit gaat. Analyseren blijft belangrijk, maar er komt een punt waarop je gewoon moet starten met bouwen! Door direct aan de slag te gaan, leren we sneller en ontdekken we vroegtijdig wat werkt (en wat niet) ๐Ÿ’ก.

Een paar tips om te voorkomen dat je in analyse blijft hangen:

1๏ธโƒฃ Bouw al vroeg prototypes of (beter nog) een “minimum viable product”: Laat iets tastbaars te laten zien in plaats van alleen een wolk van mooie woorden. ๐Ÿ“ฆ

2๏ธโƒฃ Werk iteratief: Bouw en test in korte cycli; en gebruik elke stap om feedback te verzamelen en te leren. โ™ป

3๏ธโƒฃ Betrek de echte gebruikers: Schrijf geen ellenlange rapporten en bouw geen mockups, maar toon regelmatige demoโ€™s van het echte product en voer inhoudelijke gesprekken over wat de gebruikers nodig hebben. ๐ŸŽฌ

Eindresultaat? Een beter product, in minder tijd. Dus… waar wacht je nog op? Tijd om te bouwen! ๐Ÿ› ๏ธ

Gratis source code? Niet zonder risico!

Open-source code gebruiken is verleidelijk makkelijk: even iets van GitHub plukken, en voilร ! ๐Ÿ„ Maar niet elke open-source licentie komt zonder verplichtingen. Sommige licenties zijn โ€œbesmettelijkโ€ โ˜ข๏ธ. Als je code met zo’n licentie in je project opneemt, kunnen โ€œcopyleftโ€ licentie-eisen inhouden dat je mogelijk jouw eigen code openbaar moet maken.

De bekendste besmettelijke licenties zijn:

โ˜ข๏ธ GNU General Public License (GPL)
โ˜ข๏ธ Affero General Public License (AGPL)

Voeg je code met een van deze licenties toe aan je eigen project, dan kunnen de licentie voorwaarden zich uitbreiden naar jouw code. Niet ideaal als je werkt aan een commercieel product. ๐Ÿ’ฃ

Gelukkig valt veel open source code onder een van de populaire โ€œpermissieveโ€ licenties ๐ŸŒˆ, die veel minder eisen stellen:

๐ŸŒˆ MIT-licentie
๐ŸŒˆ Apache-licentie 2.0
๐ŸŒˆ BSD-licentie

Met deze licenties kun je de code (meestal) zonder zorgen gebruiken en aanpassen.

Tips om problemen te voorkomen: ๐Ÿ›Ÿ

  1. Check altijd de licentie voordat je een library toevoegt of kopieert.
  2. Twijfel je? Win dan juridisch advies van experts in.
  3. Zoek alternatieven: Die zijn er meer dan je verwacht.
  4. Gebruik tracking tools zoals FOSSA, Snyk of Black Duck geven je automatisch inzicht in de gebruikte licenties binnen je project.

Open source is een geweldige bron, maar kent zijn eigen regels. Voorkom verrassingen door licenties serieus te nemen. Zo blijf je een hoop werk en stress bespaard. ๐Ÿ’ฃ

Vervult jouw software oplossing eigenlijk wel zijn doel?

Meten is weten! ๐Ÿ“ˆ

Het aantal producten waar ik aan mee heb mogen werken is inmiddels vrij groot.๐Ÿ… Maar het aantal projecten hiervan met zichtbare sturing op de directe doelstellingen is helaas bedroevend laag. ๐Ÿค”

En nee, ik bedoel hiermee niet nutteloze metrieken als”velocity” ๐Ÿšฒ of afgewerkte user stories ๐Ÿ—‘๏ธ. Ik heb het over concreet meetbare doelstellingen voor het resulterende product ๐Ÿ“ฆ, en in hoeverre hier voortgang in wordt gemaakt.

Een voorbeeld hiervan is een project waar we met een klein team een “recommender” voor films herbouwden. ๐Ÿ—๏ธ Hierbij besloten we om vanaf het begin de kwaliteit van de aanbevelingen te meten, en alles ondergeschikt te maken aan het doorlopend opdrijven van die waarde. ๐Ÿ“ˆ

๐Ÿ’ก De eerste sprint leverde een meetmethode op basis van data uit een bekende externe filmdatabase, en als eerste implementatie een willekeurige ๐ŸŽฒ keuze uit de beschikbare titels. De score was voorspelbaar dramatisch, maar de infrastructuur hiermee aanwezig met een “aanbeveling” als product resultaat. ๐ŸŽฏ

Daarna werd het fascinerend: ๐Ÿง

Door het meten van elke verbetering van onze algoritmen, ontdekten we dat de briljante ideeรซn uit het verleden helemaal niet zo’n geweldige impact op het resultaat hadden. ๐Ÿ“‰ En voor sommige oplossingen bleek de impact op de performance al helemaal de verbetering niet waard te zijn. ๐Ÿ˜ณ

Het eindresultaat van het project was een veel eenvoudiger oplossing met een gemeten betere functionaliteit dan de vorige implementatie. ๐Ÿ†

Kwaliteit en snelheid in softwareontwikkeling: een paradox?

In een recent project vroeg een directeur ๐ŸŽฉ me in de context van een project met tijdsdruk de bevestiging dat ik “hopelijk niet uit een industrie kom waar alles aan strenge kwaliteitsnormen moet voldoen”.

Een goede vraag! ๐ŸŽฏ Het roept namelijk iets fundamenteels op over softwareontwikkeling: is er ruimte voor snelheid zonder in te boeten op kwaliteit? ๐Ÿค”

๐Ÿ”Ž Een nadere blik op de realiteit in softwareontwikkeling:

1๏ธโƒฃ “Een stevige basis bouwen kost tijd” ๐ŸŽ“: In sectoren zoals de luchtvaart, medische technologie of de financiรซle wereld is het vanzelfsprekend dat je niet kunt inleveren op kwaliteit โ€“ en terecht. Maar die kwaliteit zit op een heel ander abstractieniveau dan waar we het in softwareontwikkeling doorgaans over hebben. Een fundamenteel doordacht ontwerp staat los van de toepassing van ducktape als constructiemateriaal tijdens het bouwen.

1๏ธโƒฃ In wat door moet gaan voor “agile” omgevingen, streven we vaak slechts naar snelle releases tegen een krappe deadline. Maar wat we vaak vergeten is dat snelheid zonder kwaliteitscontrole door de complexiteit van moderne software met zekerheid leidt tot een enorme hoeveelheid fouten. ๐Ÿ’ฉ En die herstellen kost uiteindelijk mรฉรฉr tijd, waardoor de bereikte snelheid niet te handhaven blijkt en de agile transitie “dus” niets op heeft geleverd. ๐Ÿ˜ข

3๏ธโƒฃ In mijn persoonlijke ervaring heb ik meerdere malen mogen ervaren dat de fundamentele keuze voor “kwaliteit boven meer features” ๐ŸŒˆ een wonderbaarlijk solide basis oplevert voor de toekomst: Het betekende veel minder tijd kwijt zijn aan het doorlopend herstellen van problemen, en dus volledige focus op features die werkelijk waarde aan het product toevoegen.

Dit klopt met de stelling over “technical debt” door Ward Cunningham: Snelle, suboptimale codeoplossingen lijken op korte termijn handig zijn, maar leiden uiteindelijk tot extra werk en onderhoudskosten die je later moet “aflossen” om de code onderhoudbaar te houden.

Investeren in kwaliteit levert daarmee juist de gehoopte verhoging van snelheid op. ๐Ÿš€ Misschien niet in het absoluut aantal gesloten tickets, maar wel in het succes van het product. ๐Ÿ’ฐ๐Ÿ’ฐ๐Ÿ’ฐ