RSSAmplifier

Blog

Joel Holmes

Recent content on Joel Holmes

joelholmes.devRSS feed ↗71 posts

Latest posts

Being a Bottleneck

In my last post I talked about automation and how I’ve been reconciling with how work gets done as a developer. The takeaway was that automation is helpful as long as the work is visible and chunked in a way that makes it easily digestible. With the way AI agents work, it becomes eerily similar to the brooms carrying buckets of water: task-oriented, efficient, and eager. Suddenly…

The Right Amount of Automation

Like many people, I’ve found the move to using AI in my work a little earth-shifting. Listening to a recent episode of The Daily , I realized I wasn’t alone in my journey as a developer through this new world. At first I resisted because AI felt like “too much magic,” and after using AI for a while now I know that my hunch was true. The “magic” seems to be the…

Continuous Delivery Made Easy

After graduating college I wound up with a job at a large bank. There I had a great history lesson on how software used to be developed. Huge requirements documents. Six month development windows. Saturdays spent trying to meet arbitrary requirements set forth my a committee. It was painful. After the first week I sat down with a senior developer who was supposed to show me how to access the…

Suggested Books

As I work with more and more junior developers I often find myself suggesting different books that have helped mold me into the developer I am today. For better or worse these books have changed my perspective on the industry and keep me coming back for more. I love reading technology books and so it can often feel overwhelming when I try to compile a list. Nor do I like the “Best 10…

Work and Team Breakdown

The breakdown of work and the relation it has within development teams has interested me for a long time. There is no question as to where the thoughts began but they have led me down a larger path of discovery. The journey began by reading The Phoenix Project by Gene Kim, in it he talks about the four types of work, how work should be scheduled and broken down into easily repeatable tasks much…

See One, Do One, Teach One

In the medical industry there is a common practice among surgical students learning a new procedure which is “see one, do one, teach one”. Seeing one allows the students to study from another experienced surgeon, ask questions, and take notes completely focused on learning from a teacher. Doing one enforces the application of the learned material allowing for physical practice with…

Working Together While Working Separately

In my current job I’ve been helping lead a small team in the development of a new product. This is a coordinated effort across the company and been a challenge to some as we quickly switch between discovering our customer’s needs with developing them. We have a road map and a plan but translating this into actual work has been difficult. All of the reading I’ve done over the…

Joy of Creating

I enjoy my work. I find it fulfilling and the problem solving to be engaging. Yet at the end of the day it’s work. The drudgery of completing tasks, the politics, the deadlines, can take away joy. Software development isn’t unique in this area, almost all jobs have this fine balance between fulfillment and drudgery which is why people have hobbies outside of work. Softball teams and…

Why I Program

We believe that programming can be, and should be, an intellectually rewarding activity; that a good programming language is a power conceptual tool… - The Art of Prolog Why do I program? I like the intellectual simulation of solving a problem or designing something. So much of the time as a developer you end up building the same thing over and over. API endpoint for this or a message…

Mighty Oak

There is something strange about the way we view ourselves within in jobs. On television there is always a leader who emerges from a difficult scenario or a person who saves a company single handed by making the right deal. But this isn’t how it works, or at least it shouldn’t. Throughout my career I’ve learned that anything of significance shouldn’t be done on your own. In…

Technology Maven

In my career I have found myself collecting things. I like to collect programming books, links about new databases and patterns, talks about functional programming. This collection has become somewhat obsessive in some cases and led to the disorganization I’ve described in other posts . When I was starting out I was told that this was not good, that you could run around your entire career…

Getting Started

Last week I wrote about issues I was having getting things done and worrying about stagnating in my career. I took some time over the past week to disconnect, relax, and reflect about both this problem with “closing” and my career. Throughout my life I’ve been constantly rushing forward and in my career worrying about what will come next. This rushing and worrying always leads me…

Where I Am

I’m all over the place. I can see that by my notebooks. Each month I sit down and write down a list of goals I want to accomplish. This ranges from books to read to projects to complete to posts to write. All in all I typically manage to complete about 60-70% of what I set out to do. But lately I’ve not even come close. This past month my goal was to clean things up and organize and I…

Rushing

I’ve always rushed things. In elementary school I rushed through activities to move onto the next thing. In middle school I rushed through classes to take High School classes early. I did the same thing in High School, taking college courses early on to keep moving forward. I couldn’t wait to get through college and “into the real world”. Only to find myself there thinking…

Simple Site

Over the past couple of months I have worked on trying to increase my flow of writing. So far I have failed at that. I don’t really have an excuse for it but upon reflection I thought that I could maybe make things a little easier on myself by simplifying my website. I drew inspiration from a site I found called Tiny Projects and another post about building a digital garden . The problem…

Project Of My Own

Michael Pollan is one of my favorite authors. Each of his works follow a similar pattern. Define an overarching theme (gardening, cooking, eating), then define some components, go into the history and practice of each sub component. For example in his work A Place of My Own the overarching theme is architecture and some sub-components are location , design , material , etc. In the section on…

Language Ergonomics

There are a ton of programming languages. Each language then holds a specific set of values that lend itself to solving certain problems. Too much time is spent arguing over which language is best and for what reason instead of looking at which languages match can help you solve a problem or match your values. This last point is why I have spent a lot time exploring new languages. Early in my…

Engineer Mathematician

When I was in college I intented to major in Mathematics. Computer science was supposed to be my minor and support my interests in math. In my first semestor I took a formal math class and was completely lost. Meeting with my professor I discovered that my interests were in his terms “messy math” and not “pure math”. Dissalusioned with this notion of being interested in…

On Writing

Throughout my career I’ve always had side projects to help me learn, to practice, to sharpen my skills. Sometimes they were relate to things I had read or ideas that had crossed my mind. Whatever the reason for working on the project it typically ended up being benefitial for my personal growth. Unknowingly I was establishing a practice of a kata, doing an activity in order to refine and…

Brave New World

Having just finished Aldous Huxley’s Brave New World, I was struck at the predominance of theme of desensitization. In a culture today where people have become desensitized to the world around them, I worry about its impact on our society. I’m not saying we’ve entered into a dystopian world but these types of books are meant to be hyperbole in order to draw attention to larger…

Be Good to Yourself

Anything that gives you joy or happiness that is entirely for yourself. I have always struggled with self care because it always felt selfish… which is what it is supposed to be. Taking something for yourself can feel awkward at first while you look at all the things that need to be done or the expectations others may have for you. I have always struggled with the need to be the perfect…

Lambda Terraform

In a previous post I wrote about how to deploy an application in a container. The gist of the post talked about how containers provide a layer of abstraction so that your applications can run on any machine. This is great for local development and large scale applications. However, in order for them to run in a production environment they more than likely are required to run on some sort of…

Growing As a Developer

Becoming a better developer does not always mean being an expert in a programming language. Nor does it mean being the smartest person in the room. More often than not you will find that you aren’t an expert and you aren’t the smartest person. Work is more than just programming, it’s understanding and developing products that people will use and to do that it requires more than…

New Year

I doubt anyone subscribes to my blog or reads it regularly but do those who tune in may have noticed that I haven’t been updating as much recently. For a while I was on a good pattern of posting once a week or at least every other week. These posts where planned and structured and part of an on going process of learning and self discovery. But that changed. Where I was once learning and writing…

Cloud Team Thoughts

When I started developing Microservices I felt like I had been missing out on a huge part of the modern technology world. It turned out that I was right. Over the past few years I’ve been trying in my mind to figure out how modern development teams run effectively. What I discovered was that there are tons of people out there trying to figure out the same thing. Many of the things I’ll write about…

Go Docker

So you’ve built an app that runs on your machine. Great. Now what? Obviously software is built to be used and today most of that software is being run on servers in the cloud. But sometimes it’s not. Sometimes it might be running on some old hardware in the basement of a company or maybe another developer needs to use your code as part of integration. Whatever the case may be it would be nice to…

Agile Career

There is a very important product that you have complete control over: you. Your skill set, your personality, your overall career is completely within your control. Those are all features of your product and it’s on those pieces that you need to iterate and improve. Good products are successful often because they have good product managers. It is up to you to decide how you fit into the world and…

Go Pipeline

One of the most powerful things about Go is the ability to run parts of your application concurrently. This allows the application to run in parallel at times (depending on the number of cores) or continue to run while waiting for a blocked process. There are a number of concurrency patterns that allow you to structure your applications to get a performance boost. Recently I stumbled across the…

Zero Dollar Idea

People enter into technology thinking they can pursue an idea that will make them a lot of money. If you read startup stories you will find that most start with an idea, evolve into a business, become broke, rebound and make millions…. or end up being broke and learning a lot. I’ve read these stories but I am not a risk taker. Maybe I just don’t believe in my ideas as much as others or lack the…

Go Mock Testing

You should always write tests. To fully understand how to write production level applications in any language you should be able to write unit tests. Some people go to the extreme of doing Test Driven Development (TDD). TDD advocates that you should write tests before you write the code. This can be a good approach when trying to write code that can be easily tested. Yet I find that TDD is a lot…

Go Hex Arch

In an earlier post I wrote about how to structure Go programs to be leveraged by both a FaaS and a standalone application. This simple application showed the power of what a Hex architecture can do by limiting the need to rewrite logic when an external resource has changed. In that example we looked at changing communication between an HTTP call from an AWS Lambda to a direct application call.

Brain Expansion

I have a terrible memory. It’s not because I don’t pay attention; there is just too much on my mind. The barrage of incoming texts, work emails, news alerts, and ideas creates chaos. Disconnecting is not an option all of the time, especially for those in the technology field, so what can you do? It used to be when a computer was running slow or crashing the best solution was to add more RAM,…

Serverless to Server

Functions as a service (FaaS) have really become a staple in most development circles. They provide little infrastructure overhead in the development of microservices and are often very lightweight. Yet FaaS face their own sets of challenges when it comes to costs, response times, and observability. I believe that architectures will evolve over time. In some cases you may never want to change your…

Catching Up

I felt that I had a pretty good grasp of what the technology world was like when I graduated from college. After all I just built a series of programs for my classes (of varying quality), none of which had real world applications. I had built systems using live APIs like Twitter and used cool frameworks like Google Web Toolkit. So in the end I felt pretty confident in my abilities even though I…

Understanding Serverless

To be honest, I’ve had a rough time understanding how FaaS fit into my vision of a microservice architecture. It made sense that they were microservices themselves, especially when they are event driven: put something in a bucket, then do something, maybe do something else and so on. But what I didn’t understand was why build a serverless function if you could build an API. In the end I realize…

Accelerating Development

The main goal of every startup is to make money. Every part of the organization should be driven to create money for the company. This means creating products that users want to buy while decreasing the cost to produce the product all in a timely manner. In a technology startup the product to deliver in many cases is code. The beginning phases of this process involve a lot of late nights, rapid…

Consumer Driven Contracts

In the past I have written about what a microservice architecture looks like and some of the tradeoffs that come with it. One of the biggest gains this architecture brings you is the ability for many people to be working on different projects at the same time. Inevitably the services you are writing will be used or you may need to consume someone else’s API to get your work done. This is easy…

Clean Repositories

When reading Clean Architecture by Robert Martin, I came across a chapter of the same name. In it the author describes this “idealized” architecture structure where business and application logic are at the center of the diagram with outward rings surrounding it describing interactions with various frameworks and IO devices. This architecture can also be known as Hex Architecture or Ports and…

Narrative Code

Intro In starting this series, I was confronted with the dilemma of which area of programming should I start with? Testing? Data Modeling? Language Types? All of which are very important topics and areas that any good developer should know. However, I felt strongly that the best area to start was not with code at all but writing. As a developer we tend to write our code for one person, ourselves.…

Programming Is a Craft

This is a response to the following article Programming as craft Programming is a craft. I will never claim to be a master of the craft but to say that programming cannot be considered a craft overlooks many elements of the profession. Sure, groups of developers aren’t building artisan furniture or designing magnificent cathedrals but none of these crafts were perfected overnight and…

Dumb Phone Eulogy

I am one of the few people who’ve probably traded in their smart phone for a dumb phone. By dumb phone I mean a phone that pretty much just makes calls and texts. For over eight years now I’ve scorned the smart phone market because of the increasing negative effects I feel it has on people. The concept of being constantly connected always presents itself as a great thing but often…

Sagas

My last couple posts have been about developing and designing cloud based applications. In the What Are Microservices blog post I wrote about the importance of having small shippable applications that can easily scale depending on demand and are decoupled from other services to allow for faster development and independent deployments. In A Tangled Mess we explored how to decouple the systems even…

A Tangled Mess

The goal of microservices is to produce independent systems that have loose coupling. This allows for the ability to manage and release upgrades without impacting other applications. However, many first implementations of microservices make the developers believe that the only way to communicate with another API is through a client. Thinking that obviously this is part of the whole process, they…

What Are Microservices

At the beginning we all start building an application. Then some part of it takes off and before you know it you are throwing new pieces on the original application until it becomes unweildy. Thus is born the Monolith. In time your system gets large, cumbersome, and hard to maintain. Then you hear about microservices (or maybe you started that way because it was in fashion when you started…

Another Tech Blog

Who needs another technology blog? Aren’t there enough out there? It seems like it’s a right of passage for someone to create one but to who’s benefit? This has been the third or fourth (maybe fifth) attempt for me to start some sort of blog each with their vision. Yet in the end they sit in a corner of the internet wasting away helping no one. All blogs feel that they need to…

About

Grey Seal is a Retrieval-Augmented Generation (RAG) chat backend — a service for having grounded conversations with a knowledge base I actually own and control. Why I Built It I wanted to be able to ask questions across the documents, links, and notes stored in my self-hosted platform and get answers that cite real sources rather than hallucinated ones. Commercial RAG products exist, but they…

About

Lynx is a personal link and feed management service — a place to save, organise, and enrich URLs and RSS/Atom feeds without handing that data to a commercial read-later or bookmarking platform. Why I Built It I wanted to own my reading list. Existing bookmarking tools work well enough, but they’re third-party services with their own retention and privacy trade-offs. Lynx runs on my own…

About

Magpie is a resource tagging and cataloguing service — the central hub that ties together the other services in my self-hosted platform by receiving resource events, persisting their metadata, and fanning them out to downstream consumers. Why I Built It As I added more services (Lynx for links, Owl for books and papers, Weevil for reading data) each one needed to notify the rest of the platform…

About

Owl is a personal digital library service — a place to store and manage PDF/EPUB books and academic papers without depending on a third-party platform. Why I Built It I wanted a single place to keep my reading material that I actually control. Commercial alternatives for books are fine, but for academic papers the existing options are either siloed into specific platforms or require manual…

About

Shrike is a unified search and retrieval service — a single endpoint any service in my platform can query instead of each one maintaining its own search index. Why I Built It As the number of services grew, so did the need to search across them. I didn’t want every service managing its own embeddings and full-text indexes independently. Shrike sits downstream of the Kafka bus, ingests events…