Past Tense

We are reaching and surpassing dates in real-life that were formerly part of our science fiction. The screenshot which leads off this post is from part 1 of Past Tense, a time travel episode from Star Trek: Deep Space Nine. Given what the episode is about, it is even sadder that barely two months before the date in the screenshot the U.S. Supreme Court ruled that bans against sleeping outside do not violate the Eighth Amendment.


Migrating My WordPress Database from a Lightsail Instance to a Standalone Database

Last year, I moved this blog off of a EC2 instance running a too-old version of PHP to a Lightsail instance. I had to restart that instance in order to retrieve the images associated with all the prior posts so they looked exactly as they did before, but the end result was the same blog at a lower monthly cost. Since then, I installed and configured the WP Offload Media Lite plug-in to push all those images to an S3 bucket. Today I decided to move the Wordpress database off the Lightsail instance to a standalone database.

Accomplishing this move required cobbling together instructions from Bitnami and AWS (and filling in any gaps with educated guesses). Here are the steps I took to get everything moved over, in the order I took them.

  1. Export the application database from the Lightsail instance. As of this writing, the Bitnami WordPress image still keeps database credentials in a bitnami_credentials file, so using that with the mysqldump command generated the file I would need to import to the new database (backup.sql).
  2. Download backup.sql to my local machine. Connecting to my Lightsail instance with sftp and my SSH key followed by "get backup.sql" pulled the file down.
  3. Download MySQL Workbench. Looking at these import instructions, I realized I didn't have it installed.
  4. Create a Lightsail database. On the advice of co-workers who also do this with their side projects, I used us-east-2 as the region to setup in. I specified the database name to match the one in the backup.sql file to make things easier later when it was time to update wp_config.php.
  5. Enable data import mode. By default, data import mode is disabled and public mode is disabled. So I turned on data import mode and was puzzled for a second when I couldn't connect to the database in order to import from backup.sql.
  6. Enable public mode. With public mode disabled, and my backup.sql file (and tools to import it) not already available in a us-east-2 hosted instance or other resource, I couldn't load the backup data. Once I enabled public mode, I was able to use MySQL Workbench to connect and upload the data.
  7. Disable public mode.
  8. Update wp_config.php to use new database credentials.

To confirm that the post you're reading now was written to the new database, I turned on the general query log functionality on the database instance to ensure that the server was writing to it. Having confirmed that, I turned off the general query log.

The additional cost of a standalone Lightsail database is worth it for the week's worth of database backups you get with zero additional effort. Migrating to a newer WordPress instance in the future should be easier as well, now that both the database and media for the site are off-instance. The next step I need to take is upgrading from the lite version of WP Offload Media to the full one. This should offload all the media so I can safely remove it locally.


Great Customer Service Smoothes Out Bad Self-Service

Success at switching to a truly bundled Disney+ and Hulu experience (both with no ads) from the janky status quo where both services were billed separately and Hulu had ads but Disney+ didn't required the great customer service experience I had earlier today. In prior months, I'd made the mistake of following the instructions provided as the self-service approach to accomplishing this, and failed miserably. I switched from annual billing to monthly on Disney+ and tried to switch to the Premium Duo multiple times over multiple months, only to be redirected to Hulu and be blocked from signing up for what I wanted.

Today I tried the chat option (with a live human being) and finally got the bundle I wanted--and a refund for the price differential between the new bundle and what I'd been paying. It ultimately took being manually unsubscribed from both Disney+ and Hulu, which the customer service rep accomplished by reaching out to whatever department and systems she needed to, in the span of about 20 minutes. Definitely a 5-star customer service experience--unfortunately made necessary by terrible self-service options.

Plenty of companies almost certainly believe that they will be able to use ChatGPT (or something like it) to replace the people that do this work. But at least initially (and probably for quite awhile after that) the fully-automated customer service experience is likely to be worse (if not much worse) than the experience of customer service from people. I'm very skeptical of the idea that an AI chatbot would have driven the same outcome from a customer service interaction as a person did in this case. And this is in a low-stakes situation like streaming services (some number of which will very likely end up on my budget chopping block in 2024). High-stakes customer service situations will not have the same tolerance for mistakes, as shown in the FTC's 5-year ban on Rite-Aid using facial recognition for surveillance. These are the sorts of mistakes warned about in the documentary Coded Bias years ago, but I have no doubt that other companies will make the same mistakes Rite-Aid did.

In an episode of Hanselminutes I listened to recently, the host (Scott Hanselman) used a comparison of how AI could be used between the Iron Man suit and Ultron. I hope using AI to augment human capabilities (like the Iron Man suit) is the destination we get back to, after the current pursuit of replacing humans entirely (like Ultron) fails. Customer service experiences that led by people but augmented by technology will be better for people on both sides of the customer service equation and better for brands.


Flipboard Renewing Its Relevance With the Fediverse

Flipboard is jumping into the fediverse with both feet, according to a piece from The Verge. While the fediverse isn't where I saw the piece first (that would be on Threads), when Flipboard first announced it was experimenting with Mastodon some months back, it was the first time I'd thought about Flipboard in years (much less used it). Since The Verge piece first ran December 18th, it's been updated with links to both their Flipboard account, and their Mastodon account.

If you're not familiar with Flipboard, their key organizing principle is the magazine. Articles you read from any number of sources can be "flipped" into a magazine you create, along with any commentary you may want to provide. As in other social media networks, you can follow other members and be followed by them. You can comment on shared articles and other Flipboard members can respond. Another interesting feature (which I never took advantage of myself) is Invite contributors. I presume this feature allows multiple Flipboard members to contribute articles to the same magazine. This might be how The Verge handles its own presence on Flipboard.

Unrelated to the whole fediverse pivot, reviewing the features of Flipboard makes me wonder if they ever actively pursued the sorts of people who write newsletters. From what I've seen of Substack, I haven't seen anything it does as a service that Flipboard doesn't do as well or better--and they probably have a much larger number of monthly active users.

The key difference I've found so far between the mobile app experience and the web experience of Flipboard is that you can only flip articles into Mastodon via the mobile app.

Another thing Flipboard has changed since I last looked at what they were doing with Mastodon is allow you to add any Mastodon profile URL to your Flipboard profile and display a verified link on your profile page. I've already set that up and now my profile looks like this:

This is the sort of attention and interest that Tumblr could have generated had they moved more aggressively in exploring integration with the fediverse via ActivityPub. Tumblr is a first-class citizen on IFTTT, an awesome site for creating workflows and automations between a whole host of different services. I have a number of automations (IFTTT calls them applets) that use Tumblr as a destination and a "fedified" Tumblr would have let me automate a lot of posting without having to change a thing. Flipboard simply isn't set up for that--not without workarounds or hacks (though IFTTT appears to have one that uses Pocket as an intermediary that I plan to try).

If this post has piqued your curiosity about Flipboard's foray into the fediverse, I encourage you to check out Flipboard for yourself. Follow me there, comment on pieces I've flipped, create your own magazine(s), get the Flipboard mobile app and flip good pieces into Mastodon.


(Tech) Education Should Be Free (and Rigorous)

Free tech education is the reality being created by Quincy Larson, the founder of FreeCodeCamp. I've been seeing their posts on Twitter for years, but didn't dive deeper until I heard Larson interviewed recently on Hanselminutes. The 30-minute interview was enough to convince me to add Larson's organization to the short list of non-profits I support on a monthly basis. One of the distinctions I appreciated most in the interview was the one made between gate-keeping and rigor. Especially in the context of certifications (in an industry with an ever-growing number of them), making certifications valuable is a challenge that FreeCodeCamp solves by making them challenging to get. Having pursued a number of certifications over the course of my tech career (earning a Certified Scrum Master cert a couple of times, the AWS Certified Solution Architect Associate, and an internal certification at work for secure coding), I've seen some differences in how the organizations behind each certification attempt to strike that balance.

  • Certified Scrum Master. Relative to cloud certifications for AWS, Azure, or Google Cloud, CSM certification is much easier. Two days in an instructor-led training course, followed by a certification exam and you have a certification that's good for 2 years. I don't recall what my employers paid for the courses to get me certified each time, but these days you can spend anywhere from $500-$1100 per person for the 2-3 day class and exam. I think the minimum score to pass is 80%, and one of my classmates the last time I certified got 100% (I missed out on that by a single question). In short, less rigorous (and far less gate-keeping).
  • Certified AWS Solution Architect Associate. I spent months preparing for to take this certification exam. Just the associate-level exam itself costs $150. The self-study course and practice exams I took (both from Udemy) normally cost $210 combined, though there are plenty of other options both online and instructor-led (I expect the latter would cost significantly more per student than instructor-led training for other certifications. Achieving the minimum score to pass (usually around 70%) is far from certain, given the sheer amount of material to retain and the high level of rigor of the questions. I ended up scoring around 80% but I really had to sweat for it. Much more rigorous, but rather low on gate-keeping as well because of the relatively low cost of self-study and practice exams (and the ability to do hands-on practice with the AWS Free Tier with a personal AWS account).

The key value of rigor is that the process of preparing to take a certification exam should meaningfully apply to actually doing the work the certification is intended to represent. My experience of pursuing AWS certification is that the learning did (and does) apply to design discussions. It's given me valuable depth of understanding necessary to push my teams to fully explore different services for building features. One of my direct reports used the knowledge gained from certification to build equivalent functionality out of AWS services approved for use inside our organization to approximate the functionality of an AWS service currently not approved for use (in order to integrate with a third-party vendor we were working with).

When I talk to people in different fields where certifications are available, I get the distinct sense that there are varying degrees of gate-keeping involved (a practice that tech companies are certainly no strangers to). My wife has said this often regarding HR certifications offered by SHRM. She's been an HR director for over 20 years (without that certification) but hasn't been able to pass the certification exam (despite having a master's degree in HR management).

When considering whether or not to pursue a certification, it's definitely a good idea to look at them from the additional perspective of whether they are gate-keeping--or providing rigor--not just if they will help you advance your career. If you can, find out from people who've actually earned the certification whether they feel like it helped make them better at their job. Some certifications are must-haves regardless of their rigor or utility, either because your employer requires them or because eligibility to pursue certain contracts requires them (particularly in the federal contracting space).



Will AI Change My Job or Replace It?

One of my Twitter mutuals recently shared the following tweet with me regarding AI:

[twitter.com/carnage4l...](https://twitter.com/carnage4life/status/1648509247246974977?s=61&t=WjLQbL9JF8UV2BDiOn9Ung)


I found Dare Obasanjo's commentary especially interesting because my connection to Stack Overflow runs a bit deeper than it might for some developers. As I mentioned in a much older post, I was a beta tester for the original stackoverflow.com. Every beta tester contributed some of the original questions still on the site today. While the careers site StackOverflow went on to create was sunsetted as a feature last year, it helped me find a role in healthcare IT where I spent a few years of my career before returning to the management ranks. Why is this relevant to AI? Because the purpose of Stack Overflow was (and is) to provide a place for software engineers to ask questions of other software developers and get answers to help them solve programming problems. Obasanjo's takeaway from the CEO's letter is that this decade-plus old collection of questions and answers about software development challenges will be used as input for an AI that can replace software engineers altogether. My main takeaway from the same letter is that at some point this summer (possibly later) Stack Overflow and Stack Overflow for Teams (their corporate product) will get some sort of conversational AI capability added, perhaps even without the "hallucination problems" that have made the news recently.

Part of the reason I'm more inclined to believe that [chatbot] + [10+ years of programming Q & A site data] = [better programming Q & A resource] or [better starter app scaffolder] instead of [replacement for junior engineers] is knowing just how long we've been trying to replace people with expertise in software development with tools that will enable people without expertise to create software. While enough engineers have copied and pasted code from Stack Overflow into their own projects that it led to an April Fool's gag product (which later became a real product), I believe we're probably still quite some distance away from text prompts generating working Java APIs. I've lost track of how many companies have come and gone who put products into the market promising to let businesses replace software developers with tools that let you draw what you want and generate working software, or drag and drop boxes and arrows you can connect together that will yield working software, or some other variation on this theme of [idea] + [magic tool] = [working software product] with no testing, validation, or software developers in between. The truth is that there's much more mileage to be gained from tools that help software developers do their jobs better and more quickly.

ReSharper is a tool I used for many years when I was writing production C# code that went a long way toward reducing (if not eliminating) a lot of the drudgery of software development. Boilerplate code, variable renaming, class renaming are just a few of the boring (and time-consuming) things it accelerated immensely. And that's before you get to the numerous quick fixes it suggested to improve your code, and static code analysis to find and warn you of potential problems. I haven't used GitHub Copilot (Microsoft's so-called "AI pair programmer) myself (in part because I'm management and don't write production code anymore, in part because there are probably unpleasant legal ramifications to giving such a tool access to code owned by an employer), but it sounds very much like ReSharper on steroids.

Anthony B (on Twitter and Substack) has a far more profane, hilarious (and accurate) take on what ChatGPT, Bard, and other systems some (very) generously call conversational AI actually are:

[twitter.com/swearyant...](https://twitter.com/swearyanthony/status/1635979825428205568?s=61)&t=V5fIhk2nXZQISXUJjoshxQ

His Substack piece goes into more detail, and as amusing as the term "spicy autocomplete" is, his comparison of how large language model systems handle uncertainty to how spam detection systems handle uncertainty provides real insight into the limitations of these systems in their current state. Another aspect of the challenge he touches on briefly in the piece is training data. In the case of Stack Overflow in particular, having asked and answered dozens of questions that will presumably be part of the training data set for their chatbot, the quality of both questions and answers varies widely. The upvotes and downvotes for each are decent quality clues but are not necessarily authoritative. A Stack Overflow chatbot could conceivably respond with an answer based on something with a lot of upvotes that might actually not be correct.

There's an entirely different discussion to be had (and litigation in progress against an AI image generation startup, and a lawsuit against Microsoft, GitHub, and OpenAI) regarding the training of large language models on copyrighted material without paying copyright holders. How the lawsuits turn out (via judgments or settlements) should answer at least some questions about what would-be chatbot creators can use for training data (and how lucrative it might be for copyright holders to make some of their material available for this purpose). But in the meantime, I do not expect my job to be replaced by AI anytime soon.


GenXJamerican.com Moves to Amazon Lightsail, A Follow-Up

One change I missed after migrating to Lightsail, was ensuring that all the posts with images in them were displaying those images on the new site the way they were on the old. A scroll backward through previous posts revealed the problem quickly enough, but life is busy so it took awhile until I had enough time fix it. The steps I expected I would need to take to resolve the missing images issue were roughly the following:

  • Start up the old EC2 instance
  • Download the old images
  • Upload the old images to the new instance on Lightsail

Because I only stopped the previous EC2 instance instead of terminating it, I was able to re-start it. To download the old images, I'd have to find them first. Having self-hosted WordPress for awhile, I knew the images would be in subfolders under wp-content/uploads, so the only real question remaining was where exactly the old Bitnami image rooted the install. Once I "sshed" into the instance, that location turned out to be ~/stack/apps/wordpress/htdocs/wp-content/uploads. Images were further organized by year and month of blog posts. To simplify the downloading of old images, I had to knock the rust off my usage of the tar command. Once I'd compressed all those years of images into a few archive files it was time to get them off the machine. I used this Medium post to figure out the right syntax for my scp commands.

Once the archive files were on my local machine, I needed to get them onto the Lightsail instance (and expand them into its uploads folder). But just as I did compressing and pulling the files down from the EC2 instance, I had to figure out where they were in the new Bitnami image. As it turned out, the path was slightly different in the Lightsail image: ~/stack/wordpress/wp-content/uploads. Once I uploaded the files with scp, I had to figure out how to move them into the years and months structure that would match my existing blog posts. Using the in-brower terminal, I was reminded that the tar command wouldn't let me expand the files into an existing folder structure, so I created an uploads-old folder and expanded them there. Then I had to figure out how to recursively copy the files there into uploads. It took a few tries but the command that ultimately got me the result I wanted was this:

sudo cp -R ./uploads-old/<year>/* ./<year>

Now, every post with images has them back again.


GenXJamerican.com Moves to Amazon Lightsail

Before last year ended, I moved this blog off its EC2 instance running a too-old version of PHP to an Amazon Lightsail instance in a new region. The original rationale for hosting on EC2 was to have a project and a reason to do things in AWS other than whatever a certification course might teach. But having finally earned that AWS Certified Solution Architect Associate certification last spring (and paid more in hosting fees than a blog as small as this really merits), the switch to a simpler user experience and lower cost for hosting was overdue.

Lightsail made it simple to launch a single self-contained instance running the latest version of WordPress. The real work was getting that new instance to look like the old one. Getting my posts moved over wasn't hard, since I make a regular habit of using Tools > Export > All Content from the dashboard to ensure I have a WordPress-compatible copy of my posts available. The theme I use however (Tropicana) recommends far more plugins than I remember when I first chose it. The Site Health widget nags you about using a persistent object cache, so I tried getting the W3 Total Cache plugin working. I kept seeing an error about FTP permissions that I couldn't resolve so I got rid of the plugin and Site Health said the server response time was ok without it. Another plugin I got rid of was AMP. Something about how I had AMP configured was seemed to prevent the header image from loading properly. With AMP gone, everything worked as before. Akismet Anti-Spam and JetPack are probably the most important plugins of any WordPress install so I made sure to get those configured and running as soon as possible.

The last change I needed to make was the SSL certificate. The Lightsail blueprint for WordPress (the official image from Bitnami and Automattic) has a script which automatically generates certs using Let's Encrypt. When the script didn't work the first time (because I'd neglected to update my domain's A record first), I went back and made that change then shut down the (now) old EC2 instance.

GenXJamerican 2.0 still needs some more changes. I used to have a separate blog just for photos, years ago when one of my best friends was hosting WordPress instances. The Social Slider Feed plugin lets you pull in content from Instagram and other social media sites, so I've added those to a Photos page. Once I figure out the photo gallery plugin, that should be the next update. I'll also be looking into the ActivityPub and WebFinger plugins as part of my growing interest in Mastodon.



Linux on the Desktop: Google Pixelbook Edition

A friend of mine recently shared this post in our Slack group marking 2022 as the year of Linux on the Desktop.  While my own days of running Linux of self-built PCs are long gone, I've toyed with the Debian Linux distro occasionally since buying a Google Pixelbook back when the first came out in 2018.  I walked through post like this one explaining how to set up on Pixelbook for dev work.  I played a bit with some Go code.  But outside of those brief detours, I pretty much stuck to using it as intended.
I don't recall why Google was selling them for $300 off back then, but $699 was an easier price point to rationalize than $999.  Though most of the mobile devices at home and some of the stationary ones are made by Apple (work and personal MacBook Pros, various sizes of iPad for myself and the twins, iPhones and watches for my wife and myself, and Apple TVs), I get a lot of use out of the Pixelbook.  The form factor makes it better than the iPad mini for watching streaming video (which came in handy numerous times when in-laws were in town and all the TVs in the house were occupied).  The keyboard and trackpad make it a capable device for web browsing, email, and social media.  It's a great device for travel--pre-pandemic I took it on a work trip as a second device since I'm very strict about keeping work things and personal things separate.
Despite all these pluses, Google cancelled the Pixelbook earlier this year (not unlike many of its other projects).  It will get support through mid-2024 (it's successor, the Pixelbook Go will get support through mid-2026) but that's it.  Certain apps I used to be able to install and upgrade from the Google Play store (like Slack) have stopped releasing new versions for ChromeOS.  The aforementioned Linux distro came in handy when I got tired of using Slack in the browser.
I found this article with instructions for how to install the Debian Linux version of Slack.  Of course, the instructions didn't work for me because it had been forever since I'd updated the Linux distro on my Pixelbook.  Following the fix problems with Linux device instructions took care of that.  But once I got Slack installed, signing into the browser didn't redirect me to the app.  More searching yielded a Reddit thread, which said I needed to install the Chromium browser on Linux for the activation link to work properly.  So I followed these steps to install Chromium.  Now I'm back to running Slack as an app (instead of just another Chrome tab).

Tell Me About Yourself--Engineering Leader Edition

The following tweet starts an excellent thread of questions that I’m taking as a starting point for this post looking back over the past 5 years with my current company: twitter.com/lilykonin…

When was the last time you promoted someone on your team?  How did it happen? My organization works in a way that promotion decisions are actually approved (or rejected) at a much higher level than mine.  But I’ve advocated successfully for promotion for two of my direct reports, both during the pandemic.

The first was a recent college graduate who spent the 18 months of his professional career on my team.  While I wasn’t his manager for the entirety of that time, I encouraged him to work on communication across various channels (Slack, email, documentation, pull request comments, etc).  I did what I could to put opportunities in front of him to grow and showcase his skills.  What he did on his own (in addition to pursuing a master’s degree in computer science on the side) was earn AWS certifications.  He passed 4(!) in a single calendar year.  So when it came time to year-end reviews, there were a lot of accomplishments to point to as well as positive feedback from people outside our team from their experiences of working with him.  He was the first direct report I had who earned the highest possible year-end rating: exceptional, and the first promotion (to senior engineer).  He’s still with the company today, and received another promotion (to principal engineer) in the same cycle I received a promotion to senior manager.

The second promotion was for someone who had been with the company longer than I had.  From what I was told she had been submitted for promotion once or twice before but had not been selected for promotion.  She was (and is) one of those engineers who leads much more by example than by talking.  Having observed over the years that the review process tends to overindex on software engineers that present well, I became the person in meetings who consistently pushed people to consider written communication as well as presentations in judging the quality of an engineer’s communication.  I also recommended she take the technical writing courses offered by Google.  These steps, plus highlighting her numerous critical contributions to the team’s success during another year-end review cycle appear to have been enough to get her promoted to principal engineer.

Why did the last person in this role leave?  It’s been long enough that I don’t actually recall why the previous leader of the team moved on.  I presume they found an opportunity with another company.

How do you nurture psychological safety in your team?  Regular one-on-ones (I follow a weekly cadence for these) has been important to nurturing psychological safety.  Because I joined the team to lead it after work-from-home began, Zoom meetings were really the only avenue available to build the rapport necessary for my team to trust me.  I also started a technical book club with the team, with the intention of giving my team exposure to software design and implementation principles outside the scope of our current work, along with providing opportunities for each member of the team to lead discussions and explore ideas.  It seems to have had the additional benefit of building everyone’s comfort level with, and trust in, each other along with all the other things I’d intended it for (including ideas originating from book club showing up as production enhancements to our software).

When was the last time you supported a direct report’s growth, even if it meant leaving your team or company?  In my previous department, I had staffing responsibilities for two teams for awhile: one composed entirely of contractors in addition to my own team.  In helping a scrum master friend of mine diagnose the causes of the contractor team struggling to be productive, I concluded that the main issue wasn’t technical expertise but the lack of a leader to help remove impediments and connect them with others in the organization who could help their tasks move forward.  I proposed this as a leadership opportunity for one of my direct reports and got buy-in from higher-level management.  He was so successful in the stretch opportunity I created, he got promoted after leaving my team.  Not long after that, he left our organization to join Amazon as an engineering team lead in Seattle.  He’s currently a principal software engineering manager with Microsoft in Atlanta.

Can I speak to some women on the team to hear more about their experience?  Two of the engineers on my current team are women.  If all goes well, another one of them will be promoted to principal engineer by virtue of her performance over the past 18 months.  While it will likely mean losing her to another team, her getting promoted and gaining new opportunities that my team’s scope doesn’t provide is more important to me.  I see it as another opportunity to build up another engineer in her place.







Two Tales of Tech Recruiting

[embed][twitter.com/jstTECHch...](https://twitter.com/jstTECHcharge/status/1487209360883339264)[/embed]

In an industry that has had (and continues to have) persistent problems when it comes to how it hires and treats black people within its ranks, few things are worse than a black woman announcing on social media that she short-changed a candidate of $45,000 because "I personally don't have the bandwidth to give lessons on salary negotiation".

I've worked with both contract recruiters and full-time recruiters in 10 years as a manager staffing software engineering positions on multiple teams and none of them low-balled any candidate I chose to extend an offer because I intended to keep those folks for as long as I could. The alternative--losing good people to companies that can poach them simply by offering more money--meant not just losing their skills, and having fewer people to divide the same amount of work between, but my employer incurring costs trying to backfill the open position. Especially in a market where the competition for talented people is more and more challenging, the last way any company should start a relationship with a new employee is by undervaluing them from the moment they join.

A position I only filled a couple of weeks ago had been open for two solid months before that. Rather than risk losing a good candidate over $10,000, I requested an exception to offer a larger signing bonus. With the exception granted, we made a best and final offer that he accepted. The onboarding process is going smoothly, and since we're paying him what he's actually worth based on the geography we're in and what our competitors are offering, he will be harder to poach with just money.

Fortunately, there are good examples of recruiters doing well by the people they recruit.

[twitter.com/uhhbre/st...](https://twitter.com/uhhbre/status/1485961485805408256?s=20)&t=NjTCczTaSzUjAMjFGhJWIQ

Unlike the first Johnson, this one probably built a significant amount of goodwill and trust--not just between herself and the candidate, but between the candidate and the company she will be working for. In an industry where software engineers are encouraged to switch jobs every couple of years, this company has a good chance of growing this junior software engineer into a senior software engineer--perhaps even a engineering leader--because a recruiter put their best foot forward.

As is sometimes the case on Twitter in cases like this, someone tagged the company Mercedes S. Johnson is recruiting on behalf of--and someone responded requesting a DM with more information. The tweet that actually led me to this whole story was about doxxing and how Ms. Johnson shouldn't lose her job over the post. I've written about at-will employment and cancel culture before, and people have definitely lost their jobs for less than what this woman bragged on Twitter about doing. As of this writing, she was still defending her action.

[twitter.com/speakmerc...](https://twitter.com/speakmercedesj/status/1487458407313457155?s=20)&t=NjTCczTaSzUjAMjFGhJWIQ

If you work in tech recruiting and the opportunity presents itself, choose to be a Briana instead of a Mercedes. Both the companies you hire for and the candidates you recruit for them will thank you.


Thoughts on Diversity in Tech

On April 28, I participated in a panel and Q & A on the intersection of race & technology.  My 2 co-panelists and I each had 15 minutes for a monologue regarding our personal experiences with how race and the tech industry intersect.  This post will excerpt my prepared remarks.

Excerpt of Prepared Remarks

How did I end up writing software for a living anyway?  I blame LEGOs, science fiction, and video games.  While I’ve never actually worked in the gaming industry, I’ve built software solutions for many others—newspapers, radio, e-commerce, government, healthcare, and finance. Tech industry salaries, stocks, and stock options have given me a lifestyle that could accurately be called  upper middle-class, including home ownership and annual domestic and international travel for work and pleasure (at least before the pandemic).
For all the financial rewards the industry has had to offer though, "writing software while black" has meant being comfortable with being the only one (or one of two) for the majority of my career--going all the way to my initial entry to the field.  As an undergraduate computer science (CS) major at the University of Maryland in the early to mid-nineties, I was on a first-name basis with all the other black CS majors in the department because there were never more than 10-12 of us in the entire department during my 4 1/2 years there--on a campus with tens of thousands of students.  In that time, I only ever knew of one black graduate student in CS.  My instructor in discrete structures at the time was Hispanic.  Even at a school as large as the University of Maryland, when I graduated in the winter of 1996, I was the only black graduate from the computer science department.
Unlike law, medicine, engineering, or  architecture, computer science is still a young enough field that the organizations which have grown up around it to support and affirm practitioners of color are much younger.  The National Society of Black Engineers for example, was formed in 1975.  The Information Technology Senior Management Forum (ITSMF), an organization with the goal of increasing black representation at senior levels in tech management, was formed in 1996.  The oldest founding year I could find for any of the existing tech organizations specifically supporting black coders (Black Girls Code) was 2011.  I’d already been a tech industry professional for 15 years at that point, and in every organization I’d worked for up to that point, I was either the only black software engineer on staff, or 1 of 2.  It would be another 2 years before I would join a company where there was more than one other black person on-staff in a software development role.
I’ve had project and/or people leadership responsibilities for 8-9 years of my over 20 years in tech.  As challenging as succeeding as an under-represented minority in tech has been, adding leadership responsibilities increased the scope of the challenge even more.  As rarely as I saw other black coders, black team leads were even scarcer until I joined my current company in 2017.  It basically took my entire career to find, but it is the only place I've ever worked where being black in tech is normal.  We regularly recruit from HBCUs.  We hire and promote black professionals in technical, analytical, managerial, and executive roles in tech.  There are multiple black women and women at the VP level here.  The diversity even extends to the board of directors--four of its members are black men, including the CEO of F5 Networks.
Perhaps most importantly--and contrary to the sorts of things we hear too often from people like James Damore and others about diversity requiring lower standards--this diverse workforce has helped build and maintain a high performance culture.  This publicly-traded company is regularly in the top 25 of Fortune Magazine's annual best places to work rankings.  But this year--even in the midst of the pandemic--it jumped into the top 10 for the first time.
The company uses its size to the benefit of under-represented minorities in tech with business resource groups.  Two of the BRGs I belong to have provided numerous opportunities to network with other black associates, to recruit and be recruited for growth opportunities in other lines of business.  As a result, it's the only company I've worked for in my entire career where I've had the ability to recruit black engineers to join my team.  These groups have even provided a safe space to vent and grieve regarding the deaths of unarmed black men and women at the hands of police officers.  When we learned that Ahmaud Arbery had been murdered, I had black coworkers I could talk about it with--all the up to the VP level down to the individual contributor level.  We were able to talk about George Floyd's murder at the time, and in the aftermath of Derek Chauvin's trial.  As long as these deaths have been happening, this is the only employer I've ever worked for where I know there is a like-minded community where I can talk through such issues with--as well as sympathetic allies.
Not only has this company put millions of dollars into organizations like the Equal Justice Initiative, they set up a virtual event for EJI's founder, Bryan Stevenson,  to speak to us and field our questions.  Ijeoma Oluo and Dr. Henry Louis Gates, Jr have participated in corporate events as well.  They are one of just three Palladium Partners with ITSMF.  I recently completed a program they created for us called the Leaders of Color Workshop for the purpose of helping black managers advance within the organization.
All the good things I've shared doesn't mean it's a perfect employer (as if such a thing existed).  I found it necessary to transfer to a different department and line of business in order to find a manager interested in helping me advance my career.  Talking to my classmates in the most recent workshop revealed quite a few stories of far more negative experiences than mine from people who have been part of company much longer than I have.   They've had at least a couple of instances of viral Medium posts from former employees whose experiences were far more negative than mine.  But at least in my experience, it's been and continues to be a great place to be black in tech.
Because the majority of our workforce is women, and nearly 1/3rd of the staff comes from minority groups that are under-represented in tech, the company has done a pretty good job of avoiding the sort of missteps that can put you in the news for wrong reasons.  Seemingly just in time for the discussion we're about to have, the founders of Basecamp (the very opinionated makers of the product of the same name and the HEY email client among other products) are taking their turns as the proverbial fish in a barrel due to their decision to follow the example of Coinbase in disallowing discussions of politics and social causes at work.  So it was very interesting to read the open letter published to them by Jane Yang, one of their employees currently on medical leave.  She writes in some detail about the founders' decision to exclude hate speech and harassment from the initial use restrictions policy for their products.  Read Jason Fried's initial post and David Hanson's follow-up for fuller context.
Basecamp is a small example (just 60 employees), Coinbase a slightly larger one (1200+ employees), but they are good proxies both for many companies I've worked for and companies orders of magnitude larger like Facebook, Amazon, and Google who have recently been in the news for discriminatory treatment of underrepresented minorities in their workforce.  Their failures, and those of the tech industry at large to seriously address the lack of diversity in their recruiting and hiring practices has resulted and will continue to result in the creation of products that not only fail to adequately serve under-represented minorities, but actively cause harm.  In the same way monoculture in farming creates genetically uniform crops that are less-resistant to disease and pests, monoculture in corporate environments leads to group think, to more uniform, less-innovative products with a higher risk of automating and perpetuating existing biases.
I recently watched Coded Bias, a documentary available on Netflix (and PBS) that highlighted the failings of existing facial recognition technology and the dangers it poses--to people of color in particular (because it tends to be far more inaccurate with darker-skinned people) but to people in general.  Were it not for the work of Joy Buolamwini, a black woman research assistant in computer science at MIT, we might not have learned about these flaws until much later--if at all.  These dangers extend beyond facial recognition technology to the application of algorithms and machine learning to everything from sentencing and parole determinations, hiring and firing decisions, to mortgage, loan, and other credit decisions.  Particularly as a bank employee, I'm much more conscious of the impact that my work and that of my team could potentially have on the lives of black and brown bank customers.  Even though it's outside the scope of my current team's usual work, I've begun making efforts to learn more about the ML and artificial intelligence spaces, and to raise concerns with my senior leadership whenever our use of ML and AI is a topic of discussion.  Despite all the challenges we face being in tech as under-represented minorities, or women, or both, it is vital that more of us get in and stay in tech--and continue to raise the concerns that would otherwise be ignored by today's tech leaders.  Current and future tech products are quite likely to be worse if we don't.

New MacBook Pro

The untimely death of the mid-2015 MacBook Pro that had been my primary machine the past few years meant I forking over for another laptop. Given the hassles that resulted from buying that machine from somewhere other than Apple or MicroCenter, I didn't take any chances with its replacement.

A refurbished version of this laptop (where I wrote this post) cost a little over $400 less than retail. I'm still in the process of setting things up the way I like them, but one new thing I learned was that Apple is still shipping their laptops with an ancient version of bash.

Having used bash since my freshman year of college (way back in 1992), I have no interest in learning zsh (the new default shell for macOS). So right after I installed Homebrew, I followed the instructions in this handy article to install the latest version of bash and make it my default shell.

There's still plenty of other work to do in order to get laptop the way I want it. Data recovery hasn't been difficult because of using a few different solutions to back up my data:

I've partitioned a Seagate 4TB external drive with 1TB for a clone of the internal drive and the rest for Time Machine backups. So far this has meant that recovering documents and re-installing software has pretty much been a drag-and-drop affair (with a bit of hunting around for license information that I'd missed putting into 1Password).

I wasn't a fan of the Touch Bar initially, even after having access to one since my employer issued me a MacBook Pro with one when I joined them in 2017. But one app that tries to make it useful is Pock. Having access to the Dock from Touch Bar means not having to use screen real estate to display it and means not having to mouse down to launch applications.

Because of Apple's insistence of USB-C everything, that work includes buying more gear. The next purchase after the laptop itself was a USB-C dock. I could have gone the Thunderbolt dock route instead, but that would be quite a bit more money than I wanted or needed to spend.

Even without the accessories that will make it easier to use on my desk in my home office, it's a very nice laptop. Marco is right about the keyboard. I'll get over the USB-C everything eventually.