Drupal is ook minder geschikt voor afwijkende, custom interactie en functionele ontwerpen

Donderdag, 10 March 2011

Op mijn artikel over waarom Drupal voor grote projecten niet de meest geschikte tool is, kreeg ik ook wat reacties in de trant van

Jij bekijkt het alleen vanuit de technische kant. En vergeet het designen, functioneel ontwerpen en het beheer.

Dit ben ik niet vergeten, maar heb ik expres weggelaten om het verhaal niet nóg langer te maken.

Ter volledigheid: Functioneel ontwerp, interaction design en natuurlijk het grafisch ontwerpen zijn zaken die allemaal vooraf gaan aan het bouwen van een site.

Hier doet zich in het geval van een CMS een interessant gegeven voor, namelijk dat het CMS erg beperkend werkt op de mogelijkheden binnen zo een ontwerp. Zo roep ik bij bijna alle Drupal-projecten:

Er moet dan wel een techneut bijzitten die kan bijsturen, zodat we Drupal optimaal gebruiken en geen zaken gaan bouwen die in Drupal heel moeilijk blijken.

Klinkt redelijk: dat de gebruikte techniek optimaal ingezet wordt. Dat je al tijdens de eerste ideeënfase Drupals ins- en outs leert kennen en je daardoor laat leiden, is geen verkeerde werkwijze.
En zo voorkom je honderden uren ontwikkelen van een detail, dat, achter bezien, die honderden uren helemaal niet waard blijkt.

Ook een goed idee: om zaken die al voor jou uitgewerk werden gratis in te zetten: scheelt geld.

Als je uit gaat van "standaard waar het kan, maatwerk als het echt moet" en je bent als klant al tevreden met hetgeen out of the box kan worden geconfigureerd (verwachtingen-management!) dan ben je een framework of custom code al tonnen verder om na te bouwen wat je met Drupal en alle contribs al hebt.

Een meer concreet voorbeeld:

Gebruik gewoon de standaard Drupal login- en registratieprocedure, dan hoeven we daar niet eens over na te denken en ook niets voor te ontwikkelen (en te onderhouden).

Maar wat nu als je wél die vrijheid van ontwerpen wilt? Om dat login-verhaal erbij te halen: een goede businesscase, waarmee je conversie-ratio omhoog schijnt te schieten is: mensen kunnen anoniem een comment posten en krijgen pas daarná een login- of registreer scherm. Met de optie om met openid, twitter, facebook enzovoort te registreren.

Dan verdwijnt al het voordeel van een gratis, al uitgedacht systeem. En dat is precies wat ik overal zie gebeuren: duizenden euro's in een offerte voor een systeem dat afwijkt van hoe het CMS het "al deed".

Het argument "standaard waar het kan, maatwerk als het echt moet" onderschrijft daarmee mijn betoog alleen maar: een standaardproduct is simpel, goedkoop en snel uit te rollen (en als dat al niet zo is, is er its anders, grondig, mis). Dan is een budget van enkele tonnen niet te verantwoorden: Die tonnen zitten in de praktijk altijd in dat "maatwerk als het echt moet". En is de cirkel rond: "standaard waar het kan, (een klein beetje) maatwerk als het echt moet en anders een tool die veel geschikter is voor maatwerk". Waarbij Drupal dus vooral ingezet kan worden voor kleinere, goedkopere projecten en de grote projecten (zoals overheids- of enterpricesites) meer geschikte tools moeten hebben.

Men zegt niet voor niets dat A large portion of time spent building [...] is spent undoing the assumptions that Drupal has baked into core directly..

En daarmee hebben we design, ontwerp, en beheer ook meteen te pakken.

Design:

Designers moeten zich confirmeren naar het CMS en hoe daarin zaken gedaan worden.
Nu moet gezegd worden dat Drupal misschien niet het makkelijkst te leren is voor ontwerpers (themers), maar zeker een van de (zo niet de aller-) flexibelste qua design.

Overigens heerst onder Drupal-ontwerpers ook veel ongenoegen over dat themen. Dat heeft voor een groot deel een architectuur-technische oorzaak: Drupal is niet MVC, heeft geen "ontworpen" theme-laag, maar grotendeels een organisch gegroeid "gebied". Dat resulteerde in een inconsistente en rommelige "interface", waarbij interface de gereedschapskist is, waarmee de ontwerper/themer aan de slag gaat.

(Interactie) Ontwerp

Een framework doet veel minder (tot geen) aannames over interactieontwerp. Een CMS doet dat wél. Een CMS biedt (duidelijk) afgebakende grenzen aan: zo doen we het en niet anders.

Wanneer in het CMS deze interactie heel goed voor een bepaald doel op maat gemaakt is, heb je, wat ik eerder noemde, een hyper gefocused CMS. PHPBB, een forum-tool, hoeft ook bijna geen aangepast interactieontwerp: het is immers al helemaal geöptimaliseerd voor het beheren van forums. Dat PHPBB je beperkt in de vrijheid zelf je admin- interfaces, workflows en dergelijke te ontwerpen, is nauwelijks van belang.

Maar een CMS dat fungeert als generieke blokkendoos, vereist dat wél. Daar moet je de vrijheid hebben om zélf je menu-structuren helemaal in te richten, om zélf optimale workflows op te zetten. Kortom, precies het interaction-design, de wireframes of het funcitoneel ontwerp te kunnen volgen.

Dan is "Drupal optimaal gebruiken" opeens veel minder waardevol, omdat je gewoon het ontwerp wilt kunnen volgen en niet rekening te moeten houden met de niet-passende ideeën van een modulebouwer.

Beheer.

Wanneer je zo een site bouwt, waarin je heel veel moet "undo-en", eindig je niet zelden met honderd, hondervijftig modules. Waarvan een groot deel heel, project- of casespecifiek gebouwd is.

Overigens kent het gemiddelde Rails-project waarmee ik bekend ben, ook ongeveer 50 externe, vereiste bibliotheken (gems). Maar vijftig bibliotheken is iets heel anders dan hondervijftig modules. Mijn ervaring met Django, Symfony, of .NET projecten is te gering om hier een generieke uitspraak over te kunnen doen, maar ik verwacht ongeveer hetzelfde. Een recent CakePHP project dat ik bouwde had twee zulke bilbiotheken: een PDF-library en een Twitter-libary. Niks meer.

In Drupalprojecten kom ik niet zelden het volgende patroon tegen:

  • Core doet X1
  • Contrib module maakt daarvan X3
  • Eigen module maakt deel van contrib module ongedaan en maakt het gewenste resultaat X2
  • Het theme en theme-preprocessors bouwen daarvan X2'.

Dat is ook wat developmentseed bedoelde met "undoing". En er zit dus twee keer zoveel code en twee keer zoveel features in dan nodig: eerst de features en daarvoor nodige code die niet gebruikt gaan worden. En vervolgens code om die features weer te verbergen.

Een ander, veelvoorkomend patroon is:

  • Contrib A doet X op zijn eigen maniertje, niet helemaal passend bij het interactieontwerp.
  • Contrib B doet Y op een ander, eigen maniertje.
  • Eigen module zorgt dat X en Y consistent zijn en samenwerken volgens het interactieontwerp.
  • Theme gebruikt deze data, verwerkt en past ze aan, tot een custom-interface.

Dat heet in Drupal meestal "gluecode". Omdat het een CMS is, en geen framework, hebben modules (en core) deze "maniertjes". Een (goede) bibliotheek heeft geen maniertjes, maar is hoogstends "opinionated"; wat betekent dat het technische aannames doet, zoals bijvoorbeeld de naamgeving van je database.
Dit patroon veroorzaakt ook een zogenaamde "tight coupling" tussen het theme en de implementatie. Een theme kan niet werken zonder dat alledrie modules beschikbaar zijn, én exact volgens een patroon ingeregeld. En andersom zal zonder het theme (of met een ander theme) de site heel anders (of helemaal niet) werken. "Tight coupling" is een bekende oorzaak van veel beheerproblemen en van enorm veel bugs.

Een Drupalmodule is echter bibliotheek, implementatie en vaak nog design daarvan, in één. Een bibliotheek is enkel bibliotheek. De implementatie, en al helemaal het design is aan de bouwer. Er is dus geen undoing nodig. En geen gluecode (of: iemand zei me ooit: bouwen met Django is alléén maar gluecode schrijven).

Wanneer je in Django een paar Packages (bibliotheken) binnenhaalt, of in Rails een paar Gems opneemt, is het patroon heel anders:

  • Core doet niets.
  • Gem X biedt een aantal, geabstraheerde, helpers aan.
  • Jou Rails app gebruikt die helpers om, met custom code, het gewenste resultaat te krijgen.

Een voorbeeld:

  • Rails heeft van zichzelf geen uploadfunctionaliteit.
  • Carrierwave bied de mogelijkheid om heel eenvoudig files aan "objecten" toe te voegen.
  • Het door jou ontwikkelde "article" model, gebruikt enkele regels code om plaatjes aan artikelen toe te voegen, deze te bewerken (thumbnails, watermarks enzovoort) en de resultaten beschikbaar te maken en weer te geven.

Voor beheer is dus belangrijk dat, om het gewenste "ontwerp" te bereiken, met een CMS vaak erg veel extra modules, addons of eigen code meegeleverd moet worden. Die veelal erg uiteenloopt qua implementatie, veiligheid en kwaliteit. 150 modules beheren is een hel. En helemaal als een groot deel daarvan gluecode en ondoing is.

Bij een framework kunnen bibliotheken net zoveel uiteenlopen qua veiligheid en kwaliteit, maar de manier van inzetten is zodanig anders, dat beheer van deze bibliotheken nauwelijks moeite kost. De manier van inzetten volgt ook altijd heel duidelijk beschreven patronen, want dat is vastgelegd in het framework. Waardoor een willekeurige (nette) rails app door iedere rails-ontwikkelaar binnen enkele uren te begrijpen is.

Bovendien zijn frameworks in essentie eigenlijk niet meer dan tools om al die bibliotheken te beheren en te implementeren. Bij een CMS is beheer van modules of addons vaak slechts een bijzaak, het is immers een Content management systeem en geen Code management systeem. In Drupal is dit welliswaar aan het veranderen met tools als features, en drush. Maar het komt nog altijd niet in de buurt van een tool als bundler

Wanneer je je confirmeert aan het CMS heb je dus niet alleen veel minder ontwikkel- en denkwerk te verrichten, het beheer wordt ook nog eens stukken goedkoper. Maar een project waarbij je nauwelijks ontwikkelt, je functioneel ontwerp helemaal laat leiden door de conventies van het CMS en het beheer een fluitje van een cent is, kost toch ook bijna niets?! Zo een site is in een week gemaakt. Kost een paarduizend euro aan design en themeing en kan per definitie nooit honderden uren werk kosten, want dat werk voorkwam je nu juist door alles standaard te doen!

Waarom kost een Drupalsite dan toch vaak enkele (tien)duizenden euro's? Mis ik een belangrijke kostenpost? Of zijn we vooral "Maatwerk waar het moet" aan het bouwen met Drupal?


Tags: Design, Django, Drupal, frameworks, functioneel ontwerp, interactieontwerp, Overheden, Projectmanagement, Ruby-on-rails, UX,

Als ik een Ber vlag had, zou

Als ik een Ber vlag had, zou ik nu naar het hoofdplein marcheren om met die vlag te zwaaien.

Zo'n rooie vlag? :)

Zo'n rooie vlag? :)

Grote budgetten met

Grote budgetten met daaropvolgende wanprestaties worden vooral veroorzaakt door bedrijven die niet kunnen omgaan met de vrijheid om te beginnen met 100+ modules installeren.

Voor <10k projecten kun je meestal met contrib modules alle mogelijke klantverwachtingen overstijgen maar grote projecten vereisen IMHO een andere aanpak.

Maak verstandig gebruik van nodes, users, roles en FAPI maar laat panels en ctools vooral links liggen en maak klantgerichtte modules voor functionaliteiten die klantspecifiek zijn.

Daarnaast worden mislukte of budget overschrijdende projecten ook veroorzaakt door designers die 0 verstand hebben van het systeem en daardoor maar een compleet nieuwe zoekmachine uitvinden in het design, of iets dergelijks. Voor sommigen klinkt het als de omgekeerde wereld maar ik vind dat designers geinformeerd moeten zijn over de mogelijkheden van het systeem zodat zij in hun design proces kosten/baten afwegingen kunnen maken.

Ik vind dat er zeker een case te maken is voor het gebruiken van echte frameworks bij zeer grote projecten maar ik ben het totaal niet eens met de monetaire streep bij 5k voor Drupal projecten. Geld is hier een slecht excuus voor een goede analyse waarbij je op project basis moet selecteren voor ofwel een Drupal danwel een framework en er zijn best 200k projecten waar Drupal nog prima zijn mannetje kan staan.

Laten we dan niet over geld

Laten we dan niet over geld praten maar over "inzet van ontwikkelaars"?

Wanneer de "inzet van een ontwikkelteam" groot is, wordt er veel op maat gemaakt.

Wanneer je "veel op maat maakt" behoor je dat te doen in een omgeving die daarvoor geöptimaliseerd is. Behoor je gereedschap te gebruiken dat het ontwikkelen efficient laat gaan.

En dat ís Drupal gewoon niet.

Natuurlijk kun je een goed project met Drupal afronden bij een budget van 2miljoen Euro. En natuurlijk zijn er evenzoveel projecten van 2miljoen te noemen die met keurige, supergeöptimaliseerde omgevingen werken die falikant mislukken. Dat is mijn betoog ook niet. Mijn betoog is, dat in die regio, het voordeel dat Drupal lijkt te geven, niet opweegt tegen de nadelen die Drupal het project binnenbrengt.

Bij een klein project zal de balans bijna altijd richting systemen als Drupal gaan, waardoor het een prima tool lijkt voor allerlei projecten. Maar dat ís het niet. Drupal is zelden de beste tool voor zulke grote projecten, om alle redenen genoemd, maar vooral omdat andere tools daarvoor gewoon beter zijn.

En dat doet niets af aan de complexiteit, management, moeilijkheden en verschrikkingen waar al zulke grote projecten mee worstelen.

Je gereedschap moet dan júist niet in de weg zitten, maar slechts een detail zijn van een veel groter project. Drupal is echter zelden een detail, maar altijd een factor waarmee telkens weer rekening gehouden moet worden, zelfs als het project zulke inmenging vanwege de complexiteit, helemaal niet kan gebruiken.

Je verhaal heeft hele goede

Je verhaal heeft hele goede punten, en op grote delen ervan ben ik het ook met je eens. Echter, ik vind het jammer dat je concreet Drupal noemt en niet 'CMS in het algemeen'. Wat jij beschrijft is inherent aan een CMS. Elke CMS kent haar manier van workflows en registratieafhandelijk en dus kost het maatwerk om hiervan af te wijken.

De kracht van open source tov van een closed source is juist dat je hier vrij makkelijk op kan ingerijpen, iets wat je bij closed source kan vergeten. En bij Drupal is dit stuk meestal nog simpeler: er is vast al een module voor :)

Op deze manier komt Drupal toch in een negatief daglicht (artikel Webwereld: jammer) en dat is onnodig.

Het zou zomaar eens waar kunnen zijn dat ervaren ontwikkelaars sneller en beter af zijn met een framework ipv een CMS. Echter: dit geldt dan alleen als klanten zelf een ontwikkelclub hebben die functioneel beheer en ondersteuning kan bieden.

Achteraf wijzingen doen aan de site (of 'even een Twitter module erin hangen') gaat niet zomaar, hier is dan ook weer technische kennis voor nodig. Right?

Je hebt gelijk dat dit Drupal

Je hebt gelijk dat dit Drupal negatief uitlicht. Ik benadruk (ook in het Webwereld artikel) echter steeds weer dat het niet specifiek Drupal is. Maar dat was jou ook opgevallen.

Dat ik toch Drupal noem, heeft de duidelijke reden dat Drupal hét Open Source CMS is dat momenteel overal in overheids- en enterprice-projecten wordt ingezet. Soms worden closed-source producten genoemd, en voor de rest is het maatwerk (op bijvoorbeeld GX...)

Ik heb een wat duidelijkere uitleg over mijn beweegredenen in de maak.

Want hoe negatief dit alles mag klinken, ik ben overtuigd dat ik uiteindelijk Drupal een plezier doe. "Ik doe het for the Good of Drupal". :)

Een van de moeilijkheden die

Een van de moeilijkheden die we vaak zien is dat Drupal precies past op de initiele vraagstelling qua functionaliteit. Ook het budget is vaak bescheiden en betekent dat in maatwerk bouwen geen optie is.

Echter, als men begonnen is met bouwen (en er dus niet echt een weg terug is; opnieuw beginnen is geen optie) wordt vaak later pas duidelijk dat er bepaalde impliciete, niet vastgelegde, verwachtingen waren. Of er worden specifieke ontwerpen aangeleverd die eigenlijk niet te doen zijn in Drupal. Er wordt dan wel verwacht dat het allemaal geimplementeerd wordt.

Iedereen wil voor een dubbeltje op de eerste rang zitten :(

Hoe ga je om met zulke gevallen? Leg je vooraf alles tot in den treure en met ieder detail vast? Kost het voortraject in zo'n geval niet meer tijd dan de implementatie?

Nieuw commentaar posten

De inhoud van dit veld is privé en zal niet publiekelijk getoond worden.
  • Lijnen en paragrafen worden automatisch opgesplitst.

Meer informatie over formaatmogelijkheden