David
Deutsch


Selbstständiger Webentwickler

Über mich

Persönlich

Mein Name ist David Deutsch, ich bin 37 Jahre alt und lebe mit meiner Familie in Herne.

Seit meiner Kindheit faszinieren mich Gestaltung, Technologie und Handwerk gleichermaßen - deshalb vereine ich alle drei in meiner Arbeit.

David Deutsch

Professionell

Als Fullstack Web-Entwickler und Gestalter bringe ich 16 Jahre Berufserfahrung mit.

In den ersten 8 Jahren lag mein Fokus auf Backend-Entwicklung, insbesondere einem E-Commerce Plugin für ein bekanntes CMS. Anschließend erweiterte ich mein Tätigkeitsfeld um Frontend-Arbeit für 6 Jahre. In den letzten 2 Jahren konzentrierte ich mich verstärkt auf Systementwicklung.

Als Selbstständiger Entwickler betreue ich verschiedene Kunden und realisiere kreative Projekte im Web- und Print-Bereich sowie e-Commerce-Lösungen in Eigenentwicklung.

Mit den meisten gängigen und modernen Web-Technologien, Applikationen, Content Management Systemen und Bibliotheken bin ich vertraut oder kann mich schnell einarbeiten.

Ich lege großen Wert auf fundierte Kenntnisse, auch in grundlegenden Bereichen wie HTML und CSS, um Systemkomplexität zu reduzieren.

UX

Meine Fähigkeiten

Mit meinem grafischen Talent und der Kompetenz, komplexe Sachverhalte klar und verständlich zu kommunizieren, gestalte ich ästhetisch ansprechende Webseiten. Dabei lege ich Wert auf einen klaren Erzählfaden, der den Betrachter oder Nutzer informiert und leitet. Gleichzeitig kann ich bestehende Designvorgaben präzise umsetzen oder auf vorhandenen Gestaltungen aufbauen und sie optimieren.

Die von mir erstellten Webseiten sind selbstverständlich vollständig responsive und mit allen gängigen Browsern kompatibel.


Innovation und Forschung im Web-Bereich

Seit acht Jahren entwickle ich ein System zur Erstellung hoch optimierter und komprimierter Webseiten, das ich seit einem Jahr erfolgreich für meine Kunden einsetze. Diese Seite ist ein Beispiel dafür, weitere Beispiele finden Sie weiter unten.

Mein Ansatz zur Systemarchitektur ist frontendorientiert, wobei meine serverseitigen Fähigkeiten unterstützend wirken.

Generell liegt mein Fokus darauf, serverseitige Komplexität – insbesondere dynamischen Code – so weit wie möglich zu reduzieren, im Idealfall vollständig.

Arbeitsproben Web-Entwicklung

Bei diesen Seiten habe ich die Gestaltung und Umsetzung übernommen, unter der Nutzung meiner eigenen Software:

(*bei dieser Seite wurde eine bestehende Gestaltungsvorlage - ein WordPress Template - übernommen und angepasst)


Bei diesen Seiten habe ich ebenfalls die Gestaltung und Umsetzung übernommen, unter Einsatz von bestehender Software:

(Inklusive der Buchcover und aller Logos)

Arbeitsproben Design & Layout

Junge Impulse 2017Tanzfestival 2017

Junge Impulse 2018Tanzfestival 2018

NightlightDinner 2018lokales Event der Stadt Herne 2018

HipYo! 2018Jugendfestival 2018

Haskell AlmanacBuch Cover 2017

Haskell BookBuch Cover 2017

Bücher

Leitsätze

Meine Arbeitsweise in vier Leitsätzen:

1.

Probleme lösen ist gut, sie gar nicht erst entstehen zu lassen ist besser.

2.

In der Programmierung gibt es universell gültige Ziele und Maßstäbe*.

3.

Mangelhafte Kommunikation bringt mehr Software-Projekte zum Fall als technische Entscheidungen.

4.

Wer nicht aus der Vergangenheit lernt, wird sie immer wieder neu implementieren.

*(Insbesondere die Minimierung von verschwendeten CPU-Zyklen.)

Wie ich arbeite

Beispiele für die Qualität meine Arbeitsweise:

Serverseitige Probleme durch clientseitige Lösungen reduzieren

Ein Kundenshop mit hoher Benutzerfrequenz sollte zusätzliche, kundenspezifische Daten auf allen Shop-Seiten anzeigen. Der ursprünglich geplante Ansatz mit serverseitigem Rendering hätte die Optimierungen durch Caching-Server eingeschränkt und aufwendige Änderungen an der Caching-Infrastruktur erfordert, um diese Dynamik zu unterstützen.

Stattdessen habe ich einen Low-Tech-Ansatz vorgeschlagen: Die kundenspezifischen Daten werden bei ihrer Entstehung (z.B. bei Click-Events) im Browser gespeichert (IndexedDB/LocalStorage oder Cookies als Fallback) und dynamisch im bestehenden Markup nachgerendert.


Optimierung von Build-Prozessen

Bei einem proprietären CMS-Projekt wurde Gulp zur Kompilierung der Browser-Assets eingesetzt. Die Laufzeit dieses Prozesses betrug je nach Projekt zwischen 3 und 6 Minuten. Neben der mangelnden Geschwindigkeit traten häufig schwer verständliche Fehler auf, die nur von erfahrenen Anwendern behoben werden konnten – problematisch in einem Unternehmen mit hauptsächlich PHP-Backend-Entwicklern.

Während der Suche nach einer Alternative zu Gulp wurden verschiedene Optionen in Betracht gezogen (z.B. webpack, Parcel), doch in Tests zeigten sich keine signifikanten Geschwindigkeitsvorteile und meist eine geringere Verständlichkeit.

Daher habe ich die bestehende Funktionalität mithilfe von Linux/Unix-Basis-Tools, vor allem make und der Shell, nachgebildet und die Lücken (z.B. das Auflösen von SASS-Abhängigkeiten) mit PHP-CLI-Scripts gefüllt. So war die Verständlichkeit für die anderen Entwickler gewährleistet. Die Laufzeit reduzierte sich auf durchschnittlich 30 Sekunden oder sogar 12 Sekunden, wenn das native Threading von make genutzt wurde.


Das Unmögliche möglich machen

Die Software, an der ich momentan arbeite

Für die verschiedenen Webseiten-Projekte, die ich betreue, habe ich eine maßgeschneiderte Software zum Erstellen von Webseiten entwickelt. Sie ähnelt konzeptionell bekannten Static Site Generatoren, ist jedoch speziell auf hohe Produktivität und langfristige Betreuung von Projekten mit geringem Aufwand ausgerichtet. Während herkömmliche statische Generatoren eher wie dynamische Seiten plus Caching aufgebaut sind (und damit ähnlich wartungsaufwendig), basiert mein System auf einem Abhängigkeits-Graphen, der durch eine Zusammenstellung von Prozessen aufgelöst wird.

Schlüsseltechnologien und -konventionen umfassen:

  1. Einen Expression Parser, der Expressions nicht direkt interpretiert, sondern sie in ausführbaren Code oder Shell-Kommandos umwandelt, die dann beim Rendern der Seite ausgeführt werden.
  2. Ein auf WebComponent-Struktur basierendes Templating, das beliebig und mit geringem Aufwand erweiterbar ist.
  3. Inhalte werden als reine Source-Dateien gespeichert; Vermeidung von Datenbanken und Rendering von Nutzdaten bei Änderungen durch den Autor statt beim Aufruf durch den Benutzer.
  4. Automatische Dependency-Auflösung zwischen und innerhalb von Inhaltsseiten und Assets, die einen make-ähnlichen Build-Prozess ermöglichen.
  5. Direkte Einbindung von git (z.B. für parallel verfügbare, lokal gehostete Feature-Branches).
  6. Umsetzung der Geschäftslogik mithilfe von Statecharts mit entity-übergreifendem Aktionsradius, wodurch bis zu 90% der projektspezifischen Programmierung in deklarativen Formaten realisiert werden können.

Die Vorteile:

1. Sichere Webseiten durch statische Präsentation und schmale Schnittstellen

Obwohl die aktuelle Version meiner Software ein Backend beinhaltet und das Rendering auf dem Server stattfindet, bleibt die Sicherheit der Webseiten erhalten. Die Endkunden erhalten weiterhin nur statische Inhalte, und Schreibzugriffe auf den Server erfolgen über sehr schmale, kontrollierte Schnittstellen. Dadurch wird das Risiko von Sicherheitslücken minimiert, während gleichzeitig die Flexibilität und Funktionalität des Systems erhalten bleibt. Dies ist besonders wichtig, da bei (automatischen) Software-Updates, wie sie bei Content-Management-Systemen wie WordPress üblich sind, Sicherheitsprobleme häufig auftreten.

2. Schonung von Serverkapazitäten und Skalierbarkeit

Ein weniger belasteter Server (im Idealfall: nur das Ausliefern fertiger Dateien) ist auch bei plötzlichem Erfolg besser gewappnet. Statische Inhalte lassen sich zudem gut und kostengünstig skalieren.

3. Maximal komprimierte Webseiten die rasend schnell laden

peterzwierzynski.de

Hier ist peterzwierzynski.de ein gutes Beispiel: eine vollständige Webseite in 141kb. Bei gängigen Performance-Testing-Tools (wie Google Lighthouse, GTmetrix, Pingdom) erreicht sie die höchste oder nahezu höchste Punktzahl. Auf einem aktuellen Desktop-PC wird die Seite in unter 150ms nach Aufruf der Domain gerendert. Noch wichtiger: Bei schlechter Mobilverbindung sind es in der Regel unter 2 Sekunden.

Solche Komprimierung ist in herkömmlichen Systemen nicht unmöglich, aber entweder aufwendig in die Systemstruktur integriert oder an Drittdienste/Abstraktionsschichten wie mod_pagespeed ausgelagert, was neue Fehlerpotentiale birgt. In meinem System wird dies nativ unterstützt.

4. Pragmatische Problemlösung mit nativen, herkömmlichen Tools

Anstatt ein allumfassendes System zu entwickeln, konzentriere ich mich darauf, bestehende Software effektiv zu vernetzen und an verständlichen, zentralen Knotenpunkten anzubinden. Man kann sich das wie einen direkten Zugriff auf alle Daten und Möglichkeiten einer Unix/Linux-Shell direkt im Template vorstellen.
Das ist natürlich eine starke Vereinfachung, und ich bin mir der damit verbundenen Probleme bewusst (zu viel Macht für Entwickler, undurchsichtige Systeme durch fehlende Trennung, wie z.B. bei MVC). Bisher sind jedoch keine solchen Schwierigkeiten bei den Webseiten aufgetreten, die ich mit diesem System erstellt habe, und ich vermute, dass sie eher Symptome dynamischer Systeme sind. In kompilierten Systemen ist die Perspektive ganz anders.

Im Internet

Man kann mich finden:

David
Deutsch

Kontakt: david@daviddeutsch.eu