I believe that a sole developer should not necessarily develop in the same manner as a team. Doing so (to me anyway) is inefficient to some degree and involves a lot of context switching. When I am developing a project by myself, I believe in following a different pattern than when in a team.
Generally a team will break up the project by modules or in dated deliverables (sprints). The DBA handles the database concerns, the SysAdmin/DevOps folks take care of the deployments & builds and there is often a separate team of testers. A developer in this scenario will often switch between coding the db, coding tests, coding the app to make the tests pass (if doing TDD), then going back to the db and so on until the module is finished. I have seen several projects by a single developer go from module to module - with the same operations being performed but for a different feature. Developing like this means switching up contexts more than just staying in the same area (either the database or the app code) until I have done the majority of the work. So I want to try something new on this project - a personal experiment.
I will start with a simple app with 1 page that reads from a single table. Then I will move to the role of a tester to write all the tests needed to insure the correct operation of the app (in BDD) at this point in the application’s development, to lay the basis for my testing functionality. Then I will switch roles to DevOps to build the entire CI-CD pipeline to deploy the app to production. So by doing all the DevOps up front, all future development efforts will just flow thru the system to production.
Next I will create the database for the entire app, & then move on to coding. I think that this would provide the least amount of context switching in creating an app. And hopefully, I can get into a groove of doing specific operations on a variety of slightly changing variables as opposed to moving around from module to module. However (hey, this is real world work - not theoretical academic pixie dust), I do intend to do some cross-cutting concerns as part of my natural code writing. Security, testing, & logging are, to me, a natural part of writing code because I personally feel that you can’t just “layer them on afterwards” like adding features to a Mr. Potatoe Head toy. I believe a developer should naturally write secure and sound code as a matter of course, and not as a separate stage or module.
So, … we’ll see how this plan works out. Sometimes the first casualty in a war is the plan :-) .
tldr; I will write this project with a hint of waterfall. Instead of writing a series of modules I will create the DevOps portion ==> create the database ==> all the read functions ==> all the create functions etc. etc. … . How’s that for “FUNctional programming” ? :-)