"Carpool" is a simple desktop application, that generates carpooling table from worker time schedules and car ownership information.
Workers who has same work location and shift, should drive together to workplace. The company has over 100 workers and carpool table was created manually. The client wants to automate this process. And here I am: Motivated, Excited and Cheap
Do not add "nice to have" features. Do not suggest any new features and functionalities to client. If client requests new feature, just say: "Let us finish this core functionality and then add new features"
After 2 month the Client wanted to persist, edit, delete and update workers in the Application. The data should has been saved in the cloud and accessible from every device. Now it is no more simple desktop application but a Software as a Service (SaaS) with high complexity. This changed everything and my focus shifted from what Client really needed to what was possible to implement.
Never start programming backend, before Frontend. Even better do not program backend at all, take service like Firebase to persist you data.
I started writing simple CRUD Microservice for workers. But it did not end there, I added Keycloak for Authentication, added pipelines to automate deployment, configured NGNIX to redirect requests, used docker compose to wrap services and create network between them, added SSL Certificate to Homepage.
After we spent a lot of time doing DevOps (Operations), we moved to Firebase. All that great programming work was just waste of time (sad). Firebase provided all resources we needed. It took only 1 week to adapt Web App to Firebase. Just WOW!
Give weekly feedback to your customer, even if he does not explicitly ask for it. A simple E-Mail is enough. It also serves as your progress documentation.
As our Project grew more and more complex, we had less and less time for anything except programming or so we thought. Even "small" features, like adding avatar to worker took 4 dev days. I really regret not communicating it to the customer. Our hard work were unnoticed.
Bad plan is better than no plan. Create stories, create tasks, create milestones.
We started with no plan, then we wrote our tasks in Excel Sheet :D, then we started using Jira. Jira worked best for us. We created a lot of Tasks and it was frightening how much work was to do. Then we started working on tasks, delivering very slowly feature after feature.
Before you start working on web app, create a UI Mock or draw the UI on the paper.
I explained to my business partner what I want to have but he always delivered something else. Then I started drawing on Paper and saving them as part of a task. It improved the communication and quality of the work enormous.
Underpromise, overdeliver!
In the end our client did not want us to continue to work on the project anymore. We lost a lot of time and trust of our client.