I code. I architect systems: usually in the cloud. I teach. I lead teams. I showcase the awesomeness I see in others.
From Scratch: An API Gateway
I tried to think of the best way to describe building an app from scratch in the cloud, but there are so many different ways you can easily get lost in all the options. So I decided I would start by showcasing what is arguably the easiest app you can make from a computing perspective. It offers the least amount of operational overhead, but at the same time, it's the most expensive option on paper.
From Scratch: DevOps Deployment
With our OIDC provider configured, we can start setting up our DevOps build process. This will ensure that everyone on the team follows the same process when deploying infrastructure for anything built into our account.
From Scratch: OIDC Providers
It's time to divert our attention to what will soon become our infrastructure deployment process. This will feel a lot like application deployments, but there will be some stark differences we'll be going over. Our applications will incorporate infrastructure in the future, but not everything we do with our IaC will be related to an application.
From Scratch: Permissions
Once we have our groups and users set up from our external identity provider we can move on to defining what permissions they should have. This is mostly straightforward, but we'll have to take a few detours along the way because of how groups work with the Google Workspace IDP.
From Scratch: IaC
It occurred to me recently that it might not be obvious when someone should start using IaC. This can be daunting because there are things you can't do, and some things you shouldn't do with IaC. There are also situations where you could use it, but it doesn't lead to any benefit.
How to Cloud: Virtual Machines
Ok at this point we are now ready to get into deploying your app into some kind of compute solution in your cloud provider. In order to make the best decisions when it comes to choosing said compute solution, we need to start with the foundations of almost all of them: virtual machines.
Leveraging Standards
Standards can often times feel like a hinderance to teams when they are developing software. When trying to deliver something to the market quickly, it’s common to forgo best practices in an effort to achieve goals quicker. This attitude is actually counter productive, however, and by taking a different attitude towards guidelines teams can actually achieve results faster.
How to Cloud: Fencing
Before you can dive into deploying your application you need to create a safe environment for your application to be deployed in. This starts with understanding some basics around making good security decisions, so this next topic is about how to make a good “fence”.
How to Cloud: IaC
In my last post I intentionally jumped the gun a little bit when it came to deploying containers into your cloud account. It should be your first priority to get your team to learn containerization, but deploying to the cloud requires allocating container registry infrastructure. That brings us to our next topic which is Infrastructure as Code, and it’s a very close second in priority.
How to Cloud: Containerization
I have kind of a standard approach on building out a cloud presence that I’ve developed over the last decade or so. I’ve used it extensively with multiple teams to create a highly mature DevOps culture within groups again and again. Today I’m beginning a series that explains some of the basics. Hopefully it can be of some use to those trying to understand good ways to leverage cloud technologies.
Simplicity
Making things simple is actually one of the harder things you do in software development. Usually as you grow in your career you will be exposed to at least a couple systems where you are left wondering “how did they ever let it get this bad”. The “bad” we have many words for. Often times, it gets to that point because we don’t prioritize Simplicity enough as leaders.
Meetings
I’ve seen a lot of people talking about the importance of asynchronous communication, and prioritizing that over synchronous styles. However, when it comes to getting down to brass tax of exactly how to transition into that type of culture, I haven’t seen a lot of material on the subject. I’m hoping to close that gap some today.
Empathy
If Integrity is the cornerstone, then Empathy is a very strong counter weight. I wouldn’t consider myself balanced as a leader if I hadn’t learned how to have Empathy, both for my team and for those around me. And while Integrity did tend to come naturally to me, Empathy was something that took some hard lessons for me to learn.
Be Replaceable
When you want to take the next step in your career a lot of people will tell you to “do the job that you want”. This isn’t wrong, but I don’t think it’s a complete picture when it comes to leading. I would argue that preparing for your next step actually starts with showing others how to do what you do. It’s the opposite of what I hear a lot of people recommend. Show your team how to do what you do, so you can replace yourself. That’s the first step…
Creating a DSL with your team
Using the terminology and language that everyone uses to describe your product inside the actual code that your team uses can give you a huge advantage in productivity. This is something I’ve gotten into the habit of doing with the teams that I lead and I thought it would be worth sharing.
Don’t Be a Rockstar
When we first started using slack at work I noticed that colleagues were putting their titles or roles in their profiles. Mine says “Awesomeness Showcaser”. It really stuck with me. Now anywhere I put my role I like to include that if I can. Showing how great your team is or others around helping you succeed is a critical part of being a good leader.
Know Your Stuff
Getting into Leadership you are immediately confronted with a major shift in what expectations there are of you in your role. You are no longer a sole contributor. You’re expected to help others do their job.