In vielen Bereichen ist der typische Kunde jedoch:
- Interessiert an täglichen betrieblichen Belangen - Kurzstrecken-Taktik ... nicht Strategie;
- Nur mit der sofortigen Lösung befasst;
- Im Allgemeinen eindimensionale, nicht abstrakte Denker;
- In erster Linie daran interessiert, "die Arbeit zu erledigen", anstatt eine dauerhafte, qualitativ hochwertige Lösung zu finden.
Und um ehrlich zu sein, haben sie normalerweise gute Gründe, so zu denken. Erstens betreiben sie ein Unternehmen, das heute und morgen Einnahmen erzielen soll, nicht in ferner Zukunft. Zweitens sind sie keine technischen Experten - sie wissen nicht, was möglich ist und was nicht und welche Konsequenzen bestimmte Entscheidungen in Bezug auf Architektur, Design und Implementierung haben. Das wissen wir .
Die Antwort lautet also - kaum überraschend - Kommunikation .
Sie müssen viel kommunizieren, sich gegenseitig aufklären, sich gegenseitig den Standpunkt der anderen Partei zumindest auf einer grundlegenden Ebene verständlich machen. Sie müssen ihnen die kurz- und langfristigen Konsequenzen möglicher Alternativen erklären. Und Sie müssen eine Sprache verwenden, die sie verstehen .
- Wenn Sie sagen "Dies wäre ein Hack, der den Code weniger lesbar und erweiterbar macht" , sagen sie "Ja, was auch immer" .
- Wenn Sie sagen "Dies wäre eine kurzfristige Lösung, die eine längerfristige Entwicklung und Wartung verteuert und das Risiko der Einführung von Fehlern erhöht" , sagen sie "a ha, lasst uns überlegen" .
- Und wenn Sie sagen: "Diese Lösung würde Sie jetzt 100 US-Dollar kosten, aber 500 US-Dollar an technischen Schulden einführen, die Sie früher oder später mit Zinsen zurückzahlen müssen. OTOH, diese andere Lösung kostet Sie jetzt 400 US-Dollar und hinterlässt keine technischen Schulden. Wählen Sie die aus, die Sie haben." wollen " , sagen sie " jetzt reden wir! " .
OTOH können sie uns ein oder zwei Dinge über die Geschäftsperspektive beibringen. Unternehmen wollen brauchbare und gut genug - kaum perfekte - Lösungen. Und sie wissen wahrscheinlich besser als jeder andere, dass "perfekt der Feind des Guten ist". Sie müssen also bedenken, dass es unsere Aufgabe ist, Lösungen für Probleme unserer Kunden bereitzustellen, anstatt technisch perfekte Software zu produzieren. Manchmal konvergieren diese beiden zu demselben, aber häufiger nicht. Dies mag von vielen als traurig angesehen werden, aber es ist geschäftliche Realität. Wenn es mir gelungen ist, das Problem meiner Kunden zu lösen, und ich sehe, dass es ihnen das Leben sichtbar erleichtert hat, bin ich genauso glücklich wie sie. OTOH, wenn ich es geschafft habe, das perfekte Design umzusetzen, das ich mir vorgestellt hatte, aber das Unternehmen in der folgenden Woche bankrott geht, ist es für niemanden ein Gewinn, oder?
Ein vernünftiger Geschäftsinhaber wird verstehen - wenn Sie ihn in seiner eigenen Sprache erklären -, warum es wichtig ist, die Software sauber zu halten, Komponententests zu schreiben, umzugestalten usw. Auch wenn diese kurzfristig nichts direkt beizutragen scheinen, sie sind für die langfristige Wartung unerlässlich. Und vernünftige Kunden legen Wert auf die langfristige Wartbarkeit ihres Geschäfts, sodass sie sicherlich bereit sind, in dieses Unternehmen zu investieren, wenn sie den Wert sehen, den ihre Investition generiert. Da sowohl ihre Ressourcen als auch Ihre Zeit begrenzt sind, müssen Sie Prioritäten setzen und sich auf die wichtigsten Dinge konzentrieren. Aber es ist nur wichtig, wenn es für Sie beide wichtig ist .
Vielleicht möchten Sie Modul A umgestalten, weil der Code dort einfach schrecklich ist und Sie eine erstaunliche Idee haben, wie Sie den Code mit einem Entwurfsmuster, über das Sie gerade gelesen haben, präzise, elegant und sauber umgestalten können. Wenn dieses Modul jedoch seit Jahren nicht mehr berührt wurde und zuverlässig funktioniert, sollten Sie sich höchstwahrscheinlich besser auf Modul B konzentrieren, das nächste Woche um eine sehr wichtige neue Funktion erweitert wird und unzählige Fehler enthält bereits.