Dies ist eine Geschichte, bei der "jede Ähnlichkeit mit tatsächlichen Ereignissen oder Personen rein zufällig ist", plus etwas Unsinn. Bitte nehmen Sie es nicht persönlich. Los geht's...

Ich hielt einen Wasserbecher in der Hand und fühlte mich etwas unbehaglich. Mir direkt gegenüber saß unser Gast, Präsident Wang. Er war beruflich anderswo unterwegs und soll es in den letzten Jahren ziemlich weit gebracht haben. Da er sah, wie das mobile Internet boomte, wollte er natürlich mitmischen. Obwohl Präsident Wangs Arbeitsgebiet etwas mit IT zu tun hatte, hatte er sich so lange nicht mehr mit Technik beschäftigt, dass ihm manche Dinge nicht mehr vertraut waren; deshalb wollte er sich immer von mir beraten lassen – einem alten Programmierer, der über ein Jahrzehnt in der Entwicklung an vorderster Front verbracht hatte. Mehr als zehn Jahre Entwicklung können vieles bedeuten, aber das ist nicht der Punkt, also ignorieren wir dieses Detail vorerst.

Der Grund, warum ich mich unbehaglich fühlte, war, dass ich nicht so recht wusste, wie ich auf Präsident Wangs Anfrage reagieren sollte, als wäre ich in eine Art gewohnheitsmäßiges Nachdenken verfallen.

Präsident Wang stand auf, reichte mir sein Telefon und sagte: „Sieh dir das mal an, einfach eine App wie diese.“ Er wischte ein paar Mal etwas ungeschickt über den Bildschirm. Ich sah nicht sehr genau hin, denn ich wusste, dass diese Frage schwierig war – es ist die Art, die jedem Entwickler gestellt wird, und wahrscheinlich die häufigste: „Wie lange dauert es, eine App wie diese zu entwickeln?“ Am liebsten hätte ich gesagt: „Ich weiß es nicht“, was vielleicht die direkteste und genaueste Antwort wäre, aber gegenüber Präsident Wang, einem alten Freund, könnte eine solche Antwort etwas unhöflich wirken. In diesem Moment musste ich also nicht nur grob überlegen, welche Aspekte die App, auf die er zeigte, umfasste, sondern auch meine Worte ordnen, um ihm höflich zu sagen, dass ich das nicht einschätzen konnte. „Siehst du, einfach so eine einfache App“, fuhr Präsident Wang fort, spielte noch ein paar Mal am Bildschirm herum und sah mich dann mit einiger Erwartung in den Augen an.

Ich sagte vorsichtig: „Ehrlich gesagt kann ich es nicht mit Sicherheit sagen. Ich habe auch nicht viel Erfahrung in diesem Bereich. Obwohl ich App-Entwicklung gemacht habe, ist das ganz anders als hier. Ich müsste erst die gesamte Logik im Detail analysieren, bevor ich die Zeit einschätzen könnte.“

Präsident Wang schien von meinen Worten wenig beeindruckt. Er schüttelte sein Telefon und sagte: „Ich habe nicht viele Anforderungen; es ist eigentlich einfacher als das hier.“ Er zeigte auf bestimmte Stellen auf dem Bildschirm und fuhr fort: „Dies, dies und dies können alle entfernt werden. Ich brauche nur eine Liste wie diese, mit Details darin, die man ansehen und bearbeiten kann …“

Natürlich hielt ich das für eine typische „Ich nehme an, es ist einfach“-Haltung. Ich dachte, ich müsste ihm die Komplexität des Problems klarmachen, also fragte ich zurück: „Braucht es eine Anmeldung?“

Nach einer kurzen Pause sagte Präsident Wang: „Natürlich.“

„Was für eine Anmeldung? Benutzername und Passwort, oder Anmeldung per Telefon, oder Drittanbieter-Anmeldung wie QQ, Weibo oder WeChat, die man nutzen kann?“

Dieses Mal schien Präsident Wang einen Moment nachzudenken: "Als Sache des mobilen Internets denke ich, ist eine Telefon-Anmeldung definitiv nötig. QQ, Weibo – oh, WeChat, WeChat ist natürlich auch nötig ... Oh, Sie hatten vorhin Benutzername und Passwort erwähnt; das sollte ebenfalls nötig sein."

Ich fuhr nahtlos fort zu fragen: "Dann brauchen Sie eine Registrierung. Wenn Sie die Telefon-Anmeldung nutzen wollen, müssen Sie eine SMS-Plattform finden. Für die WeChat-Anmeldung müssen Sie zuerst die Unternehmensidentitätsprüfung abschließen. Außerdem brauchen Sie bei Anmeldung und Passwort eine Passwort-Wiederherstellungsfunktion, oder?"

"Das versteht sich von selbst."

"Bei mehreren Anmeldemethoden müssen Sie sich eine vernünftige Logik ausdenken, um sie zu 'integrieren'. Der häufigste Ansatz ist natürlich die Kontoverknüpfung – zum Beispiel, Ihr Konto mit einer Telefonnummer zu verknüpfen, damit Sie die Telefonnummer verwenden können, um sich in dasselbe Konto einzuloggen. Dasselbe gilt für die WeChat-Anmeldung. Aber die heutigen Mobile-Internet-Nutzer mögen Registrierungsprozesse wirklich nicht, deshalb verlangen sie oft, sich direkt mit ihrem Telefon oder WeChat anzumelden und den Registrierungsprozess automatisch abschließen zu lassen. In Anbetracht dieser Situation: Wenn ein Nutzer sich zuerst mit WeChat anmeldet und sich später mit seiner Telefonnummer anmeldet, anstatt zu verknüpfen, entstünden zwei verschiedene Konten, die nicht mehr 'integriert' werden können. Wir müssen eine relativ vollständige Lösung finden ..."

Präsident Wang schien etwas ungeduldig mit dem, was ich sagte: "Muss es wirklich so kompliziert sein? Schauen Sie sich diese App an – hat sie nicht schon all diese Dinge?"

"Haben Sie es ausprobiert, um zu sehen, ob das Problem, das ich vorhin beschrieben habe, existiert?"

Aber Präsident Wang schien sich keine Sorgen über das Problem zu machen. Er wollte nur wissen, wie lange es dauern würde, eine solche App zu entwickeln, und natürlich, wie viel sie kosten würde – das war ihm ebenfalls wichtig. Er sagte in einem selbstbewussten Ton: „Wovor sollte man bei Problemen Angst haben? Was sind Schwierigkeiten? Ich bin überzeugt, dass sie alle gelöst werden können. Aber die Zeit ist entscheidend; wir müssen uns beeilen. Unsere Konkurrenten werden nicht auf uns warten. Es ist einfach so – überlegen Sie, wie lange wird es dauern?“

Seinem Auftreten nach zu urteilen, war er genau die Art erfolgreicher Person, die es zu etwas Großem gebracht hatte, und als einfacher Programmierer fiel es mir wirklich schwer, vor ihm etwas zu sagen. Ich hatte ihm weiter erklären wollen, wie wichtig die Details waren, aber er unterbrach: „Nein, es muss nicht so genau sein. Schätzen Sie einfach einen Bereich – zwei Wochen? Oder zwei Monate?“

Ich hatte das Gefühl, nichts mehr verbergen zu müssen: „Ich weiß es wirklich nicht. Vielleicht könnte ein exzellentes Team es in zwei Wochen schaffen, obwohl ich nicht wirklich glaube, dass es ein so erstaunliches Team gibt, aber ich bin eindeutig nicht derjenige, der ein solches Wunder vollbringen könnte.“ Ich dachte bei mir, dass selbst eine scherzhafte Spanne wie „zwei Wochen bis zwei Jahre“ falsch sein könnte.

Präsident Wang schien von meiner Antwort sehr enttäuscht zu sein. Aber er ist ein Mensch mit starker Umsetzungsfähigkeit – wenn er etwas tun will, wird er definitiv handeln, schnell handeln und Ergebnisse erzielen. Ich bewundere diesen entschlossenen Stil durchaus, aber bei seinem Projekt konnte ich wirklich nicht helfen. Dennoch sagte ich aus Höflichkeit: „Wenn es technische Probleme gibt, können Sie trotzdem zu mir kommen und mich fragen.“

====================== Ein nicht ganz glamouröser Trenner ======================

„Wie lange dauert es, eine App zu entwickeln?“ Diese Frage ist wahrscheinlich schwerer zu beantworten als vorherzusagen, wie viele Tage ein Mensch noch zu leben hat. Wie kann man eine solche Frage mit so wenigen Informationen beantworten?

Insgesamt gilt: Je klarer die Anforderungen und je reifer das Team, desto genauer die Zeitschätzung. Doch die Softwareentwicklung – egal wie viele Jahre sie sich weiterentwickelt, egal welche Methodologien vorgeschlagen werden – kann ihre "Mannstunden" nicht so präzise berechnen wie die traditionelle Fertigung, weil die internen logischen Zusammenhänge so komplex sind. Software Engineering kann niemals in Massenproduktion hergestellt werden.

Benutzer sehen nur eine App. Wenn sie iOS verwenden, kommen sie möglicherweise nie mit Android in Berührung und erkennen nicht, dass Entwickler neben einer iOS-Version auch eine Android-Version erstellen müssen – oder könnte es auch eine Windows-Version geben? Das würde zweifellos noch mehr Arbeit bedeuten. Oder kann eine Web-Version vielleicht alles erledigen? Vielleicht würdest du das nach dem tatsächlichen Erstellen einer solchen nicht mehr so sehen. Außerdem: Kann ein Modell wie der Mini-Store von WeChat wirklich auf alle Situationen angewendet werden? Zudem werden normale Benutzer, sofern keine Netzwerkstörung vorliegt, die Existenz von Servern nicht einmal bemerken. Server arbeiten immer still rund um die Uhr für die Benutzer, und ihre Entwicklungsschwierigkeit ist wahrscheinlich nicht geringer als die der App selbst. Und die Wartung der App erfordert Arbeitskräfte; sobald sie größer wird, musst du möglicherweise sogar ein professionelles Team bilden. Sie benötigen ein "Backend", um Daten jederzeit einzusehen und zu verarbeiten. Wenn du Daten jederzeit und überall einsehen und verarbeiten musst, musst du möglicherweise eine eigene App für das Backend erstellen.

Dieses Prinzip ist gewissermaßen ähnlich: Wir sehen, wie ein Kampfjet im Himmel seine Mission zur Vernichtung von Feinden wunderschön erfüllt, und nehmen an, dass das nur an dem beeindruckenden Kampfjet selbst liegt, wobei wir oft die unterstützenden Systeme um ihn herum ignorieren. Ohne erfahrene Piloten, Kommandozentralen, Bodenradar, Frühwarnflugzeuge, Nachschub, Luftwaffenstützpunkte oder Flugzeugträger, Bodenpersonal und so weiter würde der Kampfjet seine Kampffähigkeit verlieren. Dasselbe gilt für eine App: Sie ist nicht einfach fertig, nur weil sie läuft. Die unterstützende Infrastruktur und die Wartungsarbeit sind nicht weniger einfach als die App selbst.

Abgesehen von diesen Hauptaspekten gibt es auch bei den Details viele Unsicherheiten, weshalb ein reifes Team besonders wichtig ist. Ein erfahrener Entwickler wird – zumindest ungefähr – wissen, auf welche Probleme man während der Entwicklung stoßen wird, welche einfach sind und welche viel Zeit in Anspruch nehmen können. Das hängt von der Erfahrung ab. Ich sage oft einen Satz, der lautet:""Sag nicht leichtfertig, etwas sei einfach, wenn du es noch nie gemacht hast."Die Haltung, "anzunehmen, es sei einfach", nützt einem Projekt nichts. Wenn du dir nicht sicher bist, wende dich an jemanden mit Erfahrung in diesem Bereich. Selbst wenn du keine konkrete Antwort bekommst, erhältst du zumindest eine grobe Richtung. Recherchiere in diesen Richtungen, und du wirst die Probleme kennenlernen, auf die du stoßen wirst – allerdings oft noch nicht alle.

Zum Thema „die Schwierigkeit unterschätzen“ gibt es eine klassische Geschichte aus meiner vorherigen Firma. Damals gab es ein kleines Projekt: Wir planten, Mehrsprachigkeitsunterstützung für ein Programm hinzuzufügen, das bereits auf Instrumenten lief und nur Englisch unterstützte. Das Programm war nicht groß, und der betroffene Inhalt war auch nicht allzu umfangreich. Die Ingenieure dachten zunächst, es sei nur eine einfache Übersetzungsaufgabe, die in höchstens zwei Wochen erledigt werden könnte. Aber als sie anfingen, stellten sie fest, dass es überhaupt nicht einfach war. Zuerst musste die Übersetzung von Fachleuten erstellt werden; wir selbst konnten es nicht gut machen – keiner von uns war in europäischen Sprachen versiert. Dann kam die Einheitenumrechnung: Manche Länder verwenden das metrische System, manche das imperiale, also musste das berücksichtigt werden, einschließlich der Datumsanzeigeformate. Plötzlich war nicht absehbar, wie viel zusätzliche Arbeit aufgetaucht war. Als das meiste davon erledigt war, entdeckten sie, dass deutsche Wörter zu lang waren und nicht auf die Instrumentenbildschirme passten – sie überschritten den Anzeigebereich. Also passten sie Schriftarten an und kürzten Inhalte und hielten N-mal Besprechungen ab, um hin und her zu diskutieren. Als sie schließlich veröffentlichen wollten, stellten sie fest, dass die Programmgröße durch all diese Änderungen viel größer geworden war und der Speicher mancher Instrumente sie nicht fassen konnte. Da waren alle verblüfft. Also optimierten und verschlankten sie, und das Programm begann, etwas unübersichtlich zu werden. Am Ende bestanden sie die Prüfung der Qualitätskontrollabteilung kaum und veröffentlichten es schließlich – nur um festzustellen, dass es volle sechs Monate gedauert hatte. Wenn ich jetzt zurückblicke, war ein wichtiger Grund für den hohen Zeitaufwand mangelnde Erfahrung; die Unvertrautheit mit Mehrsprachigkeit und Internationalisierung führte sie auf viele Irrwege. Daher ist, wie ich bereits erwähnt habe, ein reifes Team besonders wichtig.

Bei der Schätzung der Projektzeit zählen wir oft nur "die Zeit, die mit dem Schreiben von Code verbracht wird", und lassen die Zeit außer Acht, die mit Diskussionen mit Vorgesetzten oder Kunden, Anforderungsanalyse, Design, Tests und Fehlerbehebung verbracht wird. Diese Zeiten zusammen übersteigen die Zeit, die mit dem Schreiben von Code verbracht wird, meist um ein Vielfaches. Ich persönlich nenne nicht einfach eine kurze Fertigstellungszeit, nur um meinen Chef zufriedenzustellen. Warum? Weil es einfach nicht machbar ist – warum also lügen? Wenn die Entwicklung eines neuen Features eine Woche erfordert, verdopple ich diese Zeit normalerweise, und das ist bereits relativ "nicht konservativ".

Selbst wenn man nur die Zeit zählt, die mit dem Schreiben von Code verbracht wird, wird sie oft unterschätzt. Der Chef oder Kunde ist möglicherweise unzufrieden mit dem, was du entwickelt hast – vielleicht hast du seine funktionalen Anforderungen missverstanden, oder die Oberfläche ist träge, oder die Symbolfarbe ist nicht schön. Du bist Entwickler, kein Grafikdesigner. Obwohl du zur Not als Grafikdesigner durchgehen magst, bist du letztlich kein Profi. Wichtiger noch: UI-Design zu machen und Bilder zu erstellen kostet ebenfalls viel Zeit. Wenn du dich verzweifelt mit "einem einzelnen Pixel" abmühst, sehnst du dich da nicht nach einem Designer im Team? In solchen Momenten musst du den Chef daran erinnern: Du musst zwischen Zeit und Funktionen gewisse Kompromisse eingehen. Der Chef wird sicherlich unzufrieden sein, aber er hat keine andere Wahl, als bei einigen Funktionen Kompromisse einzugehen. Auch wenn dies einem problembehafteten Projekt einen früheren Start ermöglicht, liefert es dem Chef zugleich eine großartige Ausrede für das zukünftige Scheitern des Projekts: "Unsere Ingenieure waren zu schlecht; sie haben nicht getan, was ich ihnen gesagt habe."

Neben der Beschwerde, dass das, was du gemacht hast, nicht schön genug aussieht, werden Chefs oder Kunden auch viele andere Dinge ansprechen: Kann diese Oberfläche auf Mehrfachauswahl umgestellt werden? Kann eine Benachrichtigungsfunktion hinzugefügt werden? Es sollte einen Gelesen-/Ungelesen-Status geben. Kann die Oberfläche ein bisschen flüssiger sein? Warum ist das Programm letzte Nacht einmal "abgestürzt" ... Die Anforderungen listen nur Funktionen auf, sagen aber nicht, wie schön diese UI sein soll, noch dass die Programmstabilität gut sein sollte, geschweige denn, welcher Durchsatz erreicht werden muss. Und natürlich – was vielleicht wichtiger ist – Sicherheit wird auch nicht erwähnt. Du erschrickst: richtig, wenn es Hacker gäbe – nein, solange ein böswilliger Benutzer mit auch nur ein wenig technischem Wissen unseren Server fluten wollte, wäre es viel zu einfach, und ich habe nichts von diesen Schutzmaßnahmen umgesetzt! Zum Glück ist das Projekt noch zu unbekannt, also muss das vorerst nicht berücksichtigt werden. (Es scheint, dass die meisten Apps nie den Punkt erreichen, an dem sie das berücksichtigen müssten.)

All diese Dinge – ob man sie Funktionen, Details oder Robustheit nennt – sind keine Dinge, die automatisch aus dem Boden wachsen; sie alle erfordern Zeit zum Nachdenken und zum Umsetzen. Manche sind sogar eine Aufgabe des "Systems Engineering". Wenn du den Kopf behandelst, wenn der Kopf weh tut, und den Fuß, wenn der Fuß weh tut, wird das System überall voller "fliegender Drähte" sein, was zweifellos viele versteckte Gefahren für die zukünftige Wartung hinterlässt. Hast du, der Ingenieur, sie alle bedacht? Ganz zu schweigen von der "unbedeutenden" Angelegenheit des leistungsschwachen Computers, den der Chef dir gekauft hat, um Kosten zu sparen, und der dich den ganzen Tag in den Wahnsinn treibt.

====================== Nicht ganz so schicke Trennlinie ======================

Also, nachdem Boss Wang sich von mir verabschiedet hatte, gründete er blitzschnell eine Firma, registrierte einen Domainnamen, besorgte ein Büro und trommelte sogar eine Gruppe von Leuten zusammen und brachte die Dinge mit hohem Tempo ins Rollen. Ich konnte nur spüren, dass ich gegen diese Dynamik und diesen Antrieb nicht ankam. Ich bereute es ein wenig, nicht mit ihm Karriere gemacht zu haben, aber das war nur ein emotionaler Blitz; die Rationalität holte mich innerhalb der nächsten paar hundert Millisekunden zurück: Geh lieber nicht – er und ich können einfach nicht kommunizieren.

Boss Wangs Projekt startete später durch und entwickelte sich rasant, und heute ist er CEO eines Unternehmens mit einem Wert von mehreren hundert Millionen. Was mich betrifft, fühle ich mich zunehmend wie ein Verlierer, sitze allein in meinem Büro, halte immer noch diesen Wasserbecher, voller Verdruss – halt! Wäre das nicht dramatischer? Aber obwohl ich ganz am Anfang erklärt habe, dass „jede Ähnlichkeit in dieser Geschichte rein zufällig ist“, kann ich nicht einfach Dinge erfinden. Das echte Ende ist: Sie rackerten tatsächlich ein paar Monate, dann wurde es plötzlich völlig still. Ich wollte ursprünglich Boss Wang anrufen und fragen, was los sei, aber leider war er zu einer weiteren superbeschäftigten Person geworden, die kein Interesse daran hatte, mit mir zu plaudern. Nun, das Ende ist ziemlich gleich – ich bin immer noch der Programmierer, der weiter im Büro sitzt und sich abmüht. Seufz, hör auf nachzudenken, an die Arbeit!

Quelle: http://www.cnblogs.com/guogangj/p/4676836.html