Author: Jud

Technologist interested in building both systems and organizations that are secure, scaleable, cost-effective, and most of all, good for humanity.
Slacker Part Deux

Slacker Part Deux

The advice in Five Nonobvious Remote Work Techniques is broader than just Slack, but given my prior post on best practices, I thought I’d mention it for further reading.

Technique number three from that article made me think of an additional helpful hint for Slack conversation. If you initiate a conversation via at-mention, you should be prepared to dialogue in real-time. There’s a cost to causing an interruption to another person, and one should try to minimize the duration of said interruption by treating the interaction as if it was an in-person conversation.

Also, No Hello. Get to the point.

Be A Slacker

Be A Slacker

No online collaborative tool is perfect, but when used well, Slack is pretty close. Having participated in multiple Slack workspaces across several organizations over the past few years, I’ve become somewhat opinionated (and hopefully qualified) on what constitutes “used well”. Here’s my take on some best practices:

Yes, I own Slack socks
  • Set up your profile with your real name, and add a high-quality photo. This helps interactions feel more personal, and when communication is done primarily over the Internet, every little bit helps.
  • Set up notification rules and a do not disturb window in preferences.
  • Strongly consider disabling audio notifications, as they can be a distraction to those around you.
  • Conversation in public channels is always the preferred approach.
  • Single-user DMs are acceptable for private conversation, but consider if your discussion might be valuable for others to see and contribute to. When in doubt, go public.
  • Group DMs should almost never be used unless the topic is sensitive and needs immediate response. Otherwise consider using a public channel with @mentions.
  • Temporary channels are an acceptable alternative to group DMs. Prefix them with temp-, and /archive them when conversation is complete. Typically these should not need to exist more than a day or two.
  • Discussion in a public channel where response from a specific small group or individual is needed can be easily accomplished through use of @mentions. Brief side discussions can be done with threads vs. splitting off into a new channel or private DM.
  • @channel notifies all members of a channel, even if they are outside of working hours, and should be reserved for emergencies. @here is almost always more appropriate, as it only notifies members within working hours. Even better is a small list of specific @mentions.
  • Use /mute when you want to stay in a channel but not get notifications from it. @mentions will override mute, so you’re still reachable.
  • Use /dnd when you need to ignore all notifications for a period of time (e.g. to go heads-down on a task, you’re giving a presentation).
  • Consider turning off message preview in notifications, unless you want to run the risk of a sensitive (or embarrassing) message being viewable by others.

Happy Slacking friends!

On The Shoulders Of Giants

On The Shoulders Of Giants

I took an entire class in compiler theory in college, and really enjoyed it. Can still picture the classroom in my head, in fact (3rd floor of the ENS, all the way in the back past the nursing lab). So how is it that I never learned of Frances Allen, who died last week at 88?

History is a thing that few understand in its entirety. It’s usually treated like a separate subject, but at minimum each of us should endeavor to understand the history of our own fields of study.

A Virtual Bank Is Still A Bank

A Virtual Bank Is Still A Bank

Recently I was attempting to set up automatic payments with a utility company via their website. I dutifully entered my bank’s routing number and my account number, but when I tried to submit, I was told the routing number was invalid. I double-checked it with the bank’s website, but I still got the error.

Being something of a nerd, whenever I run into trouble like this on a website, I open up Chrome’s dev tools to see what’s going on. Turns out the UI was sending the routing number to an API endpoint that ensured it belonged to a real bank before submitting the form. For whatever reason it appeared this API didn’t have my bank in its database.

Which made me wonder if I could twiddle the site’s Javascript to skip this API call and submit the form anyways. Lucky for me they didn’t perform any minification, and it was straightforward to bypass this verification step. When I did so, the form submitted just fine and told me automatic payment setup was complete. I suppose I’ll find out on my next billing cycle if it worked, but I bet it will.

Three takeaways from this little adventure:

  • As I said a few days ago, I’m glad to be the kind of person that has both the knowledge and curiosity to solve a problem like this, instead of falling back to an interminable customer support call.
  • If you’re going to put a blocking validation process in front of your customers, you better be darn sure to get it right, especially if having it fail means a loss of potential revenue.
  • Client-side validation is only a convenience, and Javascript is easily manipulated (even if minified, but honestly people, minify!) Server-side validation of all input is absolutely essential.
Perdido En La Traducción

Perdido En La Traducción

Today my kids had to choose between virtual and socially-distanced on-campus learning for this fall semester (thanks COVID-19). The selection process involved picking their high school from a drop-down on the district website. Oddly we couldn’t initially find their school (Del Norte) in the list.

Why not? Well, it turns out that Google Chrome’s auto-translate feature was attempting to be helpful, and transformed it into “From North”. Which made me realize three things:

  • I’m really thankful to be techie and able to debug such issues, because I imagine this will cause confusion for those less clued-in to potential browser oddities.
  • It’s really hard for computers to do be “smartly” helpful in a transparent way; if an algorithm isn’t darn near perfect it’s likely to do more harm than good.
  • The implementor should have added translate=no to their <html> tag to avoid this problem altogether.
Descend Into The Particulars

Descend Into The Particulars

When I’m asked about interview advice, one suggestion stands far above the rest: be specific.

I want to hear real stories about events that actually happened, not hypothetical situations you might come across in the future. Having a real story to tell that only partly addresses the question is better than a direct answer with no experience to back it up.

Tell me the actions you individually took in the situation, not what the team generally did. A job interview is not the time for false modesty. Be humble and honest about it, of course, but you’re the subject of the interview, not your colleagues.

Explain not just what you did, but how the situation turned out. What were the actual results? If you have metrics or other data you used to measure the outcome, even better, and if you can quote actual numbers, that’s the holy grail.

Finally, what did you learn from the experience, and how would you apply that to future situations? A discussion on learnings is never out of place, no matter the interview question.

Bonus tip: don’t be afraid of negative examples. No one is perfect, and most future successes are predicated on prior failures. As long as you can articulate how the situation changed you for the better, it’s a plus in your column.

We’re All In This Together

We’re All In This Together

I went far too many years into my career before truly trying to understand networking, despite it being an increasingly common source of problems. If I could give younger self some advice, I’d recommend taking some time to learn networking.

In that spirit I present to you How DNS Works, a “fun and colorful” comic that describes in detail the operation of the Domain Name Service. Enjoy!