Withertos And Whyfors

Withertos And Whyfors

If I’ve said it once, I’ve said it a thousand times: there’s more to being a software engineer than coding. In fact, coding isn’t even the hardest part.

The point of that latter article is that AI won’t replace programmers any time soon, but not because it can’t code. Rather because it needs to know what it’s coding for, and specifying that well is what matters, whether it be a carefully constructed prompt to GPT or a detailed requirements document.

One of my favorite sayings is “It’s only software!” And I mean it, in that with enough time and money, computers can do just about anything (which is itself pretty darn cool). But no amount of software can determine what ought to be built. To do that we must apply a broader set of tools.

Just Do It

Just Do It

Don’t mean for this blog to turn into an endless stream of “gripe about all things AWS” posts, but once again today I ran into an issue that I feel the system ought to be able to figure out on my behalf.

I’m trying to deploy a CloudFormation template (which, not my favorite) in us-west-2. There’s a small bit of configuration (the WAF rules) that are globally applicable, and when not deployed in us-east-1, this causes the whole template deployment to fail (with an utter non-sequitur of an error message):

I mean, obviously that means I’m trying to deploy in an unsupported region, am I right? (eye roll)

Oh CloudFormation, why aren’t you smart enough to just apply the parts that must be global in any region? Right now you’re forcing me to either 1) deploy the whole thing in us-east-1, which I don’t want to do for locality reasons, or 2) split the template into two pieces, which adds complexity. Boo!

Amongst The Silos

Amongst The Silos

Steps I expected to take when creating an Amazon QuickSight instance and connecting it a PostgreSQL database in Amazon RDS:

  1. Write terraform to create the QuickSight instance
  2. Write terraform to create the RDS dataset
  3. Open the QuickSight console and create a dashboard using that dataset

Steps I actually had to take:

  1. Write terraform to create the QuickSight instance only to discover that creation via API is not supported in my region of choice, so had to throw it away
  2. Create the QuickSight instance manually in the console, during which I had to explicitly select that I wanted to give permissions to talk to RDS
  3. Manually edit the resultant IAM policies to include permissions to use the customer-managed keys that encrypt all our resources
  4. Apply a security group to the RDS instance that allows TCP access on port 5432 to the QuickSight public IP addresses in my chosen region
  5. Add a user to PostgreSQL specifically for QuickSight to use, one with a password hashed using an older algorithm, since the QuickSight driver uses a version that lacks support for modern (read: most secure) algorithms
  6. Grant permissions for this user to be able to read the schemas and tables that hold the data I want to visualize
  7. Create the RDS dataset in QuickSight, manually entering the connection details
  8. Create a dashboard using the above dataset

Figuring out a number of the above steps required decoding unhelpful errors, searching through pages of documentation, and other non-trivial efforts. For shame, Amazon, for shame. Y’all should talk to each other more.

Leave No Trace

Leave No Trace

Pro Tip: When creating a piece of code or infrastructure that you only need for a short period of time, mark it as temporary, and ideally include a date after which it’s safe to delete. That way in the future, if you forget to delete it yourself, when some person comes across it, they know it can be cleaned up without risk.

This is doubly important if the temporary thing you’ve made opens up a potential attack vector. The canonical example is adding remote IP addresses to a security group, which I had to do just today:

I view the above as a corollary to the Shopping Cart Theory. The world thanks you for your service.

Avengers Assemble

Avengers Assemble

Back in June, I reflected on the importance of professional friendships, and teased that I’d have more to say “soon” about it. Well, the day has come (and yes, I realize to some, a six week delay might not feel like soon, but in programmer terms, I think I delivered pretty quickly).

I’m excited to announce the launch of 4S Tech. It’s mission is to cultivate a community of technical leaders who live in 4S Ranch though encouraging them to get to know one another, discover each other’s work, and share ideas for collaboration.

Our meetings will begin on August 24 and every Thursday after that from 2-4pm. If you’re anywhere near the area, I’d love to have you stop by for casual conversation, networking, and co-working at the terrace outside Mostra Coffee. They also sell beer if that’s your thing, and there’s a number of other food and drink options nearby if you want to hang longer.

If you’ve got any questions or ideas, please let me know. Here’s to establishing connections!

Next To Godliness

Next To Godliness

For the first five years of my career, I worked for a defense contractor located on-site at an Air Force research facility. My job was to write software, but the lab had quite a bit of hardware as well. Over time, things could get pretty messy as we were regularly reconfiguring the setup, leaving random cables and parts strewn all over the place.

We must not have been unique in this, because about half-way through my tenure there the powers-that-be started a “tidying up” initiative that everyone was required to participate in, up and down the ranks, including uniformed military, civilian, and contractors. Being already something of a neat freak, I bought some split loom tubing (from Parts Express, my absolute favorite source for A/V parts) and used it to bundle all the cords at my desk. Apparently I’d done such a good job that word got around about my setup, and one afternoon the person at the top who’d launched the cleanup initiative stopped by and thanked me for my efforts, and said my desk was the example that others in the building should emulate.

Ever since I learned proper cable coiling technique I’ve enjoyed keeping areas with many of them as neat as possible, ideally with none of them visible. Today I was happy to do so in my wife’s classroom, including installing a light strip since the cubby where her desk lives is in a poorly-lit corner.

I didn’t need much nudging to do this; now the drive to tidy cables is a bit of a compulsion. If I ever see random ones laying about (such as on a conference room table), I’ll coil them out of habit. And if I ever see someone doing it wrong you can be sure I’ll have something to say about it. Yes, there is a right way, and it’s easy to learn with a bit of practice, so no excuses.

Work In Progress

Work In Progress

Two things can be true at the same time.

On one hand, I’m thrilled to be working in the most diverse organization I’ve ever been a part of. Our founder and chair of the board is a woman. My boss (the CEO) is a woman. I’m the only man in the C-suite. Our broader leadership team is 75% women. And the company at a whole sits at roughly 50/50.

On the other hand, I recognize we can still do better. The language and metrics I just used, for example, which reflect a binary that isn’t representative of the richness of human form and experience, let alone all the other dimensions of diversity that aren’t as varied on the team. The levers we can pull as a small organization are constrained, but at least we’re starting from a good place; as opportunity arises I intend to make further improvements.

Celebrate the wins yet strive for more, because when it comes to being Earth’s best employer, it’s always day one.

Have It Your Way

Have It Your Way

My first real job was at Burger King, which I got at my dad’s behest the summer of 1994. I was only 15 years old, and what I could do was pretty limited (no food prep, nothing to do with the deep fryer, couldn’t even do dishes because of knives). But what I could do was operate the register and take orders. On balance it was a positive experience, not least because it taught me how to talk to strangers.

I’ll never forget one particular aspect of my training. There was a question we were expressly forbidden to ask when interacting with customers, and if we ever did, even accidentally, our manager would yell at us from across the kitchen. The question?

Is that it?

Why was it verboten? Because it shuts down conversation. In social situations humans are wired to want to answer questions in the affirmative, and a “yes” response to that question means no more items to add to the order, and my corporate overlords definitely didn’t want us to encourage customers to stop adding fries, drinks, desserts, and more. What question were we instead instructed to ask?

Is there anything else?

The difference is significant, as an affirmative answer here encourages the customer to go ahead and keep ordering, subtly suggesting that perhaps there’s more they would enjoy. I realize now, though, that there’s an even better way to nudge a person to continue speaking what’s on their mind.

What else?

I first picked up this simple but effective question from one of my managers at AWS, as he would use it throughout our 1-on-1 meetings to get me to be honest about what I was thinking and feeling about my job. This question works because unlike the prior one, it assumes that a person already has more to say, nudging them to say it. I know it worked on me (I had no shortage of opinions to share, no doubt).

It reminds me of another short but powerful prompt that can take a conversation to the next level:

Tell me more.

When trying to listen actively, it can be a challenge to think of relevant follow-up questions in real-time, especially with a person who’s taciturn, or if you don’t have a prepared agenda. “What else” and “tell me more” are great because they can be used at any lull in the conversation; keep them at the ready, and they won’t let you down.

“For millions of years, mankind lived just like the animals. Then something happened which unleashed the power of our imagination. We learned to talk and we learned to listen. Speech has allowed the communication of ideas, enabling human beings to work together to build the impossible. Mankind’s greatest achievements have come about by talking, and its greatest failures by not talking. It doesn’t have to be like this. Our greatest hopes could become reality in the future. With the technology at our disposal, the possibilities are unbounded. All we need to do is make sure we keep talking.”

Stephen Hawking
Here And There And Everywhere

Here And There And Everywhere

Just in case the post on crossword solve times didn’t make it obvious enough, I like to track things. I suspect it’s a corollary of liking gamification. Here’s a rundown of info I’m keeping and the tools I’m using:

This post is itself is also a tracker. A tracker of trackers; a meta-tracker, if you will.

Better Together

Better Together

Today the United States celebrates its independence. Amongst the barbecues and fireworks, it’s worth taking a few minutes to reflect on the significance of this day in history. For me, I’m most thankful for the contributions of this country’s founders to the ideals of good government.

We’ve had no shortage of trouble in living up to those ideals, and I’m convinced that some considerable reforms are still needed given how the nation has evolved (see Breaking the Two-Party Doom Loop for my favorite take on that subject), but on the whole, the system of government we enjoy with its equal representation, checks and balances, and problem solving using negotiation and compromise vs violence, has promoted human flourishing both here and around the world (well, sometimes at least).

It’s been a privilege of mine to work in the public sector for most of my career, and I don’t expect that to change anytime soon, as I’ve doubled-down on situating myself at the intersection of tech and politics. I figure it’s how I can best honor those who got us this far; to continue the quest for developing better governmental systems and policy.

I’m not alone in that effort, as I’ve been able to meet a lot of great people along the way, dedicated public servants who really care about improving lives. Perhaps you too should consider joining our ranks? Governments are positioned to solve numerous problems both big and small, and they need the kind of smart problem-solvers that tech folks typically are. It may not be glamorous, but it’s desperately needed.