Chris Tankersley

Chris Tankersley is a husband, father, author, speaker, podcast host, and PHP developer. He works for InQuest, a network security company out of Washington, DC, but lives in Northwest Ohio. Chris has worked with many different frameworks and languages throughout his twelve years of programming but spends most of his day working in PHP and Python. He is the author of Docker for Developers and works with companies and developers for integrating containers into their workflows.

twitter: @dragonmantank


Software Archaeology – Part 2

By Chris Tankersley

This month, we are going to look at some tools, tips, and tricks to help you along as you dig through the ancient past of the historic project that you need to work on. by Chris Tankersley

Published in Software Archeology, October 2023

We are Losing the Browser War

By Chris Tankersley

In the vast digital landscape, browsers serve as our windows to the world, shaping our experiences, interactions, and perceptions of the internet. Over the years, this landscape has seen intense battles for dominance, often termed the ‘browser wars’. These wars have profound implications for developers, businesses, and everyday users alike.
by Chris Tankersley

Published in The Spectrum of PHP, September 2023

Software Archaeology – Part 1

By Chris Tankersley

Imagine discovering an ancient city, its paths and alleys winding, its structures fascinating, and its history a mystery. You are here by your own accord, but your guides have disappeared. You have no map. You know where you need to go but have no idea how to get there. It is intriguing, and you take your first steps into the city. >Now, replace the city with a vast, complex PHP codebase you have never seen. The excitement, curiosity, and intricate puzzles remain the same. For developers, this happens all of the time. Whenever any of us get a new codebase, no matter how well the codebase is “documented”, there are always questions. No matter how many coworkers you have, the codebase hides secrets that you must suss out. >Welcome to the world of Software Archeology—a practice that marries exploration, detective work, and technical prowess.
by Chris Tankersley

Published in Packing Up PHP, August 2023

Education Station: Serverless PHP with Bref

By Chris Tankersley

Most PHP applications should run inside a serverless application
without any problems, and by using Bref, we get access to the most
common extensions. If you need something special, you can compile your
own additional layers for AWS to access. by Chris

Published in Be Barrier Free, July 2023

Education Station: Dude, Where’s My Server?

By Chris Tankersley

It is amazing how fast technology changes, especially around
programming. In the span of one human lifetime, we have gone from
needing rooms of equipment to run basic mathematical computations to
being able to click a button and not even knowing where our code is
being run. Currently, as I write this article, I completed a demo where
my setup was clicking a button that deployed the demo to At no point was I told where
the code was going to run, and I did not care. by Chris

Published in Evolving PHP, June 2023

Education Station: AI Is NOT Coming For Your Job

By Chris Tankersley

As is tradition since the pandemic, the world has yet again changed.
This time it is the explosion of AI or Artificial Intelligence.
Programmers have been chasing AI since
but the advances that the OpenAI project has released to the general
public have taken the world by storm. Programmers like you and I are now
waiting for the day that AI takes our jobs. by Chris

Published in HTTP Burritos, May 2023

Education Station: 12 Factor Applications: Parts 7-12

By Chris Tankersley

Last month we started looking at 12 Factor Applications, a set of
rules for building robust, maintainable distributed applications.
Developed by Heroku Engineer Adam Wiggins in 2011, it raised some
important questions for distributed applications. by Chris

Published in Getting TEKnical, April 2023

Education Station: 12 Factor Applications: Parts 1-6

By Chris Tankersley

As developers, we love being able to find patterns in the things we do. We can turn these patterns into rules we invariably learn, use, and eventually modify to work for us. A few times I have talked about design patterns, which describe how different patterns in code look and should be structured. Today, let’s take a look at application patterns. by Chris Tankersley

Published in Box of PHP, March 2023

Education Station: The Why and How of Building Microservices

By Chris Tankersley

Despite what you may think, adding new people to a team does not speed up a project but can slow it down. We’ll take a look at how microservices can speed up development through the use of smaller teams, as well how to structure microservices by Chris Tankersley

Published in Knowledge Crunching, February 2023

Education Station: Monolith vs Microservices

By Chris Tankersley

Which should you use…Monolith or Microservices? Neither is better or worse, so let’s look at them more closely to figure out which will work for you. by Chris Tankersley

Published in PHP is Standing Tall, January 2023

Education Station: Refactoring Yourself

By Chris Tankersley

Ever since I started working on the Education Station column, one of my goals has been to ensure that the column’s content revolves around the things I think all developers should know. This means that useful coding topics like design patterns and dependency injection can sit alongside useful theory articles like how HTTP works or suggestions and descriptions of how APIs work. These technical topics are ones that I think developers can find useful in a web-centric language. by Chris Tankersley

Published in Owning The Web, December 2022

Education Station: Making Our Own Web Server: Part 2

By Chris Tankersley

One of the biggest laments of PHP is that it does not have a dedicated web server and instead relies on an external program like Apache or NGINX to handle the incoming request. Modern versions of PHP do ship with a development server, but that server is not recommended for production use at all. This is not just because it is normally single-connection only (though there are flags to make it multi-threaded) but because there are better tools to handle the web serving—like Apache and NGINX. by Chris Tankersley

Published in The Value of the AST, November 2022

Education Station: Making Our Own Web Server: Part 1

By Chris Tankersley

Why does PHP not work like a lot of other “modern” web languages, and what happens if we want it to work without a web server? Sure, we have the PHP development server, but it has always been labeled as for development only. Why is PHP the way it is, and can we make PHP process its own requests? by Chris Tankersley

Published in The State of PHP, October 2022

Education Station: Building Code

By Chris Tankersley

Patterns help us to put objects together. Two popular ways to instantiate new objects are via the Factory and the Builder patterns. Let’s take a closer look at the impact these patterns have on our code. by Chris Tankersley

Published in Making Code, September 2022

Education Station: Using Git to Your Advantage

By Chris Tankersley

In the last article, “What is Git Doing?” we explored the details of how Git works. Now we will see how we can rewrite history and time using Git. by Chris Tankersley

Published in PHP Blueprint, August 2022

Education Station: What is Git Doing?

By Chris Tankersley

When developers get started, the first thing they want to do is write code. Writing code is the fun part of the job or hobby, and as developers, we love to type in some text, hit refresh, and see our changes. Most of the time, the code we write does not work, so we have to keep trying until we get it right. Once it works, we cherish that code. by Chris Tankersley

Published in Database Freedom, July 2022

Education Station: Event-Driven Programming

By Chris Tankersley

One of the interesting things about programming is that when faced with a similar problem, developers tend to build the same solution. They may call their implementations different names, or there may be slight differences at a superficial level, but ultimately the architectural design is the same. At a base level, we tend to call these Patterns.

Published in Another Bright Idea, June 2022

Education Station: Continuous Code

By Chris Tankersley

One of the greatest accomplishments of the web was the ability to quickly deliver software to users. While you can still technically go to the store and purchase software on a solidified blob of plastic that can be read by lasers, the world has moved on to digital delivery of almost everything. Music, movies, software, and even television is delivered over the internet. by Chris Tankersley

Published in One Last Slice, May 2022

Education Station: Which License to Choose?

By Chris Tankersley

Licensing for software, whether it is open source or not, is an integral part of releasing software. The commercialization of software has made it necessary for developers to be explicit in how users or other developers consume their software. Unfortunately, the topic of licensing is not as straightforward as many developers would like it to be.

Published in Testing The Core, April 2022 —Available for Free

Education Station: Software History is Licensing

By Chris Tankersley

The world of computers is an odd place. When I was younger, all we had was a Tandy Color Computer 2 because it was cheap. When we upgraded to an IBM running DOS, it was a major upgrade. I grew up during a time when the “family computer” was a common idea just because of cost. Now I walk around with a watch that is more powerful than most of those family computers, and it talks to my phone. And both of those integrate seamlessly with my tablet. The amount of computing power just around me as I type these words would have astounded seven-year-old me with that CoCo 2.

Published in World Backup Day, March 2022

Education Station: Async is a Lie

By Chris Tankersley

One of the more popular programming topics over the last few years has been the idea of “async programming.” Async programming is touted as a way to speed up applications by avoiding issues that normally stall a program. When an application hits an operation that prohibits anything else from happening, this is called a “blocking operation.” A blocking operation blocks all other execution until it finishes. by Chris Tankersley

Published in Parallelize Your Code, February 2022

Education Station: Background Queues

By Chris Tankersley

Web developers, especially PHP developers, have it easy. We write applications that take a web request, do some work, and return some sort of response. When we do our job properly, we return that request as fast as possible. According to HubSpot, the first four seconds of a page load are the most important. After that, conversion rates start to drop off rapidly. Older stats show that users would begin to leave at the three-second mark. by Chris Tankersley

Published in Domain-Driven Resolutions, January 2022

Education Station: Why We Argue About PHP Upgrades and Changes

By Chris Tankersley

It is that time of year when the next version of PHP releases. To help date this article, PHP 8.1 was just released on November 25, 2021. Each release brings out complaints about the speed at which PHP releases new versions, and as a consequence, deprecates and removes or changes functionality. Two camps are established—those that want and enjoy the frequency of releases and those that lament the frequency of releases. by Chris Tankersley

Published in The Zen of Mindful Programming, December 2021

Education Station: Handling Data Access

By Chris Tankersley

I would posit that nearly every application that we as developers build is designed around data access. When it comes to web applications, we spend a lot of time looking up things in databases or files to display to users. We write backend workers to read, manipulate, and store data in various ways. We build tools to access third-party applications and work with the data that they return. It’s data all the way down. by Chris Tankersley

Published in The Art of Data, November 2021

Education Station: Windows 11 for PHP Development

By Chris Tankersley

While I am a large proponent of open source software and that it is the best option for software and the longevity of computing, I also understand that running Linux is not for everyone. There are many times where it seems like just using Firefox in a growing Chrome-based world is harder and harder. To that end, I understand why people use proprietary operating systems like macOS and Windows.

Published in Decrypting Cryptography, October 2021

Education Station: PHP is the Worst

By Chris Tankersley

I have been programming for nearly twenty years at this point, and I have worked in various languages. At many of my previous jobs, as well as my current one, I have had the pleasure of working with PHP as the core language of my job. Since the first time I started working with PHP, I heard all the complaints about the language, but I also saw the power that PHP has.

Published in It’s Really an Upgrade, September 2021 —Available for Free

Education Station: Attributing Code

By Chris Tankersley

One of the most requested features in PHP for a very long time was a concept known as Annotations. Annotations allow developers to add additional context and, most importantly, functionality to code without using a procedural approach. Many articles like to say it “adds metadata” to code, but I do not think that tells the whole story.

Published in Trimming One’s Sails, August 2021

Education Station: Decorating Your Code

By Chris Tankersley

Programming languages are vastly different when it comes to syntax. Some may look so similar that they create an entire family of languages, just like real-world languages. PHP belongs to what is known as the C-style family, which constitutes languages that use curly brackets for flow control and ignore whitespace. Python does not belong to this family, as it uses indentation for flow control and pays attention to whitespace.

Published in Deep Dive Into Search, July 2021

Education Station: Approaches to API Security

By Chris Tankersley

The last few months have been a whirlwind of API work. If you’ve been following along, you have a solid grasp of the history of APIs, tools to help design your APIs, and a good lump of tips on how to turn that API design into reality. But, for the sake of space, I left out a few items that you may want to consider when it comes to various parts of the process.

Published in Debug, Rinse, Repeat, June 2021

Education Station: How to Build a REST API

By Chris Tankersley

Over the last few months, I have been slowly building toward something. As you have come along this text journey with me—which thankfully has no Grues—I have been putting into place all the knowledge that you need to start building a web API, and most importantly, to understand what that code will be doing. We learned how HTTP itself works, the history of APIs, what requests and responses do, and how to design an API.

Published in Testing Assumptions, May 2021

Education Station: Designing a REST API

By Chris Tankersley

APIs are a matter of life on the modern web. Modern web applications are no longer tasked with just rendering a web page. Our applications need to support various native client applications, or our applications may need to expose data to users. Developers face an increasing need to supply APIs as part of applications. As we mentioned in last month’s article, “APIs of the World,” there are many different ways we can build those APIs.

Published in Busy Worker Bees, April 2021

Education Station: APIs of the World

By Chris Tankersley

The modern web is quite literally built on APIs. I do not mean this in a philosophical sense or to point toward an idea like “API First” design. However, the fundamental way that data is passed back and forth on the web is structured around the concept of an API. As the internet and web grew, the ability to cheaply and easily pass text and binary data over HTTP became easier than developing network transfers from scratch. Point your application at a URL and have it parse the response.

Published in Lambda PHP, March 2021

Education Station: Deeper into the Streams

By Chris Tankersley

As I wrote last month, streams are an important feature of PHP used quite a bit without most developers ever noticing. While developers can use them to help optimize read and write operations, they are also useful for working with incoming requests and data manipulation.

Published in Dealing with Data, February 2021

Education Station: Working with PHP Streams

By Chris Tankersley

Even with today’s larger servers and more abundant resources, web applications still need to be mindful of what resources they are using. While the days of worrying about every bit of memory have gone, many applications still work with data sets in the tens or hundreds of megabytes in size. We may not think about it, but consider the size of some of the databases we work with. Now imagine that you are working with all that data directly instead of through the database. How do we work with all of that?

Published in Newfangled Views, January 2021

Education Station: Using Factories and Hydration

By Chris Tankersley

The applications that we build are usually portals for users to view and manipulate data. That data may be as simple as a web page pulled from a database or a collection of raw data. An admin section may display graphs of various analytical data on one page, while another may show configuration data.

Published in PHP 8 Bits and Git, December 2020

Education Station: Locking Down Resources

By Chris Tankersley

Many of the applications that we write need to access some form of resource. These resources may come in the form of images we need to display, logs we need to write, or external services we need to pull data from. But, at the end of the day, our applications are accessing things outside of the code we write. Let’s look at how we can manage resource access to prevent bugs and lost data.

Published in SOLID Foundations, November 2020

Education Station: Race Conditions and Dead Locks

By Chris Tankersley

Despite PHP shifting more and more toward preferring Object-Oriented Programming, at its heart, PHP is a procedural language. All of the code is executed one line at a time, in the order that the parser receives it. To my mind, one of PHP’s strengths is blending a versatile object model along with procedural programming. Web applications can surface race conditions and dead locks more frequently, like any other program with potentially multiple concurrent users, as people update or work with the same resources.

Published in Running Parallel, October 2020

Education Station: Autoloading Your Code

By Chris Tankersley

Broadly speaking, autoloading is a mechanism for the loading code into your program on demand. If you look at a single request in your application, chances are it needs a different set of classes than another request. Where a “Login” action may use a controller, database class, and an authentication layer, a “Logout” action may need nothing more than the controller itself.

Published in Under the Scope, September 2020

Education Station: Effective Data Typing

By Chris Tankersley

In our documentation at work, there are a few places where we list things as strings but look suspiciously like Boolean values. This realization sparked a discussion at work around data types, but not the one most developers tend to have. This discussion was not about strict versus dynamic typing, but more about what kind of data should something be.

Published in Data Discipline, August 2020

Education Station: Writing Concise Code

By Chris Tankersley

There is a huge emphasis put on the code maintainability, and for a good reason. The programming industry is rife with what we like to term “legacy code,” which boils down to code that solves a business problem, but we, as the current maintainers, do not understand. No language is safe from this problem.

Published in Warp Driven Development, July 2020 —Available for Free

Education Station: Calling all Callables

By Chris Tankersley

When facing a challenging problem, you want a flexible codebase that adapts quickly. Object-oriented programming facilitates it by giving you the power through inheritance, encapsulating code in reusable objects, and generally making them work for your application as you see fit. However, we can find flexibility in other programming approaches.

Published in Advanced Design & Development, June 2020 —Available for Free

Education Station: Anatomy of a Web Response

By Chris Tankersley

Last month, we looked at HTTP requests and how a user agent asks for a specific resource. How do we provide an answer? Web servers send it back in an HTTP response. Let’s look at the parts of a response, how to indicate success or failure, and how to build the response body.

Published in Unsupervised Learning, May 2020

Education Station: Anatomy of a Web Request

By Chris Tankersley

One of the things that drew me to PHP during my formative programming years was the quick turnaround time for trying something. You type something into an editor, save the file, and refresh your browser. Through the power of the web, your browser presents you with an error saying you mistyped a function name. Welcome to ninety percent of my day!

Published in Machine Learning and OpenAPI, April 2020

Education Station: Development Environments

By Chris Tankersley

One of the initial draws for PHP was and has always been, the ability to be quickly set up and have a developer get code working through a web browser. While something like client-side JavaScript can be done with nothing more than a browser, many other languages still need help to serve a webpage. That may come in the form of frameworks, like Flask in Python, but most languages need additional dependencies or scaffolding to work.

Published in How Magento is Evolving, March 2020

Education Station: Integration and Functional Testing

By Chris Tankersley

Previously, we discussed unit testing and why it can be useful. Unit testing can help make sure the public-facing APIs for your classes are easier to understand. It helps map out the dependencies of your classes, and—more importantly—it helps ensure behavior does not change from release to release. Functional, or integration, testing allows you to put multiple systems together and validate how they interact.

Published in Cultivating the Developer Experience, February 2020

Education Station: Unit Testing Basics

By Chris Tankersley

Recently, we’ve discussed principles for writing clean code in your php applications. Testing is a valuable technique to help you produce and maintain a codebase, but it can be daunting to learn. In this article, we’ll start with unit testing. Let’s look at how tests help during the design phase and in maintenance, what unit tests are, and how to use PHPUnit for your test suite.

Published in New Habits, January 2020 —Available for Free

Education Station: Dependency Injection, Part Two

By Chris Tankersley

Last month, I talked about the basic idea of what dependency injection is and its importance. Now that we’re more familiar with it, we’ll look at examples of using dependency injection for managing object coupling, moving object creation externally, and keeping your classes concise.

Published in Expedition PHP, December 2019

Education Station: Dependency Injection, Part One

By Chris Tankersley

Design patterns provide useful approaches for solving common problems in application design. Dependency injection is a powerful one, but it is also challenging to understand and apply. In this article, we’ll cover what it does and how to use it properly.

Published in Object Orientation, November 2019

Education Station: Overriding Composer

By Chris Tankersley

Composer is one of the most influential tools to have come out of the PHP ecosystem. Not only did it help revolutionize the PHP package ecosystem by making it easy to autoload code, find packages, and keep track of dependencies, it also stands as one of the best package managers from any language, hands-down. Python’s pip, NuGet for .NET, Rust’s cargo, and Go’s dep all pale in comparison to the stability and simple usage of Composer.

Published in Coding Without Fear, October 2019

Education Station: Visual Studio Code for PHP Developers

By Chris Tankersley

Developers are a fickle, passionate bunch. We love to wage arguments over which is the best editor (obviously it’s VIM), what is the best operating system to develop on (Linux), what is the best language (gola…I mean PHP) to use, and even what editor we should be using (we will discuss this in a second). Thankfully we have a plethora of options to chose from, and we can find what works the best for us. This month, let’s talk about Integrated Development Environments or IDEs.

Published in Master of Puppets, September 2019

Education Station: Writing DRY, SOLID FOSS OOP CRUD Code

By Chris Tankersley

It seems like programmers love their acronyms almost as much as the military does. When someone is just getting started in programming, they can be bombarded with an endless list of acronyms that people throw out as best practices and things to follow. Too often, this advice comes with little direction on why or what they are. Why should we follow SOLID principles if someone does not tell us what they are?

Published in Renovating Applications with Symfony, August 2019

Education Station: Abstraction—The Silent Killer

By Chris Tankersley

Object-oriented programming is full of suggestions on how to do things. One of the core tenets of object-oriented programming is abstracting “things”—or modeling them—into code via some idea of nouns and verbs.

Published in Find the Way With Elasticsearch, July 2019

Education Station: Data Structures, Part Two

By Chris Tankersley

Last month I talked about how, despite PHP arrays being one of the nicest things about the language, there were times where real data structures could help. There were various ways to use arrays as more “traditional” data structures, as well as the options provided by the Standard PHP Library, or SPL. If you can install PHP extensions, there is an actual Data Structures extension which implements actual data structures at the C level. This lets you use traditional data structures that can work better than bare arrays or the SPL. This month we will dive deeper into the Data Structure extension.

Published in How to Tame Your Data, June 2019

Education Station: Data Structures, Part One

By Chris Tankersley

I’ll admit, one of the best things I love about PHP is that I don’t have to deal with all sorts of different ways to deal with data. At the base of the language we have nice primitives like strings, integers, floats, and Booleans, and we also have one of the most flexible structures known to programmers—the PHP Array. The array itself wears many hats. If you are coming from other languages, you have to think about the structure of ordered data in a few different ways. The reason for this tends to deal mostly with how we need to represent data and how we manipulate data. Different data has different requirements.

Published in Serverless, ReactPHP, and Expanding Frontiers, May 2019

Education Station: What Went Wrong

By Chris Tankersley

The very first thing you need to do when something goes wrong is to get a good handle on the situation and find out what’s wrong. Many users first instincts are to get frustrated and say, “This is broken!” and expect you to figure it out. While there can be lots of places to look, narrowing down the possible causes can help greatly.

Published in The New Frontend Fundamentals, April 2019

Education Station: Explicit is Better Than Implicit

By Chris Tankersley

The argument over strict typing is nothing new in PHP. When the PHP 7.0 release was under development and the idea of scalar type hinting came up, there were developers on all sides with opinions on how it should work. While PHP 7.0 could introduce backward compatibility breaks, introducing strict typing had the potential to break years and years worth of code. How far the language went with this surfaced a variety of opinions. Let’s look at the benefits of using scalar type hints to clarify the intent of your code.

Published in Building Bridges, March 2019

The Dev Lead Trenches: Finding Someone New

By Chris Tankersley

There will come a time when you will need to add to your team. This can be due to a team member leaving, the workload becoming more than your team can handle, or just because you want to expand what your team does. In any of those cases, you will need to start the arduous task of finding someone new to bring to your team.

Published in Setting Up to Succeed, January 2018

Education Station: Night of the Living Dead (Code)

By Chris Tankersley

Legacy code is an unfortunate fact every developer has to face. Whether you subscribe to the idea that legacy code is just inherited code, untested code, or that it’s code which has reached a certain age, the grim reality of software development is that code lives, for a very long time. See how to tombstone your application to find dead code.

Published in Out on a Limb – February 2019, February 2019

Education Station: DevOps and You

By Chris Tankersley

The tech industry is always awash with new ideas that are actually old. One which gained traction in the last ten years is the idea of “DevOps.” This term is the combination of “Development” and “Operations” and is meant to show these two roles can be combined for more efficiency.

Published in DevOps Depths – January 2019, January 2019 —Available for Free

The Workshop: The Road to 7.3, Part One

By Chris Tankersley

Last month as I was writing “The Workshop: Producing Packages (Part Three)” I had a feeling I would regret the line “This will be the third and final installment in this series.” Sure enough, I have one more topic I want to cover: upgrading to a new PHP version.

Published in DevOps Depths – January 2019, January 2019

The Dev Lead Trenches: Creating a Culture

By Chris Tankersley

I have spent much time talking about creating and managing a working team, but there is one important piece I’ve left out of the puzzle until now—creating and crafting a culture that makes people want to work on your team and stay on your team. If you have a company culture which does not attract people, employees will be hard to find.

Published in Better Practice – December 2018, December 2018

The Dev Lead Trenches: The Talk

By Chris Tankersley

About the only thing that makes me upset as a lead developer is people that do not play ball. I am completely for questioning authority, asking questions about workflows, and having ideas on making what we do work for everyone, but it really bugs me when someone doesn’t even try to work with the team.

Published in Generics and Project Success – November 2018, November 2018

The Dev Lead Trenches: Burning Out

By Chris Tankersley

The tech industry is a double-edged sword. On the one side, we (generally) have well-paying jobs with nice perks, but on the other, we can easily slip into not only boring, repetitive work but figurative death marches. The former is used by most companies as an offset to the latter, but that rarely works out well. This leads many developers to come face-to-face with burnout. Burnout is unhealthy for any individual, but it will kill your team’s productivity, increase turnover, and make it harder to recruit as people learn about the environment at your company.

Published in Internal Journeys – October 2018, October 2018 —Available for Free

The Dev Lead Trenches: How Long Will It Take?

By Chris Tankersley

This month, let’s discuss what we can do to help come up with better estimates. I hate estimating, but it is an unfortunate part of software development. We cannot come up with schedules without estimates. My boss wants to know I’m not wasting his time when I say something will take 40 developer hours. I want to make sure my team is doing things in the best possible order and not waiting until the very end to deliver a big feature.

Published in Magniphpicent 7.3 – September 2018, September 2018

The Dev Lead Trenches: From Issues to Code

By Chris Tankersley

Everyone on your team should have a good idea of the actual problem or feature they are working on before any code is written. Once the issue itself is ready to go, the work can begin. Every company will be slightly different in how they want to handle actual commits, but this month I will detail the most common workflows I use with teams to manage changes to a codebase.

Published in Masterful Code Management – August 2018, August 2018

The Dev Lead Trenches: Issue Workflows for Teams

By Chris Tankersley

Issues and issue tracking are central to your team’s communications about what’s getting worked on and needs fixing. Having a clear and agreed upon standard for working with them will keep your team focused and productive while minimizing misunderstanding.

Published in Navigating State – July 2018, July 2018

The Dev Lead Trenches: What Not To Do

By Chris Tankersley

Over the last nine months, I have talked about all of the things you should be doing as a technical and developer lead. There are many things that you should be doing, and I hope that so far the advice has helped. These are some of the habits and problems I have seen as developers move into the more managerial role a lead developer actually is.

Published in Command and Control – June 2018, June 2018

The Dev Lead Trenches: It’s Toxic

By Chris Tankersley

The tech industry is a relatively young industry, and in many ways, it shows. In one of my favorite books, Hackers: Heroes of the Computer Revolution, Steven Levy talks about the birth of the open source industry going back to the late fifties and early sixties. Many of his descriptions of programmers then are not vastly different than programmers today. These problems are not technical and can drive good programmers away. What can we do to avoid these issues?

Published in Treasure, Old & New – May 2018, May 2018

The Dev Lead Trenches: Ongoing Education

By Chris Tankersley

As a development lead, one of the best things you can do for your team is encouraging and fostering an environment of ongoing learning. There is an entire world of developers out there who stagnate in their jobs because they don’t learn anything new. It does not have to be a whole new language, but every developer should be learning constantly. There are a few ways you can help with this.

Published in Testing in Practice – April 2018, April 2018

Reviewing Code

By Chris Tankersley

Code reviews are one of the best ways to help a team ensure they’re writing the best code possible. In all of the jobs where we have done peer-lead code reviews, we have caught more bugs and had better discussions about code than in places or times where we just hammer code through the approval process. I know, I know; we all write beautiful, bug-free code, so why go through the hassle of a code review?

Published in Long Running PHP, March 2018 —Available for Free

The Dev Lead Trenches: Coming Aboard!

By Chris Tankersley

The need to onboard new hires is one of the most significant reasons why adding workers to a project does not actually increase the project’s productivity. It takes time to get them up to speed with how the system works, what their role is, day-to-day workflows, and a host of other things. The goal of any new hire, even ones where you aren’t trying to fill in gaps during emergencies, is to get new hires as productive as possible as quickly as possible.

Published in Know Your Tools, February 2018

The Dev Lead Trenches: Measuring Success

By Chris Tankersley

There will come a time, probably once a year per team member, when you will have to assess how well a team member is working. Are they contributing overall to the team? Are they making their goals? Do they know what their goals are? Are they pulling their weight? For as long as there have been companies, there has been a need to quantify how well an individual employee is doing. “Gut feeling” is not the most accurate way to do this. There are also many ways which do not work in real-world situations.

Published in Talking Code, December 2017