What's the best book you read in 2019?
Feel like I'm living in the movie Ground Hog's Day as I keep running into the same topics over and over this week in regard to picking the "right" or "best" dev stack and the "right" or "best" way to structure an application.
I've chimed in on a few of these, usually stating the same thing. Thought maybe a quick brain dump would be a good thing.
Fact is, it doesn't freaking matter. Your customers don't care if you're running on X, they care if your service is fast and has good up time. Over time, they will care about how fast you're fixing bugs and shipping new features.
There's merit in trying to build a perfect project with a clean structure that you /think/ will be maintainable long term. But it's often all for naught because circumstances change that will probably render your current decisions as bad ones.
Technologies change. Project structure ideologies change. Your product will change.
So why spend so much time consuming yourself with these moot things?
The only thing that truly matters is your ability to iterate quickly.
The language you can quickly iterate in is often the language you're the most fluent in. Same deal with project structure. Put files where you will remember where they are.
Not to be a defeatist, but good chance many of us won't ever get to the point we're hiring developers, so solid chance all of the bad code we write today will NEVER impact anybody but ourselves.
Same holds true for hosting. If you're capable with managing a Linux server, go with a VPS. Got a background in containers, do it that way. Which company has the most up time? None of them, 100% up time is a myth and your ability to build a distributed infrastructure is your best bet, but usually completely unnecessary for a long time in a project's early days.
What I haven't seen people asking about, and what I would argue is significantly more important than your server stack is in regard to testing and CI/CD, the DevOps stuff that gets undervalued a ton, especially by folks that are new to development.
Things like an automatic testing pipeline that deploys to your server automatically and takes care of any database updates is a ton more important than if you should use Laraval or Express or Brainfuck.
A solid CI/CD pipeline will help catch bugs, if you're automatically linting and testing (you have to write the tests, this isn't magic). Catching bugs automatically reduces your cognitive load and helps ensure bugs NEVER MAKE IT TO PRODUCTION, which is something your potential customers are big fans of.
Automatic deployments fall in the same vein. If you're doing it automatically, you're reducing the cognitive load of remembering how you did that one thing that one time. Because things are consistent and automatic, you can ship features faster. Again, this is something your customers care about.
That's not to say I don't have opinions on languages and hosting companies and how code should be structured. After two decades as a software engineer, you bet your ass I do.
With that, in the same realm as automated testing, using a strongly typed language in your project will help cut down on errors in your code, and also reduce cognitive load. Bugs happen, so any time you can reduce them automatically is a huge win, REGARDLESS OF LANGUAGE.
Guess what I'm really trying to say in this rant is that there's no silver bullets, just shipping.
That all said, none of this even matters if you haven't properly validated your idea ;)