interview with hussein nasser

relational vs. non-relational, jamstack, http, favorite stack, backend youtube

Hussein Nasser is a back end engineer who creates videos about various topics including databases, protocols, security, and also career advice.

In this interview I ask him for his thoughts on relational vs. non-relational databases, the JAMstack, HTTP, his personal favorite stack, and why there aren’t more backend programmers on YouTube.

AJC

What initially drew you to working on the backend?

HN

In the early 2000s when I began my career I wrote a lot of thick desktop apps that hit the database directly (client-server architecture) so most of my time was spent tuning the databases. When the three-tier architecture came nothing much changed I started writing servers that expose API instead and I still wrote desktop apps that consume API hosted on the server, the API was SOAP (yuck) then we shifted to REST. Web applications became popular so I started writing REST APIs and web clients instead. 

In 2018 I decided to go all-in on my YouTube channel and talk more about software engineering, I started tasting many things and I found my self gravitating towards backend technology, and now that's the main topic of my channel.

AJC

There are lots and lots of great youtube channels to learn things like CSS or JavaScript frameworks or building full stack applications. But to me there seems to be much less material that focuses almost exclusively on backend development like your channel does. I have some theories about that but I’m wondering if you agree with that impression and if so why do you think that’s the case?

HN

I did notice that too I am not sure why, it could be that the demand for front-end engineers is more. For every API a backend engineer builds and maintains there can be many apps that can be built by consuming that API. Those apps are built by front-end engineers.

I know some people say front-end development is easier and that’s why there are more front-end engineers discussing it on YouTube. I don’t think that is true at all, front-end engineering is becoming more and more critical as more compute is moving to the edge and terminal devices. A Tesla detecting an obstacle and avoiding it is a front-end engineering endeavor. That doesn’t look easy to me. Front-end engineering doesn't mean just web development that's just part of it, mobile and desktop development can also be considered front-end.

AJC

Continuing along that same thread do you have recommendations for other creators making content similar to yours?

HN

I would recommend Following Daniel Stenberg although he is not a backend channel he does discuss protocols in deep detail and protocols are very important for backend engineers to understand. I also recommend Brad Traversy, although he focuses on the front-end engineering he does make backend engineering videos and he is down to earth a treat most engineers lack, unfortunately. Security Now is a great channel too for security-related topics on backend engineering.

AJC

How do you think the serverless and JAMstack movements will affect backend development over the next few years?

HN

Really depends on what you mean by "affect". Backend engineering will still be required to manage those serverless functions that run on containers or (microVMs I hear is the trend now). Backend engineers are still trying to solve the cold start and other problems that come with serverless. So yeah while I do think it will eliminate the barrier to entry to execute code without worrying about architecture it does create more work for backend engineers on the backend. JAM stack and going back to static file generations, in general, will change the game and will even create more work for the backend to correctly and efficiently cache the static files generated, add necessary headers, handle ESI (edge side includes) all of this work happens on proxies and proxies are pure backend.  Cloudflare Edge workers is proof of the amazing work this company is doing in this regard. 

AJC

It seems like groups have continuously been trying to kill relational databases for 40 years but it always comes roaring back as the dominant database paradigm. Why are people always trying to escape it and why is it impossible to do so?

HN

I wouldn’t call it escape its actually great innovation and research that benefit the software engineering community in general and actually pushed relational databases to innovate.  As you probably know I am a big fan of relational databases because they have the guarantees I need when I need them (ACID). Some people figured out that they don’t really need all of those ACID properties and if they gave up some they can do things that the relational databases can’t give them out of the box, scaling is one, schema is another.  So NoSQL was born. the problem is it was hyped up too much (just like every tech) and people jumped into the wagon without evaluating their requirements, it was attractive and easier to write an app without worrying about having to define schema and worry about indexing. However, people also realized as their application requirements grow, they needed full ACID at times. There are projects that succeed on NOSQL alone of course but that doesn’t mean relational databases will ever die.

Again NOSQL did push relational databases to innovate thats why Postgres and mySQL now have JSON column that can be indexed with full-text search. Vitess was born on YouTube on top of mySQL to solve the problem with sharding and scaling.

AJC

Do you have a personal favorite “stack” in the sense of LAMP, MEAN, XAMP, MERN, etc?

HN

I don’t know, to be honest, these stacks are generic and can’t possibly work for every project. I interchange pieces of software based on the use cases. For example, I pick Postgres as a database if my project has frequent upgrades to the schema, this way I can use the transactional DDL feature (which isn’t available on MySQL) to start a transaction do my DDLs change the schema and if something went wrong I can rollback cleanly. However, If my project has a very write-heavy load and a very read-heavy load I would use mySQL or MariaDB (or Percona) with fine level tuning at the table level where I can change the database engine per table to pick RocksDB for my write-heavy load table and InnoDB or myISAM for my read-heavy load table. 

The language doesn’t matter as much but the database, the cache, and proxies all of those change all the time. 

That being said, I used to work with WAMP alot (Windows instead of Linux) back in the days but I don’t code in PHP anymore (forgot it actually). These days If I have to choose the closest favorite stack its gonna be the MEAN stack minus the M and A because I don’t use MongoDB I don’t use any front-end framework. so PEN? Just made up a new stack :D Postgres does most of the job for me most of the time and NodeJS is awesome especially version 13 now that .mjs is available where I can write one script and I can FINALLY share it between node and my browser.

AJC

Will we all be using HTTP for the rest of our lives?

HN

YES! 

You can find more from Hussein Nasser on YouTube, Twitter, or his personal blog. Thank you Hussein for contributing to minimumViableStack!