Go Back

Settling on a Tech Stack

At this point in my development and tech career (over 10 years now), I know that I need to concentrate on a limited set of technologies.  One cannot keep going on tangents to try out all the new technologies always coming out or else they will never know any one good enough to be proficient at a professional level.

One should, however, be able to recognize when an emerging technology is “the real deal” and learn what’s needed to keep up with the dynamic world of web.

Since I’ve worked for an agency that pretty much can’t say no to anything, I’ve worked on many different web installations.  Most were in PHP, but I’ve worked on the occasional .NET, Ruby on Rails, Django, and even Java applications.

However, when it comes to my personal preferences: Python and PHP in the backend and Javascript in the front-end are what I’m concentrating on.  Frameworks, Content Management Systems, programming languages, etc are all tools in a developer’s toolbox.  Different projects require different tools, so I’ll go over which tools I like to use and those I stay away from.

For anything
Needless to say, one always has to use HTML, CSS, and Javascript / JQuery.  To get a responsive layout, I use either Bootstrap or Materialize.  I prefer Bootstrap since they use fixed container widths, as opposed to Materialize’s percentage-based one.  However, it can be overridden.  Bootswatch is a great source for ready-to-use Bootstrap templates as a base for new projects.  Both Bootstrap and Materialize have good support for standard website features like sliders, accordions, cards, etc.

Normal Responsive Website for Clients
For a normal client site, why not go with WordPress.  It does so much out of the box and at this point I know it inside and out.  Clients can understand it fairly easily.  You can even create Single-Page Applications with ReactPress and the WordPress API.  Probably not the best configuration, but definitely faster to launch.  It also has a ton of plugins that can do virtually anything you want to do.

My biggest gripe with WordPress now is that almost any decent plugin costs money with many plugin makers moving to a subscription model.  It didn’t use to be this way.  WordPress users are encouraged to update plugins, only to see features they once enjoyed moving behind paywalls.

Performance-wise, it is not great as it loads all resources used site-wide on every page.  Plugins can manage this, though.  There are also lots of security issues and spam to manage.  However, the benefits far outweigh the negatives

I am also a huge fan of Joomla.  I think it is the best-engineered Content Management System.  Content blocks and modules only load resources they use when they are used.  The Gantry Framework is also pretty intuitive and flexible.  However, since it takes longer to set up and is less intuitive for clients, I don’t develop with it as much as I like.  However, I think it’s the obvious choice for people with lots of different content types and websites with content that repeats a lot site-wide.

Personal and Cross-Platform Apps
I love to use Python and Django for my personal projects.  I really enjoy how almost nothing is included and you can add data models as you see fit.  I like being able to separate functionality through apps, and I especially love not having to keep track of opening and closing brackets when programming in Python.

Depending on the site / app, I’ll use Django to serve a REST API to a ReactJS front-end for web, and ReactNative for mobile.  I know it’s the slowest available option out of Flutter and native coding; however, it’s simply the most approachable for me as someone who is very familiar with Javascript.

The only downside for Python is that it’s a pain to run it on a web server.  I have an unmanaged VPS and it took hours to set up everything just so.  It gets faster every time, but it’s definitely not like launching a PHP app.

If I’m trying to make an app where non-intensive calculations are involved, then NodeJS with its single-threaded architecture and a document database like MongoDB are obvious choices.  I was reluctant to learn NodeJS, I must admit, because I thought it was another flavor of the week.  However, it’s the real deal.

Server / Database
I’m by no means a server expert.  If I have a choice though, I’ll run Nginx using Ubuntu as the OS because it offers a happy medium between speed and accessibility.  However, most people who hire me don’t want to spend a ton on hosting and don’t have the traffic to warrant anything other than shared hosting and Apache.

When it comes to databases, I honestly don’t keep up with what is faster than another or whatever features come with it.  I honestly use whatever is accessible, appropriate, and free to use.  In most cases, I will simply use MySQL.  If I have a need for anything else, I will likely find someone who understands databases better than me to pick for me.

Stuff I Don’t Like
There are things that I’ve come across during my years as a web programmer that I simply don’t care for.  If forced to work with these, I will still do the best job possible while simultaneously in pain.  Some I think are dumb and some I don’t get.  They are:

  • SASS / LESS or any CSS preprocessor
    To me, CSS is where I want to make a change and see the results right away.  I don’t want to add the extra step of compiling from some other source.  I also don’t want to get task managers like Gulp involved.  Furthermore, I think nesting makes the stylesheet harder to read and that CSS can be organized in a way where you can keep track of what is going on.  CSS nowadays can do so much out of the box today, like have variables, that I think the preprocessors are just a waste of time at this point.
  • Drupal
    Out of all the PHP Content Management System options, I particularly do not care for Drupal.  To me, it’s too complex for most non-developer users.  For developers, it’s too cumbersome.  To this day, I still don’t know what a node in Drupal is supposed to represent.  I think if custom content types or repeating content is needed, Joomla is a more approachable option.  For whatever reason, the healthcare industry and academia love Drupal.  I think they love needlessly complex terminology.  So, I have to work in Drupal from time to time.  However, I’m never convinced that it’s a reasonable or practical CMS.
  • .NET or Java
    I started off my programming journey as a teen with C++, then professionally with Windows Forms and Visual Basic.  I have bad memories of staring at lists of compile errors I didn’t understand.  I also don’t care for declaring variable types, using classes, or dealing with IDEs.

Anywho, that’s about it as I write this at the end of 2021.  Who knows what the future will hold?