
Auch Google ist im Kern eine Softwarefirma. Natürlich keine normale Softwarefirma, sondern vielleicht die innovativste, die es derzeit gibt. Die Herausforderungen, vor denen Google steht, sind beträchtlich. Hier ein paar Fakten:
- Google hat über 5000 Entwickler in über 40 Büros
- über 2000 Softwareprojekte, die aktiv entwickelt werden
- über 50.000 Software-Builds jeden Tag!
- über 100.000.000 Testfälle jeden Tag
- pro Minute über 20 Core Changes (jede Minute!)
- d.h. 50% des gesamten Sourcecodes wird pro Monat verändert
Die bemerkenswerteste Besonderheit ist sicher, dass Google einen einzigen monolitischen Code-Strang managed, also alles vom Kernel bis zu Applikation (e.g. Gmail oder Analytics). Das bedeutet, dass jeder Google Entwickler seine Changes auf Basis des originalen CodeTrees eincheckt, so dass alle Binaries direkt aus dem Sourcecode kompiliert werden. Bemerkenswert!
Wenn Google also beispielsweise eine neue Chrome Release erstellt, werden nicht nur die unmittelbar zur Applikation gehörenden Codes erstellt, sondern auch alle darunterliegenden Baselibraries „build from source“.
Alles – aber auch wirklich alles - direkt aus dem Quellcode (statt aus Binaries) zu bauen, führt natürlich zu enormen technischen und organisatorischen Herausforderungen, die man erst einmal lösen muss.
Zunächst muss sichergestellt werden, dass der TreeHead, in den eingechecked werden soll, stabil ist. Diese erste Phase realisiert Google mit einer automatisierten Testreihe, die gegen die changes gelaufen werden. Das wiederum erfordert von den Entwicklern, dass diese Tests auch bei der Entwicklung geschrieben werden; was heutzutage aber nun wirklich zu jeder guten Softwareentwicklung gehört. Das eigentlich Besondere an „development from head“ ist, dass jeder Entwickler Änderungen am Kernel, Gmail oder Picasa vornehmen kann, also am kompletten Applicationstack arbeiten kann.
In diesem CodeTree verwendet Google viele technologische Plattformen, wenngleich der größte Teil des Codings in c++ und java erstellt wird.
Google investiert darüber hinaus in ganz besonderem Maße in die Entwicklungsinfrastruktur. GFS, BigTable oder das FUSE Filesytem stehen jedem Entwickler sofort zum Prototyping zur Verfügung. Jeder Entwicklungsstrang basiert auf den gleichen Tools, aber auch auf identischen organisatorischen build, test, release Abläufen. Der enorme Vorteil ist Softwarequalität, denn jeder Schritt im Entwicklungsprozess verwendet die Infrastruktur, die auch die Produkte verwenden wird.
Auch im Entwicklungsprozess holt Google seine Stärke aus dem „messen, zählen, wiegen“, was man in der Softwareentwicklung aber „data-driven“ nennt. Wie soll man etwas verbessern, was man nicht messen kann? Google misst auch in der Softwareentwicklung alles! Das führt zu:
Klarheit, Geschwindigkeit und Qualität im Software Entwicklungsprozess.
Fazit:
- Invest in developer infrastructure
- Parallelize & Distribute where possible
- Hire the best / design for scale
- Measure everything
Infrastruktur für Builds & Test muss absolut geräuschlos funktieren. Dabei geht es natürlich nicht nur um das RAD, BuildMetadata oder den einzelnen Compiler, sondern vielmehr um die Prozesse um den Entwicklungsprozess selbst.
Code visuaisation & code analysis & code documentation...
...CODE REVIEW ist der Schlüssel für Erfolg.
Anmerkungen, Kommentare oder Anregungen sind herzlich willkommen. Bitte aber nicht über das Kontaktformular sondern direkt per E-Mail Holger Wiesner.