Blog

Software I'm Thankful For

Three Horses by Eyvind Earle, 1987

Introduction


This blog post is for top-of-mind technologies that are improving my life at the moment. I've been lucky to work with my technologies throughout my career, and I'm thankful for every technology that helped me get to where I am today. 

Docker

Docker is easily the tool that has improved my developer productivity more than any other. Docker is not only ubiquitous, but it's one of those tools that expose only enough complexity to accomplish the next step. For example, you can get a RabbitMQ image from Docker Hub and run a:

docker run rabbitmq 

and have a working RabbitMQ on your local without any more effort. If you need something more complex, you can jump into passing environmental variables or setting up a quorum. Docker has made it easier for me to share my work, work on complex systems that I would usually need to run many scripts on my local, and have better hygiene around the artifacts I deploy to production. There are plenty of aspects about the ecosystem or writing Dockerfiles to be upset about, but in general it’s a developer friendly tool.

Httpie (CLI)


Httpie is a CLI took for making HTTP calls. You can think of Httpie as Curl on steroids. Writing and testing HTTP services has been an integral part of my career. At this point in my career, I am finding tools that increase my productivity or reduce cognitive demands around making HTTP calls catch my attention. Httpie has been a trusted sidekick in my career, providing a please visual and tactile experience for making HTTP requests. 


One of the things I love most about Httpie is how sensible the CLI API is. After using the documentation to inform a few of my early requests, I haven't used the documentation again. There are few flags to remember, and the commands align precisely with the HTTP world you expect.


OpenAPI 3


OpenAPI 3 is a specification for describing RESTFUL APIs. OpenAPI 3 Specs can be generated by hand (writing JSON or YAML), by web frameworks (popular web frameworks can usually spit them out if your implementation is decorated correctly), or derived from running HTTP calls against the API. Generating, publishing, and maintaining OpenAPI 3 specifications has many benefits, but some of the most important to me are:


  • Compatibility Management (managing the forward and backward compatibility of APIs)

  • Code Generation (Using tools like oapi-codegen to generate code given an OpenAPI 3 specification)

  • Mock Servers (Generating Mock Servers from OpenAPI 3 Specifications with tools like Prism)

  • Spec-Driven Development (Designing the API first and implementing it as designed)


OpenAPI 3 specifications can seem verbose on the surface, but their completeness makes dealing with RESTAPIs much more predictable. 

TypeScript


Recently I started working with GraphQL. I haven't worked with it long enough to add it to this list yet, but I've used TypeScript as the primary language for GraphQL servers and GraphQL clients. I've used TypeScript for a while, and I've grown to appreciate it. As someone who has written a lot of JavaScript, I can express my intention clearer with TypeScript. Other things I like about TypeScript include the vast developer community and the thoughtfulness behind the interactive features added to the project. Lastly, I believe TypeScript can have a future outside of JavaScript. AssemblyScript (a variant of TypeScript with a wasm target) has been instrumental in exploring wasm.