Stop Building the Wrong Tools: How Developer Surveys Transformed Our Focus
In this post, I share how my team spent two years building an internal developer portal, only to discover it wasn’t solving our developers’ real pain points. By implementing a developer survey, we uncovered the true challenges our developers were facing and pivoted our focus to deliver tools that made a meaningful impact. Learn how understanding developer priorities can help your team avoid building the wrong tools and drive real productivity improvements.
From Unicorn to Decacorn: 16 Lessons Learned at Brex
Join me as I share my journey through four and a half transformative years at Brex, the fintech powerhouse that evolved from a unicorn to a decacorn. In this article, I delve into 16 key learnings from my time as a software engineer and engineering manager. From navigating massive organizational growth and re-organizations to driving product innovations and enhancing developer productivity, these insights encapsulate the challenges and triumphs I've experienced while working in a rapidly scaling tech company.
Mastering the Art of Seeking Help: How Software Engineers Can Get the Perfect Answer, Faster!
In this blog post, we explore the art of seeking help as a software engineer, emphasizing the significance of providing context and prerequisites to ensure clear and actionable responses. By structuring inquiries with relevant details like issue descriptions, code snippets, and error logs, engineers can obtain quicker and more accurate solutions. Whether seeking assistance internally within a company or externally in developer communities and open-source projects, these skills foster a positive, supportive, and successful community. Mastering this art empowers engineers to make meaningful progress in their projects while contributing to a thriving knowledge-sharing community.
Kubernetes Oops to Kubernetes Ops: Mistakes, Learnings, and Improved Practices
As a software engineer with experience working on Kubernetes clusters at three different companies, I've had my fair share of mistakes and learnings. In all honesty, I initially had little knowledge of what I was doing and made several mistakes. However, these mistakes have been valuable opportunities for learning and growth. Now, as part of the foundations organization at my current company, I've had the privilege of learning even more from my skilled coworkers who are responsible for operating our clusters. In this blog post, I will share my past experiences, including the mistakes I made and the valuable lessons I've learned along the way.
Staff Engineer: To be or not to be?
This blog post will discuss the question that plagues many engineers - whether or not to work towards becoming a staff engineer. I will be sharing my personal journey towards becoming a staff engineer at Brex. I will discuss the motivations behind my decision to pursue this career path, the challenges I faced, and the skills and experience I needed to develop to succeed. Through my own experience, I will provide insights into the roles and responsibilities of a staff engineer, the traits and competencies required to excel in this position, and the benefits and drawbacks of pursuing this career path. By the end of this post, you will hopefully have a clearer understanding of what it takes to become a staff engineer, and whether or not it's a goal worth pursuing for your own career.
Initial Thoughts on Github Actions
Over the last few months I've started to use Github Actions in some of my personal projects. This post goes into some quick initial thoughts on the product and experience.
Areas of Improvement for Elixir
Brex adopted the Elixir programming language as its initial primary development language. However over the years we have decided to divest from Elixir and instead migrate towards Kotlin. This post goes into my *personal* ideas on why Elixir didn’t succeed at Brex so that the community and other companies can avoid some of our mistakes.
Calculating Progressive Income Taxes
In the United States (as well as other locations), we have a progressive income tax system. What this means is that the percentage or amount you pay in taxes increases as your income increases, basically higher income individuals pay a larger percentage of their income in taxes. While working on a side project I was unable to find an algorithm explanation of how to calculate progressive income taxes based on brackets, so this post goes into detail on a simple algorithm to do so.
Elixir Learnings
Brex has been developing in Elixir for the past four years, and during this time we have come across a number of learnings around developer productivity in Elixir as well as for hiring Elixir developers. Hopefully these lessons can help other organizations both adopt and rapidly scale their Elixir usage without hitting some of our speed bumps.
One Year of Elixir: How it compares to Ruby
Last year I started a new job at Brex where Elixir is the primary programming language for business logic. This was my first real adventure into Elixir after working in Ruby (mostly) for my professional career. Since José Valim came from the Ruby world, Elixir was a common buzzword I heard for years. I had done a tutorial or two here and there but never gotten to really use it. Now, looking back at the past year I've become fairly comfortable with Elixir, and wanted to outline some of the things I really enjoy about Elixir and some of the things I miss from Ruby.
Commenting Code: School vs Industry
Back in school, teachers and TAs made commenting your code seem like a necessity that everyone constantly does as a software engineer. Without comments, you shouldn't consider your code complete. However, since working in industry I find it much different in practice. This post outlines my own observations on when software engineers actually comment their code and when it's important.
Onboarding is not a One Way Street
Onboarding can be a very hectic and stressful time when you are starting a new job. New coworkers to meet, new codebases to learn, new languages to learn, new technologies, new processes, and the list can go on and on. Good onboarding materials and processes can go a long way when you're first starting out. However, it shouldn't just be a one way street where the company gives to you and you don't give back anything in return. Onboarding should be a collaborative and incremental process that every new hire actively contributes to. Things change from new hire(or onboarding class in larger companies) to new hire, especially in a fast moving startup. It is therefore not only up to the existing members but also the new hires to contribute to the onboarding experience and make it better over time.
Starting a new Elixir Project
I recently started coding in Elixir professionally. It's relatively easy to develop and add new features at work where most things are set up and running. However, I wanted to get a better understanding of setting up an Elixir project and tooling from scratch. So I decided to start simple and try to write an Elixir wrapper for a 3rd party API. Here are my thoughts and learnings from starting a new Elixir API Wrapper from scratch.
External API's Should Allow for Free Dev Accounts
Recently I wanted to create a wrapper for a third party API. It wasn't an API I used myself(at least not at the moment), but seeing as there was no wrapper for this language yet I thought I'd give it a go. Luckily this company provides a test account and sandbox environment for every account free of charge. However, I realized this is not a common thing and makes it incredibly difficult to provide wrappers for third party API's unless you are actively using the API and are a paying customer in most cases. Wouldn't developers and the companies be better served if anyone could easily create a test account for an API and develop against it?
Tips For Software Engineering Interviews
Here are some tips and tricks I used during my interviews that helped me perform better. This is by no means a fool proof guide to getting a job, but can definitely help you to perform better.
Technical Software Engineer Interview Tips
Software engineering interviews can be incredibly stressful and difficult. Recently, I went looking for a new job and threw myself back into this anxiety inducing process. In order to perform better in my interviews I came up with a 7 step game plan for technical interviews. This is by no means a fool proof guide to passing technical interviews, but can definitely help you to perform better.
Preparing for Software Engineering Interviews
Software engineering interviews can be incredibly stressful and difficult. Recently, I went looking for a new job and threw myself back into this anxiety inducing process. Here are some tips and tricks I used to prep during my interview process that I believe helped me perform better and feel more prepared. This is by no means a fool proof guide to getting a job, but can hopefully help you to perform better.
Always Follow Orange Cords
In software development there are a number of things that once had a purpose but after years of refactoring and feature development may no longer serve a purpose. It's important to never accept something as necessary without understanding why it exists and if it's still useful. When you can, take your time to follow and understand every code and system you see so you can become a better developer and help your fellow developers.
Gatsby Plugin Updates Are Annoying
Gatsby.js is a fantastic framework for developing statically generated websites using React. Plugins are a necessary part of Gatsby that allow you to quickly and easily add functionality to your Gatsby generated site. However, a lot of these plugins are updated very frequently and at the same time which can lead to a rather annoying number of pull requests when coupled with Dependabot.
When should you use Gatsby?
Gatsby.js is an up and coming technology for building simple statically generated websites. It has seen a huge adoption, and seemingly everyone in frontend development has heard about it or is talking about it. However, this has led to people trying to use Gatsby in the wrong places instead of other technologies better suited for that situation. This post talks about me falling into this subgroup as well as some of the cases where you should use Gatsby and when you shouldn't use Gatsby.
Automating Deploys to Kubernetes with CircleCI
This tutorial shows how to automate deployments to Kubernetes using CircleCI. This tutorial uses AWS services like ECR and EKS, but it can be generalized and changed for other Kubernetes solutions. This post will go through the entire CircleCI flow of deploying changes for your app to Kubernetes from updating the image and storing it in a repository to deploying the new application on EKS.
Mocking Sentry in Jest and Gatsby
This is a very short and simple tutorial describing how to mock Sentry in the Jest testing framework and more specifically in a Gatsby.js application. This approach can be used in other javascript frameworks that use Jest, but I will use Gatsby.js and their unit testing tutorial as a basis.
Deploying a Gatsby Application to an S3 Bucket Using CircleCI
This is a tutorial about how to deploy a Gatsby.js application to an S3 bucket using CircleCI.
Avoiding Webscraping Throttling Using Python and Tor as a Proxy
In order to hide your IP address and to try and limit throttling when web scraping, it might be a good idea to use a proxy such as Tor. This post describes how to use Python based web scraping tools and Tor to hide yourself when scraping websites for data. However, it can also be used more broadly when using Python to make requests to hide your actual IP. I do not condone the use of this information for any illegal or illicit activity.
Deploying a New Docker Image to an EKS Cluster on Codeship
This is a tutorial about how to deploy a new Docker image to your Kubernetes worker nodes with Codeship when you've deployed your cluster on EKS. This was based on a combination of tutorials found on Codeship and comments and extraneous links. The documentation on Codeship requires you to look in multiple places and is outdated in some cases, so hopefully this aggregates it in one place and updates it.
Setting Up AWS Elastic Kubernetes Service (EKS) and Deploying
This is a tutorial on how to setup an AWS Elastic Kubernetes Service (EKS) cluster and deploy a Docker container service to EKS. We will mostly follow the AWS tutorial but make some changes to deploy your personal containers instead of the ones provided by the EKS tutorial. This process was used to deploy our Next.js Application.
Setting Up a Next.js Docker Container and Publishing it to AWS ECR
This is a tutorial on how to setup a simple Docker image for a Next.js application so that we can deploy the Docker image to a container registry. We will use AWS Elastic Container Registry (ECR) in this tutorial as our Docker container registry. This way we can access our Docker image from other machines and deploy the image to something like AWS Elastic Kubernetes Server (EKS) or AWS Elastic Container Service (ECS).
Setting Up Google Optimize in a React App Using Segment
Setting up Google Optimize for A/B experiments in a Single Page Application(SPA)
Pipelining Segment Events Back Into Our eCommerce Store
Using AWS Lambda Functions and Kinesis Streams to process and stream Segment.io events