Schreibe erst einmal ein Konzept.
Alle UseCases beschreiben.
Alle Geschäftsregeln.
Alle Fehler Situation.
Alle Oberflächen (Eingabemasken) in Power Point oder einem Programm Deiner Wahl malen und alle gültigen Eingabewerte und Fehlerwerte für die einzelnen Felder definieren.
Alle Benutzergruppen, Rollen und Rechte definieren.
Alle Sicherheitsanforderungen definieren.
Denke auch an nicht funktionale Anforderungen wie z.B. Wartbarkeit, Fehlerbehandlung, Logging usw.
Wenn Du das hast, dann kannst Du den Aufwand schätzen.
Nimm grob ein Tag pro Maske.
Einen Tag, um das Projekt aufzusetzen.
Zwei bis drei Tage für die Datenbank.
Fünf Tage für die Dokumentation.
Ein bis zwei Tage für die Übergabe.
Fünf Tage für das Härten der Anwendung (Stichwort Sicherheit, Webanwendung).
Zwei bis drei Tage Kommunikationsoverhead.
X Punkte, die ich gerade vergessen habe.
Alles, was als Anforderung / Überschrift in Deinem Konzept steht und noch nicht aufgeführt wurde ebenfalls mit einem Tag schätzen.
Und am Ende multiplizierst Du das ganze mit 1,5 dafür, dass Du mit jemanden zusammenarbeiten musst, den Du nicht kennst.
Dann hast Du eine grobe Schätzung, die höchstwahrscheinlich über dem liegt, was Dir Deine Agentur gesagt hat.
Dann nimmst Du 100 Euro Stundensatz für eine grobe Kostenkalkulation und suchst jemanden in Deiner Nähe, damit Du persönlich mit dem reden kannst.
Offshore Projekte scheitern fast immer.
Zeitplan, Meilensteine und Abnahmeergebnisse für die einzelnen Meilensteine nicht vergessen.
Geld nur beim Erreichen der Meilensteine.
Mit jedem Meilenstein muss die Software lauffähig und in sich geschlossen sein.
Also bei der Konzeption gleich in Features denken und so gruppieren, dass Du schon mit dem ersten Meilenstein eine Software hast, die einen Mehrwert bietet und anschließend nur noch um optionale Features erweitert wird.
Da fällt mir ein, wie sieht das Verkaufsmodell aus?
Wenn es auf verschiedenen Featuresets basiert, dann muss das bei der Softwareentwicklung von Anfang an mit geplant werden.
Das kann man später nur schwer nachträglich einbauen.