Do you know the feeling when you already investigated some time in a project and after some months you loose your motivation to keep developing your current project? You have a new idea, start from scratch and you are stuck in an endless loop without a breakout.
At the moment this is my round about my 5th iteration and after some years experience I try to improve my workflow again and again. The first projects were some simple community forums. After it I tried to create an online music player just before some one ever talked about SaaS.
Little games and a news feed app were also part of my projects. Most of them are just gone because it was not "entertaining" anymore after a basic version went live.
I started with simple php project, after I implemented my first single page application and finally I set up an micro service based application that uses reactive frameworks to communicate effectively with other parts of the application connected to an CI and CD environment that contains all tiers of tests.
My first project workflow was like:
Fix a bug locally -> test it manually -> add a feature switch (get parameter) -> push it via ftp -> test it in the running application.
My current workflow is:
Write a test -> fix the bug -> git push -> CI does testing, building, integration testing and deploys it automatically if everything worked correctly
Compared to my early days I see some advantages:
- a better development experience
- a reliable safety net based upon unit tests and integration tests
- scalability based upon docker and micro-services
- performance based upon simple no sql based solutions
and complexity disadvantages:
- communication and release management for micro-services
- real front-end architecture that needs to be planned, tested and implemented
- docker for more flexibility and simplicity in terms of testing and production environments
- root server for more possibilities that needs to be managed (tools, scalability, testing environments)
- manage gitlab, jenkins for CI and CD
- integration test framework
- end to end test framework
- security for the whole infrastructure
- slack, trello, google docs for team member communication
It feels like the distracting things are getting more and more over time. But does they make things slower on a small development team or are they the base that makes scaling possible without getting slower as soon as complexity increases.
The latter assumption sounds like the right one. But probably there is some truth in the former one too. Especially when your projects are simple and short-living adding a big infrastructure with a lot of automation costs a lot of time. But if you don't use best practices like adding integrations tests to your project besides your unit tests you will probably end up in untested environment that behaves fragile as soon as your project is becoming very popular. When you are in this lucky state of popularity then you probably also want to prove that you can add features very quickly. But without an solid infrastructure you will make mistakes and you will slow down because of the missing automation.
So going steady and slow (in the beginning) is probably pretty fast in a more mature state.