The web development decision firehose
I'm writing a simple internet forum as a hobby project. Here are some of the questions I asked myself along the way that would apply to any web app with a server component. I had to build in some explicit answers to these questions based on the choices I made.
Which programming language?
Which version of Python?
Which Python package manager?
Which web framework?
How should I interact with the database?
Which Python ORM library should I use?
Should I develop against SQLite, or use a “real” database from the start?
When I query the database, should I use fancy ORM features, or more direct queries?
Should I store passwords, or only use OAuth?
How does secure password storage work these days?
How will I inevitably mess up password storage?
Should I do access control ad hoc, or learn the web framework's sophisticated API?
Should I do form validation ad hoc, or research the right library and learn it?
What the heck does REST actually mean? Do I care?
Should I write my API like a normal person, or add a fancy REST framework?
How much JavaScript will I use?
How will I get my Python web server to show my JavaScript?
Which JavaScript package manager?
Which JavaScript build system?
Should I use plain CSS, or SASS?
Which JavaScript framework will I use, if any?
Is this JavaScript library I want to use actually finished and maintained?
Do I care about Web Components?
What browser versions do I want to target?
What browser features can I use these days?
How can I get my Python web server to live-reload when my JavaScript changes?
How will my CSS and JavaScript build pipelines change when I switch from development to deployment?
Should I write my own wrapper around fetch
, or use someone else's?
Should I render most of my markup on the server, or in the browser with JavaScript?
What the hell is hot module reloading? Can I disable it?
Should I worry about GDPR?
Am I doing anything now that's going to make deployment difficult later?
That's it for now. I feel like I'm about halfway through the final list.