Geoff Miller | Software Engineer & Architect
Geoff Miller
Blog

Skills

Programming Languages

Python is my Swiss Army Knife, a versatile language that excels in a wide variety of use cases. Its ease of use lends itself well to rapid iteration, yet it has a considerable amount of power under the hood. I've used Python for web development, DevOps/Infrastructure as Code tooling, ETL processes, API wrappers, and more. For web development, I primarily work with Django and Django REST Framework, although I also have experience with Flask.

Rust is my new fave and current focus. While I am fairly new to the language, I am already enamoured with its focus on performance, memory safety, and concurrency. One of my current Rust projects is writing an NES emulator. I have plans for more Rust projects in the near-future.

JavaScript is an essential tool in my toolbox for web development and occasionally elsewhere. For web frontend development, I like React and Gatsby, along with Emotion for CSS. On the backend, I've occasionally found Node.js to be the right tool for the job, especially for certain use cases like WebSockets servers and serverless architecture. I've recently taken a shine to TypeScript, which I find makes it much easier to deal with some of JavaScript's pitfalls. This website is built with Gatsby, React, Emotion, and TypeScript.

Throughout my many years of working on software projects, I've also used a number of other languages. While these aren't languages that I find myself working with regularly, I have some past experience with them and occasionally encounter them in projects.

  • I worked professionally with Go as my primary language for around six months and have occasionally revisited it since then. I like Go based on my experience with it, but it hasn't been a good fit for my recent projects. While I don't think it makes sense to directly compare the two languages, I've found that the things that I like about Go are also present in Rust, but that Rust is a better fit for my needs and interests.
  • I've worked at least a bit with the other major interpreted languages (PHP, Perl, Ruby), but I've focused on Python for this particular class of language. I only return to these as needed for specific projects, usually when working with legacy systems.
  • I've worked with Java a fair amount in the past, but I rarely touch it these days outside of reading it. I find familiarity with Java to be helpful since many "generic" code examples and open source projects are written in Java, but I don't find it to be a good fit for my current work.
  • I have familiarity with C/C++, although I've never written a significant C/C++ project. I find being able to read C/C++ highly useful due to its heavy usage in systems programming and elsewhere, but my focus is on Rust for this class of language.
  • I have some experience with assembly for a few microprocessors. The 6502 is a current area of interest.

Systems & Infrastructure

My focus in recent years has been on cloud-based systems, functioning as an architect, application developer, and SRE.

AWS is the cloud provider with which I've worked most extensively. I've used the vast majority of popular services, including EC2, S3, Lambda, and DynamoDB, among others. I've architected systems in AWS from the ground up, consulted on best practices and costs savings, and built custom managed services on top of AWS resources.

Linux has been a major focus of my work. I've worked almost exclusively with Linux-based systems for over a decade. I don’t have a strong preference between Debian- or Fedora-based servers, but I use Manjaro as my desktop daily driver. I've built Linux images in the cloud for sensitive production systems that incorporate best practices for security and performance.

Terraform is my primary tool for infrastructure management. I've built countless modules for deployments big and small, including complex multi-region deployments with network peering and high availability and security requirements. I've consulted on Terraform best practices and mentored developers to improve their Terraform usage.

Ansible is my primary tool for configuration management. My experience with Ansible includes writing numerous playbooks and roles as well as writing modules in Python. I often use Ansible in conjunction with Packer to provision machine images.

For monitoring and observability, I'm a fan of the combination of Prometheus and Grafana as well as AWS's CloudWatch service, including some of its more advanced features like X-Ray traces and Synthetics Canaries. I also have some experience with using the ELK/EFK stack for logging.

Design & Management

My architecture work includes design on managed services for distributed databases, SaaS applications, RESTful APIs, and more. I design with security, scalability, and extensibility in mind. I talk about my architecture work more in-depth in specific project write-ups and my blog.

While I prefer more hands-on technical work these days, I have handled technical project management duties in previous roles. My experience with managing software projects informs a "big picture" approach even when I'm getting my hands dirty deep in the stack, with a drive to produce shippable iterations that deliver incremental value.

I have extensive experience as a technical writer, winning praise for my clear and direct writing. I’ve written specs, developer documentation, end-user guides, and even a book-length course.