Technology Leadership Blog
Insights, strategies, and perspectives on leading technology teams, digital transformation, and building resilient engineering organizations.
Featured Articles
Latest insights on technology leadership and engineering excellence
Database Deployments with Reduced Downtime
Making database changes to a running application can be tricky, here are a few things to keep in mind that should reduce or eliminate downtime.
Interview: How to Work with Developers as a Scrum Master
I was recently asked to be a guest for a virtual AMA of Scrum Masters looking to improve their relationships with Developers on their teams/projects. Here are some of the questions and my thoughts.
All Articles
Database Deployments with Reduced Downtime
Making database changes to a running application can be tricky, here are a few things to keep in mind that should reduce or eliminate downtime.
Interview: How to Work with Developers as a Scrum Master
I was recently asked to be a guest for a virtual AMA of Scrum Masters looking to improve their relationships with Developers on their teams/projects. Here are some of the questions and my thoughts.
Manually Run Git Hooks
Sometimes you want to manually run a Git hook, like a pre-commit hook, for testing. This can be done from the shell.
Renaming a Local and Remote Git Branch
Sometimes you need to rename a Git branch, here are the simple commands rename a local or remote branch in Git using the command line.
Becoming a Software Architect
As your career twists and turns, one option to consider is becoming a Software Architect. This is my take on the role and the skills and experience that will set you up to succeed.
Changing or Combining Local .env Files
If you've ever needed to easily switch between different .env files during local development this might be helpful.
Update JSON File with Bash Using NodeJS
In this short post I'll show you a quick way to make simple edits to a .json file from the command line or using bash and NodeJS.
Sending an Array of Values in a GET Request
If you need to send multiple values in a GET request here is a simple way.
Should I Stay Or Should I Go?
There is a time in everyone's career when they wonder if they should stay in their current role or move to a new role or company. Here are some of the things I consider when giving advice or making the decision for myself.
Use Environment Variables with npx
If you use npx to execute commands and need to reference environment variables, the solution is very simple.
Troubleshooting Major Version Upgrade: AWS Aurora
If you need to perform a major version upgrade to your AWS Aurora instance(s), you might run into errors, here's a possible solution
Generate an Object from an Array of Objects
If you've ever had an array of objects, each with a unique value and wanted to deal with a single object this simple solution might help.
Git Submodules: Error When Switching Branches
If you've received 'error: The following untracked working tree files would be overwritten by checkout', you are likely using git submodules. Here is how to get around that error.
ESLint Out of Memory Error
When using ESLint with a lot of files or plugins, it's possible to cause an out of memory error, here are some tips for debugging and resolving
VS Code Shortcuts
If you use VS Code, here are some handy shortcuts that might help make your development life a little easier.
Hiding JavaScript Files in VS Code
Like most JavaScript developers I'm writing a lot of Typescript, here are the steps to hide the JavaScript files that are compiled during the development process in VS Code.
Generate JWT for Testing
In this article we'll look at generating JSON Web Tokens (JWT) for testing purposes.
Download an Entire Website Using wget
In this post we'll look at a simple wget command to download an entire website, including all content and assets.
Serverless Framework and Serverless Offline Error: POST Request Not Responding
If you use the Serverless Framework and Serverless Offline Plugin for developing Serverless Functions, (e.g. AWS Lambda) you might have seen an issue recently with POST requests not responding.
Start a Docker Container Without Specifying a Command
If you need to do some troubleshooting of a Docker container and the entrypoint or startup command you defined might be the problem, here is a quick fix to allow you to access the container to investigate.
Call Localhost on Host from Docker Container
There are times when we need to call "localhost" on a host from a Docker container. Here is a simple flag that allows that to happen.
GIT: Branch is Not Fully Merged
There are times when you get an "not fully merged" error for a git branch, here is a simple command to figure out what commits have not been merged.
Treat Local GIT Repo as a Remote GIT Repo
There are many reasons why you might want to use a local GIT repo like it were a remote repo, the setup is simple to get started.
Parse JSON Values Using Grep
Sometimes you need to quickly find a value in a JSON object, using grep allows you to use native functionality to get the information you need.
Exclude Table Data from PostgreSQL Database Dump
You may want to exclude table data from specific tables during a pg_dump, here are the simple commands.
Rotate AWS Access Keys via Script
It's a good idea to rotate your AWS Access Keys regularly, here is a simple script that makes the process easy and painless.
NodeJS Troubleshooting Endpoint
There are times when you might need to know information about your running NodeJS server. Here is a simple way to create an endpoint to expose valuable system for your production NodeJS application.
Reorder Columns in Postgres
Sometimes you need to reorder columns in your database to align with other data models, to show relevant data first, to satisfy your O.C.D (✋ that's me).
Change a Column Type in Postgres
When designing a database sometimes we get it wrong, here is the command you can use to change a column type for an existing table
Update an Object Using the Spread Operator
If you want to extend or override values in an object, using the spread operator in JavaScript can help
GIT: Force Overwrite of Local File with Remote File
Sometimes we just need to reset a local file with what is saved in a remote repository, here are the commands you need.
GIT: Forget Previously Tracked File
Oops, we checked in a file that we shouldn't have, here's how to tell GIT to "forget" about that file.
GIT: Fatal Ambiguous Argument, Branch and Filename
While rare, you might run into an error when using Git version control that your branch name and a filename are the same.
API Security: Broken Object Level Authorization
In this article we'll dive into the Broken Object Level Authorization (BOLA) API vulnerability.
MacOS: Git error: xcrun invalid active developer path
If you've tried to run a `git` command and it failed with this error, here is a simple fix.
My Required Reading List
Here is a list of books that I feel are important for everyone to read
Multipass: Mount Host Volume
If you're using Multipass you might need to mount a volume to gain access to resources on your host machine, here's how to do it.
Copy Data from Postgres to CSV File Using Docker
If you need to export data as a .csv file from Postgres and use Docker, here is a simple command to do just that.
Tools I Use
This is a list of the tools that I use regularly to help make me more efficient and effective.
Connect Auth0 to Azure Active Directory with SAML
Through this article I'll walk through the step required to connect Azure Active Directory to Auth0 using the SAML protocol.
What Does it Mean to be a Senior Developer?
Let's break down some of the qualities that determine if a person is a senior developer.
Configuration and Secrets Management
An evaluation of what information should be stored where, in an effort to improve application security, maintainability, and developer efficiency.
Terraform 403: Access Denied Error
An easy fix for a common error when using Terraform to deploy resources using the CLI.
Application With Identifier Not Found: Azure Error
If you've received the AADSTS700016 error, or something similar, when integrating an application with Azure, here are the steps I've taken to correctly configure the application.
Convert a X.509 Certificate from Metadata
If you need to convert a X.509 certificate to a usable format from metadata, here are some commands and tools that might help.
Getting Bookmarks to Work with Auth0 Login
Users often bookmark the Auth0 login page, but eventually that bookmark no longer works. There's a quick and easy fix.
Encoding / Decoding base64 Strings in the Terminal
Sometimes you need to deal with base64 strings, here are a couple commands that make it easy to encode/decode those strings using the terminal
Searching GIT Logs for Sensitive Data
If you've ever needed to search GIT logs for specific information in a commit, here is a handy command that could help
2020: Looking Back While Looking Forward
What a weird strange trip it's been. I wanted to look back at this wild year, celebrate, and look forward.
Variables in Bash Alias
Using variables in bash aliases is easy to do, here's how
Troubleshooting Alpine Docker Images
In this short article we'll take a look at a quick approach to troubleshooting issues in your Alpine Docker images.
Variables in Markdown
In this short article we'll take a look at a how we can use variables in Markdown documents.
Export PostgreSQL Database from Docker Container
If you want to export data (data and/or schema) from your Docker container, here's a simple command.
Lessons Learned from Island Living
I think about my time living on a Caribbean Island a lot, here are a few lessons I learned during that time
Puppeteer Max Timeout Error - Workaround
In this short post I'll show how to get around the common max timeout error in Puppeteer.
Return to a Scroll Position on Page Refresh
In this short article we'll take a look at a simple way to "remember" a scroll position on page refresh.
Modify Puppeteer User Agent
In this short post I'll show how to modify the Puppeteer user agent string.
Prevent Nodemon from Constantly Restarting
In this short article we'll take a look at a common issue when using Nodemon to refresh files during development.
Automating a Twitter Post with JavaScript
In this article I walk through a simple JavaScript implementation to post a tweet to Twitter.
Launching a Podcast
In this article I share why I wanted to start a podcast, launching it, and what I've learned so far.
Fuzzy Search Directory in Terminal
In this article we'll look at a simple terminal command to do a "fuzzy search" of files and folders in a directory.
Tracking a User's Social Logins in your Database
In this article I will share an approach to managing user accounts that use OpenId Connect to login with various social platforms.
Testing a Pull Request Locally
If you want to test a pull request locally, here are a few simple commands to get setup.
Updating GIT credentials in Command Line
If you've seen an 'Authentication failed for https://____.git error, here's a quick command to update your credentials through the command line.
Find the Newest File in Directory Using NodeJS
In this article I'll walk through a simple method for finding the newest file in a directory using NodeJS.
Backup PostgreSQL Database Schema
If you're working with PostgreSQL (and optionally Docker) and need to backup your database schema this article will walk through a few handy scripts to backup and restore your database schema using Docker containers.
Find a File in a Directory Using Unix Command
In this short article we'll take a look at a command that allows you to search a directory or subdirectory for a file based on some pattern.
Restart Single Container While Using Docker Compose
In this short article we'll take a look at the command that allows you to restart a single container while using Docker Compose.
Interview Questions to Ask, and Why?
In this article I share two approaches to conducting technical interviews. I highlight some of the things I'm trying to learn from each type of question.
Enabling Search in the Terminal
If you're using the terminal a lot and frequently need to use the same commands, here is a handy set of commands that give the ability to "search" and reuse past terminal commands.
Vulnerabilities Explained - Injection
In this article we'll take a look at different types of common injections and how they exist in code.
Testing GIT Hooks Before Actually Committing
If you want to use GIT hooks (pre-commit, pre-push), but want to test them before actually committing, it's really easy to do.
CORS, You're Probably Doing it Wrong
In this article we'll take a look at Cross Origin Resource Sharing (CORS), what it is, why we need it, and how to configure it
Troubleshooting a Non-Running Docker Container
In this post I'll show you a quick troubleshooting method for identifying and fixing issues in non-running Docker containers.
Run a Function Every Time You Change Directories with Zsh
If you have a set of tasks you do every time you change directories, e.g. changing to a new project, here is a quick way to automate those tasks.
Which Bash File Am I Even Using? Troubleshooting Bash Source Files
If you've ever battled various bash profiles to see which one is being sourced, here's a quick way to troubleshoot.
Lists I Create
In this post I'll show you some of the lists I create regularly and how I use them to achieve on what I set out to do
Troubleshooting Network Requests using Google Chrome (Dev Tools)
In this blog post I'll show you a quick way to repeat or retry network requests using Google Chrome's Developer tools. This approach allows you to modify and retry requests for troubleshooting purposes.
Merge Multiple Nested Objects in JavaScript
If you need to merge multiple nested objects together here is a simple helper function with plenty of uses
Cleanup Old Branches in Github
In this post we'll look at a simple bash script cleanup old branches in GitHub, including a "dry run" feature
Parsing a CSV file using Bash
In this post we'll look at a simple bash script to parse through a .csv file and do something with the data
Tar File(s) or Directories Using the Command Line
There are many reasons why we might need to Tar files and directories, here are a few helpful commands to get started.
Specify Python Registry
If you need to use a specific registry when installing Python dependencies these commands could help.
Incrementing Counter in Postgres
If you need to increment a counter in Postgres it's really easy
Dynamic PostgreSQL WHERE IN Query
If you're working with arrays of data in PostgreSQL this post will walk through a quick and simple solution to create dynamic WHERE IN database queries for PostgreSQL. Some of the syntax might be helpful for other databases and libraries as well.
Importing Data into PostgreSQL from a CSV File
Here are the simple steps you need to import data into your Postgres Database from a .csv file. access the Docker Engine's API from inside a container, Docker makes it really easy to do
Docker, Where's My Data?
In this blog post I'll show you a way that your data might go missing in your Docker containers when you use mounted volumes.
Tracing Node's Garbage Collection
In this blog post I'll show you a quick way to peak into Node's garbage collection.
Upsert in PostgreSQL Using ON CONFLICT
If you need update a row in PostgreSQL if it already exists OR create a new row if it doesn't already exist, using the ON CONFLICT command will do it
Keeping Long JavaScript Strings Readable in Code
If you have a really long JavaScript string that is hard to deal with in your editor use string concatenation to make it manageable.
Merging an Upstream Repo into Your Fork
In this post we go over the commands and steps needed to update your personal fork with any upstream changes.
Removing Objects from Array with Duplicate Values Using .reduce()
We'll take a look at an easy way to remove objects from an Array in JavaScript using the .reduce() method
Useful Postgres / PSQL Commands
List of often used commands when working with PostgreSQL OR SQL in general
Calculating NodeJS API Response Time
In this blog post I'll show you how to create a simple response time middleware that helps give valuable information about the speed and possibly health of your NodeJS API
Simple Polling Solution Using setTimeout()
In this blog post I'll show you how to implement a simple polling solution using setTimeout() instead of setInterval()
Using Variables with Sed in Bash
If you need to use sed to handle some find and replace functionality of text, here are some ways to make your commands more maintainable over time.
Access the Docker Engine API from inside a Docker Container
If you need to access the Docker Engine's API from inside a container, Docker makes it really easy to do
Using Environment Variables with Docker Compose
A quick reference guide for using environment variables with Docker Compose.
Rebuild a Single Docker Container
If you use Docker Compose to manage multiple containers, networking, etc. and need to rebuild a single service or container, here are a few commands that will help.
Importing / Exporting Data in MongoDB
Commands to deal with data in Mongo, mongodump, mongorestore
Populating a PostgreSQL Database in Docker
If you're using PostgreSQL and developing locally, here is a quick command to seed (re-seed) your database.
Deleting node_modules (or any directory really)
In this video I'll show you a simple command to find and remove all of your node_modules folders, or any folder you have a lot of, quickly and easily.
JWT | 2 Cookie Authorization - How It Works
In this video we start our 2 Cookie Authorization series by explaining how the approach works and how it can help to secure our applications that use tokens.
NodeJS APIs Without Express
In this video we create 3 simple API endpoints in NodeJS without Express.js. We use the HTTP module from Node to serve plain text, HTML, and JSON. This is a simple, lightweight server.
NodeJS / Express Authorization Middleware
In this video we build Authorization (AuthZ) middleware using Node, Express, and JSON Web Tokens (JWT). This tutorial will help you to implement simple access control into your NodeJS/Express API server. Access control can be defined based on a user's Role (Role-based access control, RBAC), or attribute based access control.
Docker Compose Overrides
We'll take a look at using multiple Docker Compose files for extending the functionality of Docker and Docker Compose for development.
Autogenerating Swagger Documentation with Node & Express
In this video we walk through creating a simple NodeJS/Express API endpoint and setting auto-generating documentation using Swagger. We can then test our API using the Swagger UI.
Node GPX to GeoJSON Convertor
In this video we build a simple GPX (GPS Exchange Format) to GeoJSON converter application in NodeJS. I'll walk you through each step of user input, file conversion, and output required to generate GeoJSON files for your next application.
Docker Build and Run In One Command
In this video we look at 2 ways to build and run a docker image as a container in one simple command. This is useful when testing a Dockerfile, application, logic, or really any reason you might use Docker.
Advice For A New Dev
My advice for new developers entering the industry. Even if you have a few years of experience, so of this information might be helpful for you as well.
Speaking at a Conference
So you've been invited to speak at a conference, what do I do now? Here are some tips and tricks I've learned from experience and other speakers
Does this JWT make my request look big?
How important is it to think about what information we store and pass in our JSON web tokens? Very! The information we store in tokens can have a lot of impact on our application’s performance and security.
Changing Environment Setup in Docker Compose
Make switching environments easier with Docker Compose
Save Yourself from Yourself
Using pre-commit hooks in git to avoid common mistakes and embarrassment
Debugging NodeJS with Chromes Dev Tools
Let's use the power of Chromes developer tools to debug a NodeJS app. We'll also look at debugging an app running in a Docker Container
Hosting Your Single Page Application using Node and Express
Learn how to host your single page application using Node and Express.
Coder Cruise Recap
Coder Cruise 2018 was a great success, here are some of the highlights
Quick Performance Testing using Node
Ever wonder if a JavaScript function is more performant than another, here's a quick way to test.
Questions for the Interviewer
Some of my favorite questions to ask an interviewer for a prospective role.
Angular 2 Routing Error - Exposed
Debugging a simple Angular 2 routing error, getting down to the root cause.. a typo.
Angular 2 Http Service
Creating a simple Angular 2 Http service for your Angular 2 Application
Angular Modal Service
Creating a simple modal service for your Angular 2 Application
Managing a Static Site with Dropbox
Taking the complication out of static site management
Making Working Remotely, Work
Working from anywhere is a dream for many, here's a few things I've learned.