Refining the design process

assorted-color abstract painting

What got me here won’t get me there

Since I was able to get my Substack post out on time yesterday, my focus has turned to my client’s WordPress project. I almost used the word “consulting” for a moment, but I am way too much involved in the design of the site to call it consulting at this point. And I’m having a hard time. Cause despite my familiarity with the tech stack involved in web hosting and CMS systems, my design skills really haven’t moved past the early days of the web.

Just look at this blog, for example, it’s focused on content, I’m still using a basic WordPress theme, and it’s got no color whatsoever. Part of that was intentional, so that I could focus on content generation and not get hung up on design presentation, but it’s hamstrung me. Part of my spiel whenever I talk to people about these project is about the separation of content and presentation. I tend to focus on content, structuring data, changing it. Design is not really my strong suit. It’s much more of a creative art that I’ve struggled with.

When I was in my twenties, I used to love to play around with Photoshop, making designs with filters and creating awesome images. I’m pretty good with typography as well. When it comes time to laying out text and images, and putting together a color scheme on a web page though, I just don’t know where to start. And therein lies my current problem.

The client came to me with a website that had been fully designed and rolled out between 2016 and 2018. It didn’t look like it was up to the design standards, even of that era. I can’t even put my finger on why I know that, but it just does. The site was broken. The first thing I saw when logging into the admin console was that it had a huge mess of plugins, and I couldn’t make heads or tails of it. I needed to figure out what was essential and what we could get rid of. And there were over twenty five hundred registered accounts in the system. Most of them looked like spam. Sigh.

I never ever ever make changes to a client site without testing it in a staging site, so that was the first order of business. I use Infinite WordPress to manage my sites, so the first thing I did was installed that plugin to connect it to my management console, then I started a backup. After we had that under control I cloned the existing site to staging and got to work. It was a mess. There was a lot of content on the site, over two hundred pages and posts, but the site used custom posts types and fields, and had some sort of content controls that were supposed to paywall the content and was just broken. I spent what must have been a week just trying to inventory the plugins to figure out which ones we could disable to speed things up.

The only other production change that I allowed myself was for analytics. I checked the console a couple of days later and found that the site was getting tons of hits. Apparently the blog content had been indexed by Google, and a lot of people were getting referred to it. Converting those hits into leads was now the priority. The site was still broken though. The navigation didn’t work, so most visitors were falling off. Furthermore, while checking the contact forms to see what emails were being used, I discovered that email for the domain wasn’t working. At all.

I was able to get the email up and running, but it took days to figure out where the problem was and to move the DNS records over to my reseller account. Delving into the theme itself, it appeared that the designer had just cloned the WordPress TwentySixteen theme and started editing it directly. I’m not sure if WordPress had child themes back then, but they had just dumped a bunch of custom PHP functions right after the existing ones, and the template codes were full of SQL queries into the custom fields, which didn’t jive with what the plugin documentation called for. I really didn’t want to spend however much time combing through this code to refactor it. So I recommended to the client that we start from scratch.

I’ve got an Envato account that I subscribe to, my process just involves finding a good theme that fits the tone of what I’m going for, throwing it up on the site, and swapping the boilerplate content with custom copy. And I don’t like writing copy for clients. Or, I should say I’ve avoided doing that in the past. It starts coming close to marketing, which I’ve had an aversion to. I’m working on overcoming that aversion, at least for myself and my projects, but doing that level of work for clients requires a level of intimacy with the project/product that I haven’t had the time for. I’d rather outsource it, and that’s just what I did with the last project that I was involved with.

I’m not going to take that route this time, we’re going to plow through this and get it done, come hell or high water.

One of the problems that I’ve found working through this project is that I tend to try and shape my content to fit the boilerplate in the themes I use. It isn’t working. My client gave me a document with the content that they wanted on the page, and my brain seized up looking at it, trying to figure out where to match it to fit. It’s not going to work. I’m going to spend some more time today going over it again to see if I can provide some structure to it, then I’ve got a work session with the client tomorrow to really try and break it down. I don’t think that we’re going to be able to do this part in WordPress directly. I may need some mind mapping tools or something else to make it work.

Pressing up against the limits of my abilities is going to take some work. We’ve got to bootstrap this site into production to get things moving. Maybe then we can engage a professional to help tune things.

For now, that’s me, designer, developer, editor, admin. While I have some downtime today, I’m going to do some research and see if I can find any other resources to help refine the process.

Leisure time

standing woman holding gray blanket surrounded by green grass

Seeking active engagement in the world away from screens

Monday morning is off to the right start. I got to bed on time last night, but woke up a little on the late side, so I’ve really got to get cracking this morning. I was able to complete the draft of the Substack post on Bitcoin, so I’ll be editing that and getting ready to publish. I have a project or two to work on for my day job today, one around mobile device management, and the other around a managed GitHub instance. Then a call at twelve to catch up with a political contact and deal with some lingering issues from my last campaign.

And did I mention I had to do all that while watching the kids?

I finished Fluent Python, last night. I’ll admit I ran through the last couple chapters on metaprogramming without reading too much of the code, but the book was very valuable, and I learned quite a lot from it. Ramalho has a lot of further reading references in the books various chapters, so I plan on going back and looking over the ones the says are “must read”, like the cookbooks from Dave Beasley. Unfortunately, I haven’t been doing any programming in Python lately, since I’ve been writing and working on WordPress mostly, , working with Docker and now trying to learn how manage Nginx reverse proxies. My hope is that once I finish this client site, I can go back and focus on a programming project like my GBTC estimator.

I’m still reading Digital Minimalism as well, and started reading the chapter on leisure. Newport points to the FIRE movement as an example of a community that’s renewed a focus on leisure. This leisure, as Newport defines it, is not the lounging around, watching Netflix, but is the more physically engaged kind, usually involving, vigorous outdoor activity.

I can’t wait for Missus to read this book. She’s deleted Facebook off of her phone a few days ago, and I couldn’t be more happy. Newport says that it’s important for people to have something to fill the void left when people cut the cord on these various technologies, else they may wind up feeling anxious or empty. I have obviously been doing that with writing. I’m still much more comfortable sitting with a keyboard in front of me when I have the choice, but I have been doing a better job maintaining myself. I still spend a lot of time cooking, and doing the yard. And I’m glad to see that Missus has taken after gardening with a bit of zest.

Still, we have two very different responses to free time, and it’s become a bit of a sticking point in the way we’re raising the kids. She’s much more lax about the amount of television that she lets them watch, where I would rather see them doing more active activities. Even playing video games engages the brain more than just watching television passively. As does reading a book, which we all enjoy. For what it’s worth, she would much rather go on vacation to the beach, and lounge with a book, where as I would rather go on a white water rafting trip. I may be trying to fit pegs into holes with this description, but I’ll see what she thinks after she has a chance to read it.

That said, keeping the kids busy is the most challenging part of my day, and biggest impediment to getting deep work done. Thankfully they’ve got their friends down the street to play with. I feel a bit busy that they spend so much time down there. Everytime I tell them to get some outside time, it’s the first thing that they want to do. We’ve been having them over a lot also, so I guess it’s fair.

Fourth of July is this Friday, so we’ve decided to make it a four day holiday and go back up to see my father in law at his house at a ski resort. Last time we were there the kids and I discovered a network of hiking trails in the woods behind the houses, running along a little stream. I’m really looking forward to getting back up there and exploring them with the girls. Our state is supposed to be going into Phase 3 for the reopening plan, so there may even be campgrounds or real hiking trails open. We’ll have to check.

Hopefully it won’t be too hot there in the mountains, under the forest canopy. It’s already started getting warm here in the afternoons. It was ninety degrees on Saturday for the party, but we had shade in the back from our trees for the kids slip and slide. We put our ten foot canopy up on the back deck, over our patio set, and made a little VIP are for the adults. We decided to leave it up, since it makes a nice addition and lets us stay out on the back deck when the sun’s overhead. I’m sitting out here now. It will be interesting to see if the pandemic slowdown has any noticeable effect on temperatures this summer. Hopefully August and September won’t be too bearable, otherwise we’ll be spending a lot more time up in the mountains.

Now that Missus has her work laptop, we’re basically free to work anywhere. And while that’s an attractive prospect, it also means redefining what we do for fun. I often use Costa Rica as my go-to when I’m talking about living FIRE or doing geoarbitrage. I don’t really have a deep-seated to desire to go there, I’ve just heard it mentioned as a popular place for American expats to go.

If we are to make a go of it, Missus and the kids and I will have to redefine what leisure means to us. Maybe this weekend will be a test of what things can be like if we are able to work while on the road. When the kids come and tell me that they’re bored, I say “good”, and leave them to find something to do, but that’s going to be a lot harder if we’re away from home and they don’t have their screens or their toys with them. It will be hard for the adults too, but that seems to be the way to a fulfilling life, away from the stress and anxiety of the world.

Not so lazy Sunday

No rest for the wicked.

So yesterday’s party was a hit, and we’ve been pretty productive for what should have been a lazy Sunday. Yesterday, I roasted a seven pound pork butt and made carnitas out of it, and also wound up making the birthday cake and frosting from scratch. Just call me “Daddy Crocker”. This morning everyone but the birthday girl slept in, and I’m writing this in the middle of the afternoon. I spent most of the day cleaning up the mess from yesterday, and making some changes to this website.

We’ve been getting lots of Google referral traffic for two posts, one for a WordPress hack, and another for an obscure Windows server error message that I wrote about. I’m getting enough of them that I figure I might test whether there’s any opportunity for clients, so I put a Boxzilla popup on the two pages containing a contact form. That was easy enough, but I ran into problems with my WordPress SMTP capabilities that required troubleshooting. I wound up switching to the Post SMTP plugin, since it’s free. So, any hits on the form should send me a notification SMS via my cell provider’s text message gateway.

Now, I wait.

I’ve got a lot to do today, so I’m going to wrap this up and continue working on my Substack, which I’m hoping to get out tomorrow. I’m also overdue on my WordPress project for my client, so hopefully I can manage to get both of those done before the day is over.

Mobile Device Management

two black smartphones

Small business deployments are still too cumbersome

Today is going to be a busy day. We’ve got a small party to attend to host, so I’ve got to do a bunch of household cleanup, roast a pork shoulder, bake a cake, and then host seven or ten children plus parents in the backyard. If that wasn’t enough, I’m behind on both my WordPress project and the Substack post for Monday, which is about bitcoin.

Work picked up a bit last week. I’m helping roll out Git best practices for a software development firm, which is the kind of challenge I’m looking for, and dealing with a failed mobile device management solution (MDM) that I rolled out several years ago and which has been summarily ignored since then. It’s not what I’d rather be doing.

Microsoft’s MDM, Intune, has evolved over the past few years, and like most Microsoft services, has gone through several iterations and is a maze of admin dashboards, documentation, and licensing products. It still seems vastly superior to the product that we’ve been using from IBM, called MaaS360. Still, figuring out the requirements for a small business client is a huge pain. We’ve been dealing mainly with Apple devices, which means managing all the end user accounts. Getting the devices enrolled requires managing a signed certificate from Apple (another account), and then deploying the device requires not only a configuration profile on the device, but additional apps on the device for it to work.

For our initial deployment MaaS360, requirements were pretty simple, the customer mainly wanted to lock down the browser on the phones for content filtering. It was an arduous process, even for a first-time deployment. Setting up the device profiles and testing took me several hours, then another associate of mine had to go through each device, setting up iTunes profiles for each user and downloading our management application. Then, after we deployed it, we discovered that GPS tracking wasn’t working. Permission needed to be granted individually on each device.

This initial deployment went unattended for almost two years. We got a request to pilot a new service app on one of the phones, and when I went back to check the tenant, all but two of the phones hadn’t checked in to the portal in over six months, more than half in over a year.

By some stroke of luck one of the two belonged to the individual who was selected to pilot the new service app, so I was able to proceed with the planning for that. I spent the rest of the morning trying to acquaint myself with Microsoft’s MDM offerings. Since most of our clients are on O365, it makes sense to take advantage of whatever is available through the platform. I was able to get a device policy setup under our partner account, but wasn’t able to get my personal iPhone to report into the console, even after several attempts connecting it to my O365 Exchange account.

Then, several hours later, after getting a Teams notification, I was prompted to install the device management profile, as well as two other apps, one for a “company portal”, and the Microsoft Authenticator app. Then, I was prompted for a managed Apple ID, and that’s where I stopped for the day.

I decided that if I was going to be forced to redeploy management to a dozen or so client devices, that I had best start communicating with the client, so I spoke to them. There had been numerous personnel changes in the past few months, and a lot of other processes were being re-evaluated, which meant that it was a good time to put some processes in place. First off, a freeze on any device purchases or equipment transfers without keeping me in the loop. (Outsource IT is usually an afterthought when it comes to hiring and firing.) Second, we were going to audit all existing devices, and make sure that we have a record of which devices we think we have, and who they belong to. That would give us some time to evaluate whether we can move management over to O365, or redeploy with the current solution.

I pulled some spreadsheets down from the management portal and dumped them into the client’s SharePoint site, then scheduled a Tuesday meeting with the pilot user for the new app.

Next week, I’ll have to do some investigation into Apple Business Manager, to see if it allows us to manage user IDs as well as the devices. We can barely depend on this firm’s employees to manage the one AD accounts, let alone another set of Apple IDs. It’s management hell. I’ll also have to draft some written policies for device and user onboarding and so forth. Eventually, I’d like to enroll the client firm in the carrier’s device provisioning program, to get them enrolled with minimal supervision. That will likely be a slog for this small firm.

On the brighter side of things, this may force me to develop some concrete MDM deployment best practices that will make me a superstar. I’m not aware of any Powershell tools that can be used to automate any of this process. Even turning on MDM within O365 requires clicking a box in the admin portal, and the Apple Certificate provisioning requires setting up accounts and downloading a file from one portal into another. Drafting an SOP for the entire process start to finish would be valuable.

That will have to wait till next week, because today, I have a party and very special birthday girl to attend to.

Finding Solitude

silhouette of man standing on seashore

Carving a space for thought

I’ve stopped counting the days since the COVID lockdown, we’re well in the third month. Yesterday the papers announced that our state was moving into phase 3, which should bring us back to some sort of normalcy. I’m not buying it. Homestead, Florida ran out of beds and that the US is back on a positive track, so it’s clear the rest of the country isn’t dealing with it well. I keep looking at our numbers daily like I’m analyzing the next price move for Bitcoin, and it looks to me like we’re in a consolidation phase before the next bull run.

Source: Bing Covid Tracker

I spent most of yesterday completely useless. Sleep deprivation hit hard in the afternoon, and I spent two hours on the couch reading blogs. By dinner I was snapping at the kids so I tried to lay down with Elder when she went to bed but it just wound up giving me more energy, so I spent an hour on the back porch meditating. It was the longest session I had done in a long time.

My backyard is fairly quiet, we live near the end of a cul-de-sac, near the water. We’ve got a patio and a hot tub out the back door, and maybe a third of an acre in the yard, big enough for two large maples, a shed and playhouse for the kids. There a freshwater drainage ditch with a no man’s land about thirty or fourty feet deep, sort of a mini-forest if you will, and beyond that are some condos in the neighboring subdivision. It’s not completely isolated, but enough so.

We’ve got a variety of animals that wander through from time to time. I’ve seen entire families of deer wander through, and often find signs of them around the yard. Rabbits are prevalent as well, and we’ve found turtles wandering about. There’s also the occasional fox alert on Next Door. Earlier this week I watched a squirrel cut down small twigs off one of our maple trees to build a nest at the base of the branch attachment.

And the birds. There are so many birds, I don’t even know how to describe them. I’ve heard woodpeckers out there, and all kinds of calls that I don’t even have the capacity to describe. A lot of the trees along the no man’s land are probably over a hundred years old, and tower into the sky, and I often see hawks or falcons soaring above them or perching atop them. There’s all sorts of other finches and smaller birds that flit around the yard, last year we had a blue jay visit us, and this year we’ve got a cardinal nest in the juniper bush between the deck and our bay window. If I balance atop the deck railing, with one hand on the house, I can see the chicks.

And there I was yesterday, too wired to sleep but to tired to do anything else, sitting cross-legged on a cushion while the sun went down, watching the birds and fireflies bustle about in the yard, alone. Call Newport talks a lot about solitude in Digital Minimalism, and he uses an interesting definition of it, basically the state when one’s mind is isolated from the influence of others. And he doesn’t just mean people around you or in your social media feeds, but also books and magazines. This is something I hadn’t considered before. He notes that while at Walden Pond, Thoreau wasn’t far off in some wilderness, but just a couple minutes away from town, far enough where he could be undisturbed by people most of the time, alone with his thoughts. He talks about Lincoln at the Soldiers’ Home, away from the bustle of the White House, where he could think in solitude. And Kierkegaard had a penchant for walking, hours every day, which allowed him the time to come up with his works.

I’m normally the type of person that doesn’t stop reading, and yesterday was no exception, I spent most of my miserable afternoon alternating between trying to nap and reading blogs. I had had too much caffeine for the former, and not enough to do anything more productive than cook dinner. After putting the girls to bed, I decided that a bit of solitude would do me good, so I gave myself an hour to sit and think, to let the ideas wander in. In the past I’ve had a bit of general anxiety about forgetting a good idea. I’ve tried keeping a notebook handy in the past, and fought the urge to dictate notes to Siri in the past. I’ve since come to realize that the good ones will come back, or can be retrieved after I’m done sitting, especially if I let them play out in my head instead of trying to dismiss them to focus on breathing or what’s going on around me.

After I was done I walked inside, and Missus was coming down at the same time, phone in hand. She immediately told me about how worked up she was about the latest drama, both at work, and with her family airing dirty laundry in public. I listened, but didn’t want to be drawn into it. I didn’t want to be pulled away from the place I had just spent the last hour getting my mind into. I wasn’t done. So I went upstairs, opened up the voice memo on my phone, and spent ten minutes dumping my brain out of my mouth, then read and went to sleep.

I slept like a baby.

Removing all the social media off my phone has been working out real well. Part of me misses staying hyper-informed on Twitter, but taking a break has made me realize that it’s not really what I need to accomplish my goals. It’ll be interesting to see what my metrics look like after a month, I sign on now and the notifications are just useless someone you follow like this types. It’s like the algorithms have detected that I’m becoming less engaged, and they’re crying out, look at this! Look at this! I dumped LinkedIn off my phone as well after getting too many notifications.

I know that my writing volume has increased notably. And my reading has picked up as well, but I don’t have a real way to quantify it. And whether I’m closer to achieving my goals remains to be seen, but that somehow seems secondary to making sure I carve that space out for myself.

Private, internal blog for the family

girl wearing grey long-sleeved shirt using MacBook Pro on brown wooden table

Maintaining privacy for your kids by running a private WordPress instance in your home network

Well, I may have finally lost my mind. I quit Facebook over a year ago, but one of the things that I do miss is the throwback posts that they pop up on your feed with pictures and posts from one or five years ago. It’s great for those “oh look how little Elder is in that picture!” kinds of moments. I don’t feel comfortable sharing pictures of my kids on my normie feed anymore, but I still want to do more than just have a folder sitting on my computer somewhere that gets looked at once in a blue moon. Plus, Elder is getting more involved with using the computer, and I wanted to give her a chance to express her creativity without the risk of letting her have a YouTube account. So I did the only thing any sensible tech dad would do. I set up an internal WordPress site for the family to use.

Setting up internal domain

I’m pretty proficient with Windows domain controllers, and manage a lot of contoso.local domains that aren’t externally routable. I decided that I wanted to do this, so that the site could be accessed only from our local network. That way we could easily access it from any of our personal devices, and can potentially allow friends and family to look at it when they visit and join our network.

Bind is the go-to DNS server for Ubuntu, so I started by installing and configuring it. However I quickly got lost in a maze of .conf files and StackExchange posts trying to get it to work, so I dumped it and installed dnsmasq instead. Dnsmasq relies on simple host files instead of the more complicated zone files that bind uses, which is more than enough for what I need at the house.

I setup my /etc/dnsmasq.conf file as follows using this guide:

# Don't forward plain names or non-routed addresses
domain-needed
bogus-priv

# Use OpenDNS, not ISP's DNS router
server=208.67.222.222
server=208.67.220.220

# Replace second IP with your local interface
listen-address=127.0.0.1,192.168.1.123

expand-hosts
domain=dahifi.internal

Then I setup my /etc/hosts file with the records I need, pointing to the downstairs server and my development workstation.

27.0.0.1       localhost.localdomain   localhost
::1             localhost6.localdomain6 localhost6

192.168.1.123   dahifi.internal
192.168.1.123   homeboy.dahifi.internal   homeboy
192.168.1.102   oberyn.dahifi.internal    oberyn
192.168.1.123   elder.dahifi.internal   berkley

After saving changes, I need to restart dnsmasq: systemctl restart dnsmasq. From there I was able to validate the configuration on the server and external machines using nslookup. Once I was comfortable that things were working, I added my internal server’s IP to my router’s DHCP DNS scope and refreshing the client leases on a couple devices to make sure they would work.

Note about .local domains

I’ve never had issues with domains ending in .local among my Windows business networks, but Ubuntu may have a multicast DNS service called Avahi running, which hijacks anything FQDN ending in .local. Interestingly this service was missing off of the actual Ubuntu server install, which interfered with my troubleshooting. The simplest thing to do to get us up and running was just to change our internal domain from dahifi.local to dahifi.internal. Any other non-routable TLD should work as well.

Additionally, Ubuntu ships with resolved, a network name manager service. It runs a caching service at 127.0.0.53, and interfered with my troubleshooting as well. My internal domain kept getting routed to my ISP’s search page, until I ran sudo service systemd-resolved restart to clear the cache.

Multisite Docker setup using Nginx Proxy

The SSD Nodes site has a nice write up of how to run multiple websites with Docker and Nginx that I was able to use to get our WordPress site up and running. I prefer putting everything in a docker-compose file. The only prerequisite is creating the network:

docker network create nginx-proxy

docker-compose.yml:

version: "3"
services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
      - "80:80"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro

networks:
  default:
    external:
      name: nginx-proxy

And a second file, blog-compose.yml for the blog itself:

version: "3"

services:
   db_node_blog:
     image: mysql:5.7
     command: --default-authentication-plugin=mysql_native_password
     volumes:
       - ./blog_db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: root_password
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress_user
       MYSQL_PASSWORD: wordpress_user
     container_name: blog_wp_db

   wordpress:
     depends_on:
       - db_node_blog
     image: wordpress:latest
     volumes:
       - ./blog_wp_data:/var/www/html
     expose:
       - 80
     restart: always
     environment:
       VIRTUAL_HOST: dahifi.internal
       WORDPRESS_DB_HOST: db_node_blog:3306
       WORDPRESS_DB_USER: wordpress_user
       WORDPRESS_DB_PASSWORD: wp_password
     container_name: blog_wp
volumes:
    blog_db_data:
    blog_wp_data:


networks:
  default:
    external:
      name: nginx-proxy

You’ll notice that the site that the blog is published to is identified by the VIRTUAL_HOST environment variable. In this case we’re still pointing to the “top level” domain, dahifi.internal, and not blog.dahifi.internal. This is due to issues we were having with subdomain resolution on the Nginx proxy, and is something we’ll have to work on later. Originally, we had our internal GitLab instance running on this host at port 80, and had to take it down for Nginx to work. My next step is to make sure that subhosts work properly, and then reconfigure GitLab and this blog to run under something like git.dahifi.internal.

Image uploads

One additional change that I needed to make was to change the default file size limit of 2M. Following along with this setup tutorial, I added - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini line to the WordPress container, then added the following to the uploads.ini file:

memory_limit = 64M
upload_max_filesize = 64M
post_max_size = 64M

Then I rebuilt the container with docker-compose down and up, making sure to specify my blog-compose.yml file.

I still encountered errors trying to upload. WordPress kept throwing

Unexpected response from the server. The file may have been uploaded successfully. Check in the Media Library or reload the page.

I couldn’t find any errors in WordPress’s Apache instance, and PHP looked fine. I eventually found a message in the Nginx container log: client intended to send too large body. It seems that Nginx has it’s own limits. I added client_max_body_size 64M this directly in the /etc/nginx/nginx.conf file, then reloaded it with service nginx reload. Problem solved! Not only can I upload files directly through the web interface, but I was also able to add the internal site to the WordPress app running on my phone, and can upload images directly from my phone.

Elder is already working on writing a story in it now, and I’m looking forward to using this site as an internal bulletin board for the family. Let’s see what happens!

Thinking in public

greyscale photography of skeleton

Down the Venkatesh Rao rabbit hole

Venkatesh Rao popped up in my Twitter feed recently, and I’ve been digging through his work, most notably Ribbonfarm, but also Breaking Smart and The Art of the Gig. I just finished his magnum opus The Gervais Principle, which is interesting in an of itself, and I found his reading list and take on gig work fascinating in itself.

The Gervais Principle is a complete philosophical structure that Rao picked up while watching The Office, it basically deconstructs why the show works so well, and the reason why it’s so cringe-worthy. Now I haven’t watched The Office in many years, and summarizing Rao’s thirty thousand word treatise here is ultimately going to miss a lot of the subtleties, but I’ll try anyways. I wrote briefly about it a few days ago.

Company hierarchy

Society is made up of three classes of people, Losers, the Clueless, and Sociopaths. The losers, (in the economic sense) are people who are basically resigned to make up the mass of people within an organization, and make up your typical working class Jane or Joe. Within this group you have slackers, who are aware of their place and see no need to put in any extra effort, and the unaware loser, who is usually gung-ho about doing a good job. This second type of loser is sometimes promoted to Clueless, as they are needed as a buffer zone between the losers and the sociopaths, who are the Gordon Gecko types within the organization who are focused primarily on extracting as much wealth from the company and getting the hell out. The Clueless, in Rao’s words, serve as control rods between the tops and the bottom of the pyramids, and prevent the whole thing from blowing up.

Rao goes into great detail about how this plays out, ascribing different types of language that the various groups use among themselves: powertalk for the Sociopath to Sociopaths, posturetalk for the Clueless to the everyone, and babytalk for everyone to the Clueless. There’s a few others, and Rao provides some convincing examples of each. Furthermore, he cites about two dozen business management books as his references. Rao is a prolific writer, it seems, and one could easily get lost for weeks trying to read all these sources. Rao himself spent over five years writing The Gervais Principle. Good luck.

I’ll note that I tried to explain this theory to Missus, who works in mental health, and she accused me of trying to mansplain sociopathy to her. I told her Rao’s definition is a homonym of the term, and not a redefinition of the DSM manual. I’m not quite sure she’s going to go for it the way I did. Part of the reason I find it so amazing is that it gives me a new way to frame social and political interactions, and once you see it, it’s impossible to unsee. I’m not going to completely psychoanalyze my life here and now, but it’s easy for me to see how much of my life’s inner misery has been caused by conflict between my tendencies along these lines, mainly my status as overachieving Loser with Sociopathic aspirations, even though I mostly wind up Clueless.


I don’t want to spend too much time here going more into The Gervais Principle, it would really require a reread, and quite possibly a rewatch of the entire run of The Office to discuss further, and Rao has so much more content that is worth exploring. I like the fact that the Ribbonfarm has a guide for new readers, but I’ve only had a cursory look at the rest of the content. (Blockchain Man is definitely up next on my list.) Breaking Smart looks promising as well, focusing on the the theme of software eating the world. And The Art of Gig, which focuses on freelancing, is really what I need in my life right now.

The latest post, Model Questions vs. Actor Questions, is useful because it forced me to re-evaluate the type of work I want to be doing as a technologist. Do I want to be a model, or someone who is interchangeable and doesn’t stand out, or an actor, someone who is known and differentiated among their peers? The latter, obviously. This requires a reframing of the type of questions I need to ask myself about what type of clients I take on and how I promote myself. It is definitely going to force me to re-evaluate my goals. Rao defines modeling, in the context of freelancing, as “consolation prizes for jobs,” which makes perfect sense.

The next post on The Art of Gig, Sparring as Tenure, has some interesting ideas around thinking vs. doing. When one starts out in a field, they’re mostly doing, and over time one should be able to reduce the amount of doing they get paid to do as income shifts to thinking (read: consulting or advising) work instead. I am clearly failing in this endeavor. In my day job, I’ve managed to offload a lot of the end user facing tasks, but because the size of Zombie, LLC has basically collapsed with me as the center of technical operations and service delivery, I’m stuck doing most of the grunt work.

On the other hand, I have been successful in reducing my time spent working to the bare minimum, that I might focus on other projects during my day to day. I basically consider myself a retained employee at this point, on call during certain times of the day and with a certain baseline of responsibility that I’m expected to uphold. Compare to my other friends in the industry, this baseline is very low. My goal at this point is basically to be able to go offline one or two days out of the week, to be able to focus on deep work projects outside of my day job. These will be the core of my new consulting efforts.

Part of my difficulty lies in the fact that I’m trying to go independent in a field separate from that which I’ve been doing for the past twenty years, basically, going from end user support to business network systems engineering to software development. I don’t have the prior performance needed to demonstrate my competence. It’s what’s holding me back from applying to many of the software engineering roles that I’m finding. Instead, I’m going to have to continue doing for now, building up a new portfolio of work, social proof if you will, that will allow me to pick up new work and build my consultancy. Eventually, I will be able to provide value by presenting ideas, and have the implementations left to others. That’s an exaggeration, of course, since I’ll hopefully never stop doing the work that I love to do.

The theme around what I’m doing now is changing, of course. I’m no longer content to just take on whatever support projects are out there, forced to take on whatever clientele I can take. I’d like to be afforded the opportunity to be more choosy with the projects that I take on, that are more interesting and challenging that the type of work that I disdain today, like troubleshooting people’s workstation issues. For now, it pays the bills.

In the long term, even the thinking type of sparring work that Rao and his guest contributor describe will hopefully give way to self directed work, income generating activities like publishing ebooks, or things like Substack subscriptions. If the below graph is accurate, I should consider myself successful if I’m able to reach this point by the time I’m fifty. We’ll see if I can hack it.

Source: Sparring As Tenure – The Art of Gig

Lastly, I wanted to mention Ryan Robinson, who I was introduced to via this sensational Medium post, How This 30-Year-Old Made $451,238 Blogging in 2019. I haven’t delved into Ryan’s blog yet, but I wanted to mention it since he seems to share a property with Venkatesh Rao, namely, ultra longform content. Ben Thompson’s Stratechery should be included here as well. This seems to be a common characteristic that I’ll need to emulate if I’m to have any hope of making a living out of my writing. Of course, I may have to consider affiliate deals as well, and should probably mentally prep for the fact that I’ll need to keep writing for several years before things start taking off. Next month will mark one year since I’ve been treating this blog as a job.

We’ll see how things go from here. There are many things I’ve got to figure out from here. I don’t think I’m going to be able to maintain pseudonymity much longer, I’ll have to make a decision to unmask myself and stop writing publicly about the people in my life, or just stop reposting content across identities and platforms. I have a feeling that the daily content will have to change. I made a decision to focus the Substack on longer (two thousand word) posts, which is too much for me to maintain here with the random topic of the day, so I need to figure out what it’s going to be.

For now I’ll just keep reading from others who have had success with it, and emulate them as much as possible. And in the meantime, keep on writing.

The future of work

white and black digital wallpaper

Tech trends aren’t favorable for small businesses that don’t pivot quickly

We’re now in the third month of The Great Lockdown, and for most of us it’s now the new normal. Households and businesses have made adjustments to deal with the restrictions and new procedures needed to keep people safe from the spread of COVID. Many tech firms have officially pivoted to remote first operations for staff, and many others are doing so unofficially. Perhaps the only question remaining at this point is how far things will return to the old ways. My guess, not so much.

I’ve been working from home for several years now, and have some insights into where things are headed, at least in the context of knowledge work. My day job involves supporting a number of small business, some of which operate with their staff completely distributed, so my experience is mostly in the medical and professional services industries. Leave aside traditional brick and mortar businesses that rely on foot traffic, like restaurants and lifestyle businesses for the moment. And I am of course writing while holded up in my cozy house with my family, under no pressure to leave for work and deal with the public. I have friends, neighbors and clients who are working the front lines in healthcare, and I have deep gratitude for them and for those others “frontline heroes”, keeping the grocery and retail supply chains moving for the rest of us.

Amazon and other digital platforms have been eating away at the real world for many years, and COVID has accelerated the transition dramatically. To steal a phrase from Tobe Lutke, CEO of Shopify, “2030 came a decade early”. People around the world have been forced to undertake massive changes in reaction to the pandemic, and we’re so far into it now that it’s hard to believe that that things were ever different. Future Shock has been barrelling at us for decades now, with the advent of personal computers, the internet, smartphones and wireless internet impacting generation after generation. It seems that the Singularity is nearly upon us. The last three and a half years of the Trump administration have seemed like a decade in themselves. All of that pales in comparison to the changes that we as a society have had to undergo these last three months.

To understand where we’re going, we must go look back for a moment and review the changes in economic and labor practices that have occured since the end of World War II. Since then we’ve transitioned from long-term, single company employment that traditionally ended with a gold watch and a pension, and have replaced it instead with a short-term, shareholder focused, gig economy. Productivity and investor profits have steadily increased for the past thirty years while real wages have remained stagnant. And it’s doubtful that we’ll see any progress on this issue, regardless of who holds the White House at the end of January next year.

Immense social pressure by large swaths of society, as we are currently seeing with the Black Lives Matter protests around the world, can be effective at spurring political action at the National level, but I remain skeptical that we will see much movement with regard to the economic sphere in the next twelve to eighteen months. It depends on whether we can continue to successfully deal with the pandemic. I am not an optimist on this point. I will note though how relatively quickly universal basic income went from being a humorous component of Andrew Yang’s presidential platform to a serious contender for COVID-related economic woes. For now, we’ll have to settle for our twelve hundred dollar stimulus checks.

If one is to use the stock market as a bellwether, it would appear that the economy has already rebounded from the huge hit it took in the weeks following the lockdown. The lack of any meaningful relationship between stocks and reality should be apparent to most. Recent gains have either been driven by the continuing extraction of value from small and local businesses by Amazon and other ecommerce platforms, or from the harvesting of attention and personal data by Facebook, Twitter, Google and others. And now, the Fed has turned on the spigots through what they call “unlimited quantitative easing”, releasing over six trillion dollars to banks, where most of it has gone into the hands of those who need it least. This has caused no lack of excitement among the Bitcoin community, who have taken the “money printer goes BRRR” meme to the next level as they build the narrative of bitcoin as a way to both defund the state, short (as in stocks) governments, and opt out of the traditional central bank based fiat system. I count myself among them, but I’ll save that for a future installment.

Source: VisualCapitalist

That said, data from LinkedIn does show that hiring is up for tech workers. Platform firms that enable developers and entrepreneurs to build on top of their systems are on somewhat of a spree lately. Twilio, a text messaging provider, Stripe and Square, two internet payment firms, as well as GitLab and GitHub, built around a popular software development tool, are all rapidly scaling up to meet demand. And there seem to be no shortage for software developer or engineering jobs that I see, especially for those in government-adjacent industries or those with heavy math and science qualifications, like artificial intelligence and data analysis.

It also appears that most of the healthcare industry, especially the mental health profession, will be safe from any negative economic impacts of COVID. There was previously no shortage of people needing treatment for depression or post traumatic stress disorder, numbers that are rising as people deal with the stress of the pandemic. Indeed, there are number of platform companies that have been offering telemedicine related services for therapy and non-emergency services. That seem to be on the uptake. I myself am currently involved with one.


Let’s turn our focus to the technical side of our new normal.

Perhaps the biggest early winner among the remote-work enabled companies was Zoom, which became synonymous with video conferencing in the weeks following lockdown. Then there was the inevitable backlash, following both privacy and security concerns around Zoom’s default settings and misleading encryption claims. Amazon has been a big winner, both because of quarantine-induced shopping as well as cloud driven usage on AWS. Google Cloud Services Microsoft’s Azure are no doubt doing well also, and there are indications that Apple may be trying to enter the space also.

Microsoft has been in a bit of a battle recently as well, after the CEO of Slack, a remote workspace collaboration service, announced that Microsoft was obsessed with “killing us”, and announced an integration partnership with Amazon AWS. I’ve been using both Teams and Slack for some time now, in different roles, and I don’t think either is in any immediate danger. I’ve got theories about what type of companies choose one or the other, Slack for more tech-focused firms, especially development houses, and Teams for those that already rely on other Microsoft services such as Exchange Online or Sharepoint. I don’t have any hard evidence on that yet, and it may be that a lot of people, like me, will continue to use both for various teams.

My day to day responsibilities involve managing Microsoft Office 365 cloud services for clients. We’ve been pushing them off of older SMTP/IMAP services to Exchange Online for several years now, since it’s just plain better. What amazes me though is that most of our clients have no idea of the myriad other services that come bundled with O365 these days. In fact, I have a hard time keeping up myself. Besides Exchange, Teams and SharePoint are probably the most prominent, and the ones that we push the most, but there are a number of other useful apps bundled with O365, like Forms, Flow and Planner. The problem with O365 is that there are so many product offerings within them that it’s impossible to keep up unless you dedicate a lot of time and resources to them. The issue is multiplied with Azure and AWS, each of which has dozens of services.

I’ve spent the last dozen years of my career building and managing business networks, server and supporting end end users and their equipment, what’s known as managed services in the industry. I realized several years ago as the app economy took over, that these types of services would soon become a commodity, and that competition, especially low barriers to entry, would soon drive prices in a race to the bottom. I think I’m being proven right on that point, but what I didn’t really anticipate was that it was not just managed services providers that are being hit by this, but essentially all industries and verticals.

The overwhelming drive today among business is the tendency toward fewer and fewer employees. Tech tools are increasing employee productivity, apps and automation are compounding their efforts. Some jobs are more resistant to this than others, but the number of administrative staff needed to manage a large organization is rapidly diminishing. As I noted last April:

Blockbuster, at its height in 2004, employed 84,300 workers with a a $5 billion market cap. Today Netflix is valued at $162 billion value with only 5,400 employees. Instagram had just 13 employees when it was acquired by Facebook for a $500 million valuation in 2013.

I wrote about businesses as operating systems last month, so I’ll not repeat myself wholesale save to say that successful businesses in the next year or two are going to be the ones that figure out how to utilize these digital tools to allow them to scale. Even currently sustainable businesses with no interest in growth are going to be forced to deploy them, as the pressure to become more lean will build up from competitors that are. My focus remains on exploring how to deploy these tools in a way that helps my clients streamline their operations. My working hypothesis right now is that businesses that do will survive and thrive and those that don’t will languish and die.

We’ve seen how quickly the world can change. There’s no going back.

Bitcoin and beer

shallow focus photo of brown glass bottle

There are still people who have never heard of cryptocurrency.

Another Monday, another block on the life calendar crossed off. Father’s day was good, my dad came over and we got to talk to my brother overseas for a bit. I whooped my old man’s butt at chess, and even got Missus to play a game of Dune with me. Watched some Snowpiercer and drank too much beer.

We met the new neighbors, briefly, and I helped my old one remove a child’s swing set from his back yard as the sun went down. I wound up dumping my whole two hundred piece tool set in yard. I have no idea whether I fished all the sockets out of the deep grass; it was getting too dark.

After we were done hauling the swings to the road, we sat drinking beer and shooting the breeze. The subject turned to real estate and work, and I was talking about bitcoin for several minutes when he asked “did you say bitcoin?” He’d never heard of it before. I was kind of shocked, but enjoyed the opportunity to try and explain it to someone who had never heard of it before. I promised to follow up with some resources about it, and said goodbye.

It is truly amazing to me that there are people out there who have literally never heard of bitcoin. Not that don’t understand bitcoin, but haven’t heard of it at all. It just really shows how early we are in this industry, and how much work we have to do on the adoption side. My neighbor was aware of what has been going on with the Fed, and understood the concept of stock-to-flow, but I wound up going back to discussing double spend problem and was on my way to explaining proof of work before things got too late. It wasn’t really the best pitch, so to speak.

I’ve obviously got a target for a new blog post. I wrote an intro to cryptocurrencies about two years ago, but it’s in dire need of updating. I guess I know what the subject of next week’s substack will be.

I’ve got a lot of work to do today. The Substack is scheduled to go out by the time I hit post on this, then I’ve just got to publish the version I put together on my LinkedIn page. It’s all about the page views, baby.

And something really interesting was in the paper yesterday.

Futurists/technologists. If you’re looking for “a wide-open niche in almost every industry,” this might be the option for you, Michelic says.

“The world is changing at such a fast pace that we need people who specialize in gaining knowledge from multiple domains, consolidating and distilling that knowledge, and communicating it to the proper audience that can put the information to its highest and best use,” he says. “These positions look at technological and data trends across multiple industries and connect them to other industries. They are communicators for the future of work, distribution, manufacturing, travel and commerce.”

Source: Bright spots in pandemic job market.

Looks like I found my niche.

Father’s Day

It’s just after six in the morning, I am the only one up. I went to bed on time, and finally got out of bed after waking up at two thirty and four thirty. It’s going to be a beautiful day out today, with some rain, and I’m looking forward to relaxing.

I didn’t work on my Substack article last night, instead deciding to take it easy. Played some video games, spent some time on the piano, and continued reading The Gervais Principle. Amazing stuff.

During meditation, I had the idea of moving these morning pages, journal posts off of this site and putting them on a local-hosted WordPress that’s only accessible inside the house. I could set it up so that the girls could post their videos, and I could type freely without having to mask everyone’s names. Can a seven-year old use WordPress, or would I need to make something simpler, that would be as easy as posting to Facebook or Insta? Will table for now and let the idea simmer.

There are two gifts that have been sitting in the downstairs hall closet for well over a month. One of them is quite large and heavy, and I cannot wait to see what it is. I still have my birthday gift from my brother, a copy of the newly reissued board game Dune, sitting on the dining room table, where I await a challenger. I think it might be too complicated for Elder, and Missus has no interest in playing it, but maybe the two of them together would be ok. I might be able to recruit one of the dad’s down the street since he likes games like Risk, but I don’t know how the logistics of that would work out. Maybe if we played outside it would be OK. I still don’t want anyone outside the immediate family inside the house.

I’m debating whether to good a big dinner this morning. I haven’t talked to my dad about doing anything, and don’t really feel like spending two hours trying to use my new outdoor griddle again. Missus never cooks breakfast. Maybe I’ll just make a quiche or something instead, just fry up some bacon and potatoes and dump some eggs over it. Sounds delicious.

I’m going to wrap this up and take a crack at the Substack. I really want to finish it and get it released tomorrow, or I’ll have to reevaluate my goals with it. We had a few unsubscribes after my first official blast, but nothing serious. I’ll need to figure out way to build it up. Right now LinkedIn seems like the only way, since I’m not getting out, and my normie Twitter account isn’t getting much action.

Speaking of which, I don’t think I went on Twitter once yesterday. I didn’t feel like these ‘morning pages’ types of posts warranted a post, since it’s just me talking to myself and I’m not really offering anything useful to anyone. I’ll have to work on that. Part of the problem is that the effort needed to publish these daily ramblings is a bit much for what I’m writing: find an image, write the SEO, validate the Twitter card, then post it. On top of that, I’ve been rewarding myself afterwards by scrolling my timeline. The WP to Twitter plugin I had been using broke some time ago. Anyways, I think it’s better for me to stay off Twitter completely, until I finish the Substack.

It’s just after six thirty. I might get an hour of writing in before the girls wake up. Time to go.