Toptal: The Suddenly Remote Playbook

Toptal is one of the great companies that I have my eyes on.  If you haven’t heard of them, here’s a brief intro:

Toptal is an exclusive network of the top freelance software developers, esigners, finance experts, product managers, and project managers in the world. Top companies hire Toptal freelancers for their most important projects.

I’ve had some interactions with the company in the past, and I’ve heard plenty of stories from other people.  These guys definitely know what they are doing.

And if you don’t believe me, here’s some proof for you.  The COVID-19 pandemic forced a lot of companies, teams, and people to work remotely.  Some were ready for this, but most had to make major adjustment.  Many are still struggling.  Toptal though is not one of them.  They’ve been doing remote work for a long time now.  Lucky for the rest of us, they’ve shared a lot of that in a rather concise, to the point, easy to read document, titled “The Suddenly Remote Playbook“. It is a playbook for sustaining an enterprise-grade remote work environment, from the world’s largest fully remote company.

It doesn’t matter whether you are just starting with the remote work, or have been doing it for a long time, I promise you, you’ll find plenty of useful information in there.

From the simple and direct quotes like:

People are the most important element of any company, remote or not.

To an impressive list of tools like:

  • Slack
  • Grammarly
  • Zoom
  • Krisp.ai
  • Google G Suite
  • Miro
  • Collabshot
  • Loom
  • Trello
  • Asana
  • Confluence
  • Zapier
  • … and more.

Strongly recommended for reading, studying, and implementation!

Caddy – The Ultimate Server with Automatic HTTPS

Great things are easy to get used to.  When something works the way you want it, and does so for a long a time, it is inevitable that one day you’ll stop thinking about it altogether and accept it as a given.

Apache was a great web server, until Nginx came along.  All of a sudden, it became obvious how much faster things could be, and how much simpler the configuration file is possible.

For the last few years, Nginx was working great for me.  And now that I came across Caddy, I realized that life can be a lot simpler.

Caddy web server

Here’s a bit to get you started:

Caddy simplifies your infrastructure. It takes care of TLS certificate renewals, OCSP stapling, static file serving, reverse proxying, Kubernetes ingress, and more.

Its modular architecture means you can do more with a single, static binary that compiles for any platform.

Caddy runs great in containers because it has no dependencies—not even libc. Run Caddy practically anywhere.

Seriously? We now have a web server which handles HTTPS with automatically renewed certificates (yes, Let’s Encrypt) out of the box… Mind-blowing.  I guess, 21st century is indeed here now.

What else is there?  Well, let’s see:

  • Configurable via RESTful JSON API. OMG!  No more trickery with include files, syntax checking and restarts.  In fact, configuration files are completely optional, and even if you choose to use them, they just use the same API under the hood.  Bonus point: you can export full configuration of a running server into a file via a simple API call.
  • Extensible.  Yes, that’s right!  “Caddy can embed any Go application as a plugin, and has first-class support for plugins of plugins.”  Check out their forum for plugin-related discussions, or simply search GitHub for Caddy.
  • Supports HTTP/1.1, HTTP/2, and even HTTP/3 (ETF-standard-draft version of QUIC), WebSocket, and FastCGI.
  • … and a lot more.

Wow!  It’s definitely worth checking out.  While Nginx is not going to disappear (much like Apache being still around), Caddy might be a better option for your next project.

A practical guide to writing technical specs

Writing technical specifications is difficult.  Writing good technical specifications is even more so.  Here’s an excellent practical guide from StackOverflow on how to write technical specifications, which have everything needed, yet not being too excessive or vague.

In the comments, there are a few additional suggestions and links to other similar guides.

The only way this could have been better, if they included a ready-made template with all the described sections, so that one could just fill it in and be done with it.

MySQL, JSON, indexing and generated columns

For quite some time now I wanted to play around with the recently added JSON type in MySQL.  Finally, I have a project where MySQL version is high enough to support it, and the requirements are such that this choice makes sense.

The first impression was great – JSON type is basically LONGTEXT type with a bunch of added functionality to manipulate JSON data.  It took no time to setup tables and necessary queries to work with it.

The second iteration though raised a few questions.  Large tables, with complex JSON structures were rather slow in some of the more complex queries.  The first solution to look at was obviously indexes.  Turns out, MySQL does not support indexing of the JSON fields. Bummer.

But there is a rather elegant work around.  It involves another recently added feature, of which I haven’t heard about until today – GENERATED columns.  Think of table views, but on the column level, not table level.  And generated columns can be indexed.

In fact, there’s a whole lot that you can do with GENERATED columns in general, and JSON data in particular.  This blog post – “MySQL for JSON: Generated Columns and Indexing” – provides a great starting point with examples and explanations, including a scenario with the primary key of the table being a generated column, with the data from the JSON-typed column.

Awesomeness!

How I asked EVERY countrys embassy for flags [119 packages]

Here’s one of the best YouTube videos I’ve seen in a very long time.  In fact, I love is so much, I’ve decided to take in effort beyond just sharing it.  Watch it first, and then I’ll share a list of reasons why I love it.

So, here we go with my own personal reasons of why I love it.  In no particular order, as always.

  1. It’s not about COVID-19/Coronavirus.
  2. It’s positive, nice and kind.
  3. It’s funny.  Not like stupid funny, or stand-up funny.  But it still is.
  4. It has substance.  It’s not a video for the sake of video.  It’s a video about a rather long and complex project, which took a lot of effort.
  5. It bridges the real world and technology, and shows how one helps the other.
  6. It’s very personal, yet very global.
  7. It demonstrates one of my strong believes, that even simply asking for something, even from total strangers, has merit.  Not everyone will respond.  Not everyone will respond in the way you want them to.  But overall you’ll get more than you thought you would.
  8. Cyprus made it high up the recognition list.
  9. Political neutrality.   A lot of the countries mentioned in this video, have a long, complex, and often violent relationship with each other.  Yet, that doesn’t matter for this particular project.
  10. Free stuff.  Who doesn’t like free stuff.
  11. Production of the video.  It’s not over the top professional production, yet it’s not an amateur talking head, filmed on the mobile phone in the car.
  12. Maps.  I love maps, and especially checking them off on the global map.  Bonus points for more than one color for checked out colors.
  13. Flags.  Even though I don’t collect or study flags, I love flags and their designs.
  14. It’s work and family friendly.  Easily shareable with everyone I know.
  15. Bonus point: it just makes me feel good about the world.