Web Entwicklung Projekt planen, anfertigen etc..

Milchbroetchen

Hello :-)
Hallo Zusammen,
ich brauch mal eure Meinung wie man am besten ein Projekt plant und umsetzt, genauer gesagt geht es um ein Projekt in php. Gitlab steht zur verfügung auf eigener Infrastruktur. Insbesondere interessiert mich wie man am besten vorgeht bei der Planung, Blaupausen, bis hin zum ersten Prototypen.

Wenn man ein Haus baut macht man ja auch erstmal ein grobes Aufmaß, was möchte ich, wie soll es ungefähr aussehen, was hab ich zur Verfügung, wie viele Etagen etc., danach fertig ein Architekt ja Baupläne etc.
Ich hoffe ihr versteht ungefähr worauf ich hinaus will. Über eure Antworten freue ich mich schon.

Es steht ebenfalls über Hetzner Cloud eine Infrastruktur bereit zum testen, Hosten etc. eine eigene Cloud Infrastruktur möchte ich mangels Zeit nicht selber betreiben und greife daher auf die Hetzner Cloud zurück. (Kosten etc.)

Mit freundlichen Grüßen

PS: Welche Software außerhalb Composer und GIT könnt ihr da empfehlen bzw. wären ggf. Wichtig? Entwickelt wird auf MacOS mit VSCode, in einer VM steht noch Linux zur verfügung, was aber nicht nötig sein wird da Mac ja auch ein UNIX ist. Ich möchte auf keinen Fall auf Windows angewiesen sein, dies lehne ich konsequent ab.
 
Agil - einfach anfangen
Klassisch - Pflichtenheft, Lastenheft, ...
(und noch viele "Varianten mehr für's Bullshit-Bingo") :)

Es gibt jede Menge Bücher, Artikel, Vorträge über Projektplanung in der IT - wo auch die jeweiligen Vor- und Nachteile der jeweiligen Methoden genannt werden.

mMn. ist das aber kein Thema, das man so nebenbei in einem Forum abfrühstückt...
 
Das dies kein Thema ist, welches man (mal eben) in einem Forum diskutiert ist mir absolut bewusst. Es soll auch einfach nur als Diskussion hier sein wie andere vorgehen, welche Empfehlungen andere aussprechen etc. Bis her bin ich immer wie du bereits erwähnt hast mit der Methode "einfach anfangen" vorgegangen.
 
Und auch wichtig:
- Automatisierte Tests schreiben für die diversen Programmodule
- Pentesting
- Dokumentation
 
Ich habe auch mal was von Diagrammen mittels UML gelesen, zur Übersicht, Dokumentation, ggf. Code Generierung und um einfach mal den (möglichen) Aufbau vor sich zu haben. Wie wichtig findet Ihr dies im Bereich der Webentwicklung?

- Pentesting
Das hatte ich tatsächlich komplett außer acht gelassen, hatte jetzt nur die Standard Sicherheitsvorkehrungen im Kopf (SQL Injection, Cross Site Scripting, etc.)
 
Last edited:
Vorneweg und ohne es böse zu meinen, aber mach einen grossen Bogen um alle Systeme welche SCRUM, ITIL, ATDD, Change Management, story-driven sind außer du bist Konsultant mit stundenbasierter Abrechnung. Wenn man in einem Forum fragt wie man es anfassen soll, hat das Projekt schlicht nicht die notwendige Komplexität und Ressourcen um solche Standards penibel ein zu halten und halbwegs einhalten bringt nichts.

Wenn man ein Haus baut macht man ja auch erstmal ein grobes Aufmaß, was möchte ich, wie soll es ungefähr aussehen, was hab ich zur Verfügung, wie viele Etagen etc., danach fertig ein Architekt ja Baupläne etc.
Ein Hausbau ist ein sehr umfangreiches Projekt und entweder du steuerst ins wahrscheinliche Desaster bei der Selbstorganisation oder du nimmst eine erfahrene Bauaufsicht/Verwaltung. Bist du bereit die notwendigen Aufwendungen in deine Software zu investieren? Wenn ja, na dann los!

Es steht ebenfalls über Hetzner Cloud eine Infrastruktur bereit zum testen
Stop, einen Schritt zurück. Wenn du eine simple agile Entwicklung im Stil von minimal-viable-product und iterativer Erweiterung willst - was ich stark empfehlen würde - musst du anfangs den Feature Scope definiren. Ansonsten passiert es dir wie jedem Entwickler und du landest in der Scope Creep Hölle, also dass ständig Funktionen beikommen oder ändern und dein Projekt schlicht nie Fortschritte macht.

Was also soll deine erste Version genau können, und wie soll sie ausgelegt werden. Rein beispielweise, muss dein Produkt direkt horizontal über mehrere Instanzen skalieren und das C10K Verbindungsproblem (massive Parallelisierung) können oder reicht es dass ein einzelner Benutzer es verwenden kann - und danach wird dann optimisiert?

DANACH kannst du dann mal die Infrastruktur-Frage stellen (Container-Stack wie docker-compose, Clustering wie Kubernetes, klassische VM, ....)

[Diagrammen mittels UML gelesen, zur Übersicht, Dokumentation, ggf. Code Generierung
UML-Diagramme sind in jedem Fall sehr sinnvoll - auch für dich selber. Niemand kann die ganzen Datenstrukturen im Kopf halten und auch über längere Zeit noch alle Relationen verstehen. Bei Datenbank-Entwurf werden Tools wie bspw MySql-Workbench diese Arbeit grafisch teilweise abnehmen. Zur Code-Generierung (Stubs) bin ich kein sonderlicher Fan, aber das ist Geschmackssache.

Welche Software außerhalb Composer und GIT könnt ihr da empfehlen bzw. wären ggf. Wichtig?
Gitlab ist weit mehr als "nur" ein Git. Pull Requests, Issue Tracking, Continuous Integration, Build-Trigger, automatische Software-Tests, ... du kannst damit die ganze "nervige" Arbeit der Entwicklung vereinfachen und teilautomatisieren sofern deine Möglichkeiten es zulassen. Ich würde empfehlen bei Projekten mit grösserer Laufzeit dies zuerst zu implementieren, um dir viele Stunden Arbeit ab zu nehmen.
Kombiniert mit zB Werkzeugen wie ReadTheDoc welche automatisiert Dokumentation generieren gibt es schon mal eine solide Basis.

in einer VM steht noch Linux zur verfügung, was aber nicht nötig sein wird da Mac ja auch ein UNIX ist.
UNIX und Linux sind in einigen Bereichen sehr nah und in anderen ach so fern. Entwickle auf der Plattform wo es nachher laufen soll und bestenfalls (sofern lokal) in einer sauberen VM und nicht einem bereits "zugemüllten" Arbeitssystem.

Ich möchte auf keinen Fall auf Windows angewiesen sein, dies lehne ich konsequent ab.
Einen kleinen Hinweis auf den Hersteller von VSCode kann ich mir aber hier nicht verkneifen ;)
 
Hi,
erstmal lieben Dank für deinen sehr ausführlichen Beitrag @d4f !

Ein Hausbau ist ein sehr umfangreiches Projekt und entweder du steuerst ins wahrscheinliche Desaster bei der Selbstorganisation oder du nimmst eine erfahrene Bauaufsicht/Verwaltung. Bist du bereit die notwendigen Aufwendungen in deine Software zu investieren? Wenn ja, na dann los!
Definitiv ist mir das absolut bewusst und ich bin bin mir auch absolut im klaren, dass wenn man alleine Entwickelt sehr viele fehlschläge einstecken muss. Trotzdem bin ich bereit dies auf mich zu nehmen und mein Know How zu verbessern.

Stop, einen Schritt zurück. Wenn du eine simple agile Entwicklung im Stil von minimal-viable-product und iterativer Erweiterung willst - was ich stark empfehlen würde - musst du anfangs den Feature Scope definiren. Ansonsten passiert es dir wie jedem Entwickler und du landest in der Scope Creep Hölle, also dass ständig Funktionen beikommen oder ändern und dein Projekt schlicht nie Fortschritte macht.

Was also soll deine erste Version genau können, und wie soll sie ausgelegt werden. Rein beispielweise, muss dein Produkt direkt horizontal über mehrere Instanzen skalieren und das C10K Verbindungsproblem (massive Parallelisierung) können oder reicht es dass ein einzelner Benutzer es verwenden kann - und danach wird dann optimisiert?
Vielen Dank dafür, darüber sollte ich mir definitiv nochmals Gedanken machen, einige Ansätze habe ich schon. Dazu habe ich mir eine Liste gemacht und einzelne Punkte immer wieder gegenüber gestellt mit Pro und Contra verglichen (Was ist besser, Warum so machen wenn es auch anders geht, etc.)

UML-Diagramme sind in jedem Fall sehr sinnvoll - auch für dich selber. Niemand kann die ganzen Datenstrukturen im Kopf halten und auch über längere Zeit noch alle Relationen verstehen. Bei Datenbank-Entwurf werden Tools wie bspw MySql-Workbench diese Arbeit grafisch teilweise abnehmen. Zur Code-Generierung (Stubs) bin ich kein sonderlicher Fan, aber das ist Geschmackssache.
Da bin ich zur Zeit tatsächlich dran, viele dinge zu übertragen als UML Diagramm, bin mir auch Gedanken am machen über das Datenbank design. Über die Automatisierte Codegenerierung habe ich mich noch keine Gedanken gemacht, was jedoch sicher feststeht ist das MySQL als Datenbank zum Einsatz kommt. Hintergrund ist einfach ich arbeite damit schon lange genug um einen MySQL Datenbankserver auch vernünftig und sicher verwalten zu können.

Gitlab ist weit mehr als "nur" ein Git. Pull Requests, Issue Tracking, Continuous Integration, Build-Trigger, automatische Software-Tests, ... du kannst damit die ganze "nervige" Arbeit der Entwicklung vereinfachen und teilautomatisieren sofern deine Möglichkeiten es zulassen. Ich würde empfehlen bei Projekten mit grösserer Laufzeit dies zuerst zu implementieren, um dir viele Stunden Arbeit ab zu nehmen.
Kombiniert mit zB Werkzeugen wie ReadTheDoc welche automatisiert Dokumentation generieren gibt es schon mal eine solide Basis.
Das hab ich bereits bemerkt das dies ein sehr mächtiges Tool ist und werde mich definitiv in dem von dir genannten Bereichen noch weiter und intensiver einlesen.

UNIX und Linux sind in einigen Bereichen sehr nah und in anderen ach so fern. Entwickle auf der Plattform wo es nachher laufen soll und bestenfalls (sofern lokal) in einer sauberen VM und nicht einem bereits "zugemüllten" Arbeitssystem.
Vielen dank für den Tipp! Ich arbeite zuhause nur mit MacOS und habe aber tatsächlich für viele Dinge immer noch eine Linux VM mit Manjaro Linux am laufen, gerade für solche Dinge.
Einen kleinen Hinweis auf den Hersteller von VSCode kann ich mir aber hier nicht verkneifen ;)
Ja, den Hersteller kenne ich und bin auch kein Freund von Ihm, jedoch hat er bei VSCode alles richtig gemacht (Muss man tatsächlich einfach mal so sagen), von allen IDE's bzw. Code Editoren mit denen ich gearbeitet habe ist VSCode einfach enorm mächtig und Flexibel und sehr leicht zum handhaben. Weswegen der Editor definitiv die Nummer 1 ist. Ja auch Jetbrains hat mit php Storm eine super IDE keine Frage, aber unter der Haube ist halt wieder Java und generell finde ich sie schon sehr teuer weswegen sie bei mir einfach raus ist.

Ich möchte mich sehr bei euch für die Super antworten bedanken und hoffe hier auf weitere konstruktive Diskussionen.
 
Dazu habe ich mir eine Liste gemacht und einzelne Punkte immer wieder gegenüber gestellt mit Pro und Contra verglichen (Was ist besser, Warum so machen wenn es auch anders geht, etc.)
Ich kenne die Details deines Projektes nicht, aber in vielen Szenarien sind Mockups durchaus sinnvoll, also eine testweise Implementierung von Teilfunktionen.
Beachte dass es eine sehr unscheinbare Linie zwischen "Was ist besser" und vorzeitiger Optimisierung gibt. Eine deutliche Trennung zwischen must-have, should-have, nice-to-have ist sehr wichtig und man muss sich daran halten (siehe Feature Creep weiter open). In deiner ersten Phase solltest du dich nur auf must-have Konzentrieren, und das jeweils auch nur in einem "Must-have" Umfang.
Beispiel: Du hast eine fiktive Userstory "Als Benutzer muss ich mich identifizieren können". Must-have ist "Benutzername + Password". Should-Have wäre evtl OAuth über Google/..... Nice-to-have wäre Multifaktor-Authentifizierung.

was jedoch sicher feststeht ist das MySQL als Datenbank zum Einsatz kommt. Hintergrund ist einfach ich arbeite damit schon lange genug um einen MySQL Datenbankserver auch vernünftig und sicher verwalten zu können.
Auch wenn das durchaus eine relevante Rolle spielt, muss deine erste Frage immer sein: was ist die beste Wahl für Produkt und Einsatzzweck und erst danach "was kann ich schon". Alternativ gibt es auch den Weg der Datenbank-Astraktion über ORM, also dass code-driven die Datenbank verwaltet wird - zufälle Beispiele wären Python SQLAlchemy oder PHP Doctrine.

Ja, den Hersteller kenne ich und bin auch kein Freund von Ihm, jedoch hat er bei VSCode alles richtig gemacht
Es sollte nur ein Kommentar dazu sein dass Microsoft als Hersteller auch nicht schwarz-weiss ist :)
 
Hey,
sorry habe total vergessen zu antworten! :(
Ich kenne die Details deines Projektes nicht, aber in vielen Szenarien sind Mockups durchaus sinnvoll, also eine testweise Implementierung von Teilfunktionen.
Beachte dass es eine sehr unscheinbare Linie zwischen "Was ist besser" und vorzeitiger Optimisierung gibt. Eine deutliche Trennung zwischen must-have, should-have, nice-to-have ist sehr wichtig und man muss sich daran halten (siehe Feature Creep weiter open). In deiner ersten Phase solltest du dich nur auf must-have Konzentrieren, und das jeweils auch nur in einem "Must-have" Umfang.
Beispiel: Du hast eine fiktive Userstory "Als Benutzer muss ich mich identifizieren können". Must-have ist "Benutzername + Password". Should-Have wäre evtl OAuth über Google/..... Nice-to-have wäre Multifaktor-Authentifizierung.
Das werde ich auf jedenfalls berücksichtigen!

Auch wenn das durchaus eine relevante Rolle spielt, muss deine erste Frage immer sein: was ist die beste Wahl für Produkt und Einsatzzweck und erst danach "was kann ich schon". Alternativ gibt es auch den Weg der Datenbank-Astraktion über ORM, also dass code-driven die Datenbank verwaltet wird - zufälle Beispiele wären Python SQLAlchemy oder PHP Doctrine.
PHP Doctrine klingt sehr interessant, was wiederum auch den modularen Aspekt steigert. (Was auch ein schuld have wäre)

Es sollte nur ein Kommentar dazu sein dass Microsoft als Hersteller auch nicht schwarz-weiss ist :)
Alles gut, hab dass schon verstanden :)
 
Back
Top