Note 24: Workin' for a livin'

And big honking stars!

Apologies for the delayed Note this week. It’s been a busy week working, but it’s been towards a good cause. On to the Note…

After the last couple of weeks’ stock drama, the past week has been pretty quiet and I’ve been keeping my head down working on client projects (more on this below). The weather in Chicago’s become absurdly cold (first time in a few years), and my walks home largely consist of me marveling at the increasingly large piles of snow that will be sticking around through March.

A post shared by Chris Karr (@audaciouscode)

On the home front, the bathroom renovation is largely complete (a few cosmetic items remain) and I’ve been enjoying the use of my refreshed mini-bar that sits behind my home office as well. Earlier this week, I even dusted off my VR rig and did some space tourism to Betelgeuse as I worked my way back from the galactic rim back into the Bubble of human habitation in the inner Orion spur.

I’ve also started tuning back into politics with a goal of determining who’s worth supporting in the next go-around. The last few cycles, I’ve been firmly anti-Trump and supported sane congressional and presidential candidates with a goal of either getting the guy out of office or blunting any potential impact he would have had in a second term. This meant that I was largely supporting moderate Democrats in swing districts.

With that goal of booting Trump out of office achieved, I’ve been unsubscribing from all the Democratic Party mailing lists I found myself on (with the bulk of them being because M.J. Hegar sold the special e-mail address I made just for her campaign to everyone else), and I’ve been focusing my next round of support on Republican candidates fighting the good fight to finish the Trump Purge and get the GOP back to a place where it’s fighting for limited government and fiscal sanity, instead of being a personality cult for a washed-up former social media influencer.

So far, two have made the list. First, Ben “Nebraskans are not rage addicts, and that’s good!” Sasse:

I’m also tuning into Illinois’ own Adam Kinzinger:

Now, let’s have clear eyes and remember that both of these men are cynical politicians. Ben Sasse failed to vote to convict Trump during the first impeachment, and Kinzinger was too willing to cover for Trump as late as a year ago. That said, their reward functions are pointed in the same direction as mine, and I’m willing to reinforce good behavior in our Congress Critters in those cases. And the seven Republicans who voted to convict Trump this weekend are at the top of my list of critters to watch.

What I do for a living

I was talking to a friend online last week and he was asking what I do as part of my job, and I realized that I didn’t have an updated “this is what I do” answer prepared. In the interest of future Notes (and other conversations with folks who might want to hire me), here’s my latest stab at it:

I’m the Founder and Chief Developer (a made-up title that I granted myself) at Audacious Software, a Chicago software development company. The firm employs one full-time member (me) and one or two of part-time folks occasionally. I originally founded the company when I left my Ph.D. program at Northwestern University’s Media, Science, and Technology program a decade ago, and due to my own academic connections, my client base is overwhelmingly research institutions, with more medical research groups than not. I also do work for start-ups and small companies from time to time, but it’s the research work that keeps me busy.

In terms of business focus, my company serves two primary niches: passive data collection through smartphones and other devices, and SMS text messaging systems for interacting with patients, administering surveys and ecological momentary assessments (EMAs), and other research-oriented dialog-based experiences. Both of these niches grew out of research I started in graduate school, and my connection to the research community has led to a snowball effect when it comes to new project work. I’ve never advertised once - all of my job prospects either come from word-of-mouth or through someone noticing my name on research papers describing past projects.

On the passive data collection front, I work in the iOS, Android, and web-based platforms using a home-grown framework called Passive Data Kit that provides both the necessary client libraries - these are the small bits of code that live within apps on the mobile devices - as well as the server infrastructure for capturing and storing the data coming in from the field. Typically this data is collected throughout the day, and I’m constantly fighting an arms race with Apple and now Google to gather the requested data for my research clients as the platforms themselves resist that in the name of privacy and battery life. If it helps to think about it, I basically write sophisticated, ethical spyware.

Most of the work I do is under the governance of an Institutional Review Board, and I take very seriously my ethical obligations to craft systems that both satisfy their research objectives, while remaining true to principles such as the Hippocratic oath (“first, do no harm”) and providing true informed consent (participants know exactly what we’re collecting and why). Since I work with research institutions, the bulk of my work is ultimately grant funded, and 99% of the systems I build are composed of open-source components, so to avoid any unnecessary software licensing entanglements for my clients.

On the SMS side of the fence, I put together several new interactive text-based systems for a variety of clients. This builds on the original time-diary study system that I built for Eszter Hargittai almost 15 years ago, and I’ve been building SMS-based systems pretty much constantly for a decade. Most of this work comes as referrals from the work I do for Adrian Aguilera at the University of California Berkeley and his MoodText / HealthySMS project. While Aguilera and Berkeley retain ownership of the HealthySMS platform, I have my own library of smaller components to assemble independent SMS systems when HealthySMS is not the right fit for the job.

Since my work is primarily with research institutions on research projects, novelty is a key theme in that most of my projects involve designing, implementing, and supporting systems that do something new. Consequently, there’s a higher degree of implementation risk in the work that I do, since it’s usually something that someone else hasn’t done before, or something that hasn’t been done at a particular scale or cost. This makes the work exciting - literally building new things every day - and it also makes the work maddening. How do you estimate how long it will take to build something that doesn’t exist, with all the surprises and adaptations that will be needed along the way?

In order to maintain some sanity, I strategically retain ownership of key infrastructural components that I use to build client projects. Almost without exception, I release these projects under commercial-friendly open-source licenses, which frees clients to commercially exploit what I build, while allowing me to keep the pieces that I need so I’m not reinventing the wheel each time. This promotes a technological cross-pollination between projects, and the rising tide of one client often lifts the boats of others. This provides me a competitive advantage as I can maximize the feature/performance to cost ratio in ways that other consultancies who operate in more constrained siloed manners cannot.

Presently, there are two main pieces of infrastructure that I’m focused on as core elements of the business:

The first is Passive Data Kit (PDK), which I use to build ethical smartphone apps that gather data from the field to do something useful or clinical. This is the latest version of a line of context-aware systems that I’ve been building since 2006, and it’s grown in some very interesting ways. For example in one project, we use PDK to gather ongoing location traces from participants, and use those traces to dynamically construct evening questionnaires that prompt users to tell us more about where they spent significant time (as determined by running the location history through the DBSCAN algorithm and asking about the top-N most significant clusters).

In addition to ongoing reliability and performance optimizations, the current development focus for PDK is building out enough supporting infrastructure so that becomes possible to communicate human-understandable reports of the data that’s been gathered. For my research clients, I’m also working on building out the infrastructure that also makes the system largely self-documenting, not a small task for a system that collects a wide variety of data types across many studies.

The second component that’s been a focus for the company is a standalone dialog engine that can be used to drive more responsive and interactive experiences in the messaging space. I’m in the middle of deploying this across a range of projects, and the adoption of a state-machine mechanism is replacing quite a bit of difficult and finicky glue code in favor of documents that can also be edited and deployed by non-technical clients. In the right contexts, we can skip the process of app-building altogether and gather non-trivial data from the field through text-based dialogs.

While I enjoy the technical side of my job, I’ve been working on getting better at the operational “business” side of things. I’ve been fortunate in that I receive plenty of interest for my services and I don’t have to fidget with too much marketing, but I need to get better at some of the more “paperwork” processes, including estimation, scheduling, taxes, and invoicing. One of the additional key areas that I’ve also been banging my head against is the human side of things. Because I work on so many health-related projects, I’m not in a position where I can subcontract out that work to other parties, so that means that I need employees instead of freelancers. And the challenge here is that the kind of employees I need are probably making much better money than me, at an established company.

While this isn’t the easiest way to make a living, I don’t have any plans to stop. While I founded Audacious Software in 2009, there were two periods where the core company was put on pause, and I went to work directly for other people. The first stint was as a Chief Technology Officer at an energy start-up called Power2Switch, and the second stint was about four years working full-time for one of my former clients before lapsing back into freelancing again. I don’t have anything bad to say about the experiences other than that they were not for me, and this led me to formulating my own personal Law of Conservation of Bullshit:

In any job one takes on, the amount of bullshit that one has to deal with remains roughly constant. What varies is the nature of the specific bullshit one deals with and how compatible that specific bullshit is with one’s own tolerances and personality.

In all of the jobs that I’ve held where I was not self-employed, I inevitably hit a wall where what I thought the organization should be doing diverged with the vision of the management, and once that crack formed, it was exceptionally difficult to keep it from festering and turning me into a bitter and unreasonable human being. In my life, I’m an optimizer and looking for expanding what I do into new fields and opportunities. Not all the people I worked for were wired the same way - focus is, after all, a good thing to have running an organization.

So in my self-employment life, I’ve traded the “bullshit of not having more control over the vision” for the freedom to expand in directions as I like (virtual reality is likely to be the next area I reach into once I have some time), BUT I knowingly traded it for the bullshit of being responsible for the basic operations of a business (that an established organization delegates to specific staff to handle that stuff). I have the freedom to pursue clients that are interesting to me, and I’m not constrained by someone else telling me that those folks aren’t relevant to our field. However, the freedom of choosing one’s clients is accompanied by the bullshit of having to worry about whether a client actually exists that shares one’s interests. I could probably pen multiple Notes on swapping one kind of bullshit for another, but I’m sure that you all are familiar with the concept in your own personal lives.

I feel like I’ve found a pretty stable equilibrium balancing freedoms with bullshits, and while there are certainly easier ways to make a living, I feel like the path I’m on has the benefit of forcing an ongoing intellectual curiosity onto me that keeps me mentally sharp (if a bit scatterbrained!) and leaves me nimble enough that should I need to shut down the business and join another organization, I’ll have retained the mental flexibility heading into middle age that should keep opportunities open for me. I haven’t spent my career becoming a specialist in a specific field and pigeon-holed myself, instead I’ve been practicing the skills that will allow me to be the kind of person someone might need with a minimum amount of friction. That doesn’t mean that I haven’t developed some curmudgeonly aspects to my approach (e.g. What’s the deal with the client-side web library churn?), but I like to think that I’m only a curmudgeon in practical directions.

To close this discussion, I wanted to highlight a couple of recent projects I’ve been involved with:

Illinois COVID Modelling: My longtime friend Sarah Cobey’s been working hard on the past year on COVID modelling as part of her research program at the University of Chicago. She came to me late last year after assembling a team to put together a website to model R[t] in order to provide the best scientific guidance to local policymakers navigating the pandemic. In this particular project, I served as a mentor for her team, helping to direct them in useful directions that would allow them produce a resilient website with existing resources to publish their work. I didn’t write too much code for this - mainly examples about how one can use a static site generator instead of a full web framework to accomplish their goal.

NigerHeritage: I’ve been working with paleontologist Paul Sereno and his team to put online the necessary materials to support their development of scientific and educational infrastructure in the African nation of Niger, which is rich in both dinosaur remains and valuable early human history. In this case, I have been the one writing the code, assembling a multi-lingual Django site intended for both Western audiences as well as the French-speaking people in Niger.

StayWell at Home: This system is a tool to help people manage the mental health stress of life in the age of COVID. This adapts some of the earlier work I did for Adrian Aguilera with the DIAMANTE project employing reinforcement learners to adaptively select a messaging strategy that will most likely improve users’ mental health state.

Buoyant Oracle: This project added a text-messaging component to a Reston statue that allows visitors to have an SMS conversation with the statue about its construction and origin. I mentioned above that dialog engines are a key development activity for me this year, and this deployment for Ben Stokes at American University has served as a valuable proving ground to work out the kinks in the nascent technology.

I have a few more in the hopper that I’d love to share, but are not yet ready for public release quite yet. As mentioned above, one of the things that I need to be better at is marketing, and one of these days, I’ll put together some more in-depth white papers and marketing materials that highlight some of this work.

Book report

H.P. Lovecraft's The Hound and Other Stories by Gou Tanabe (★★★★★): In an earlier Note, I covered Tanabe’s adaptation of Lovecraft’s At the Mountains of Madness, and I picked up this volume to complete the set when ordering some finishing materials for the new bathroom.

Like the prior volumes, I really enjoyed this volume, which includes The Temple (Lovecraft’s submarine ghost story), The Hound, and The Nameless City. Tanabe’s style worked well for each story and I consumed this in one setting.

Given that my reading has been slowed down quite a bit in the past week, I’m currently 1 book behind schedule (11 of 100) and need to pick up the pace this week!

Interesting reads

Port-Finished Whiskey to Drink Right Now (Distiller Blog)

Elite Dangerous players say they’re being scammed, trapped in space, and forced to work (Polygon)

Why Chicago Is Lighting Its Railroads on Fire (Popular Mechanics)

Astra to Become the First Publicly Traded Space Launch Company on NASDAQ via Merger with Holicity (Business Wire)

Orbital Assembly Corporation (Netcapital)

Forget “Earth-Like”—We’ll First Find Aliens on Eyeball Planets (Nautilus)

What Does the Title ‘Esquire’ Mean, Anyway? (Atlas Obscura)

Season 5 of The Expanse was a more sophisticated version of Battlestar Galactica (Polygon)


I spent some time this week back in my VR spaceship and made the trip to the super-giant red star Betelgeuse. Here’s a postcard of LAZERCHICKEN III landed on the star’s second planet:

Now, when we say that star is big, we mean that if we swapped Sol out for it, the surface of the star would extend two-thirds the distance to the orbit of Jupiter, easily engulfing the inner planets, including Earth.

Chew on that this week, CMDRs! o7