Monday, March 3, 2025

State of the Union

Below is another letter I sent to my elected representatives. I fed ChatGPT my previous letter, gave it a few words about my concerns this week (the necessity of truth at the State of the Union) and asked it to organize my thoughts. After some minor tweaking, here it is. This doesn't need to be hard, keep the pressure on, and be unrelenting.

Whatever you do: write your elected.

Senator Wyden and Representative Bonamici,

Thank you, once again, for your continued service in these extraordinary times. I write to you this week with grave concerns about the upcoming State of the Union address and the importance of ensuring that voices of logic, reason, and truth are present and heard during this event.

I understand that Senator Wyden has chosen to boycott the address, and while I appreciate the sentiment behind this decision, I must respectfully disagree with the approach. Boycotting the address sends a message, but I fear it is the wrong one. In a time when lies, misinformation, and autocratic tendencies are threatening the very fabric of our democracy, silence—even in the form of absence—can too easily be mistaken for surrender.

The American people need to see their elected officials standing up and speaking out in real time. Every falsehood, every distortion, every dangerous precedent set by this administration must be called out—not later in press releases or carefully worded interviews, but in the moment, as these words are being spoken. I believe it would be far more powerful for you and your colleagues to stand in the chamber and vocally challenge each individual lie. Let the American people see you holding this administration accountable with unwavering courage and conviction.

I understand the weight of decorum and the desire to maintain the dignity of our institutions. But when those very institutions are being undermined, the rules of decorum must sometimes be set aside in favor of defending democracy itself. We cannot allow falsehoods to go unchallenged simply because the setting is formal. By remaining in the chamber and standing up—perhaps even speaking up—you would send a clear and undeniable message: the truth will not be silenced.

This is not a call for reckless disruption, but for principled defiance. Imagine the impact if, as each lie is spoken, a chorus of voices from the crowd responded—not with chaos, but with facts, with truth. Imagine the power of elected officials refusing to let falsehoods stand unchecked. Such actions would not only demonstrate the strength of your convictions but would also inspire the American people to stand up and fight for the truth alongside you.

I urge you to reconsider the strategy of boycott and instead take this opportunity to be a visible and vocal force for accountability. Please stand in the crowd and confront the lies as they are spoken. Let the American people hear you call out this administration’s autocratic overreach for what it is—an attack on our democracy that must not go unchallenged.

Thank you for your time and your unwavering dedication to the principles of justice and truth. I am grateful for your service and hopeful that you will choose to stand and fight, not from the sidelines, but from the very heart of the chamber.


Thursday, February 20, 2025

Write Your Representatives

Below is a letter I sent to my elected representatives. It's been a work-in-progress for about two weeks, but finally came together after the events of this President's Day weekend. Please feel free to copy, paraphrase, mangle, or use as-is.

Whatever you do: write your elected.

Senator Wyden and Representative Bonamici,

I want to begin by thanking you for your service. You have taken on an extraordinarily difficult duty in unprecedented times. I believe it is important to acknowledge that we, the voters, recognize the immense challenges you face. Our democracy, our Constitution, and our very way of life are under assault, and you are fighting against tyranny using the limited tools our Constitution provides. I can only imagine how frustrating it must be to battle against an opposition that disregards the rulebook while you strive to uphold it. In normal times, we could expect nothing more than what you are already giving—but these are not normal times.

While I was unable to attend Senator Wyden’s recent town hall, I did attend Representative Bonamici’s on February 17th. This was just hours after I stood with protesters at the "Not My President's Day" demonstration organized by 50501 in front of our state capitol. At the town hall, I heard echoed many of the same concerns expressed by those protestors. I know you hear these frustrations, and I know you understand that your constituents are scared. You are intelligent, capable leaders, but I also understand that you may not have all the answers. Nevertheless, I want to reiterate what I heard from the people in my own words.

Representative Bonamici repeatedly urged people to continue calling, writing, and emailing, emphasizing that these communications serve as valuable ammunition when dealing with your colleagues across the aisle in D.C. However, I don’t believe that message fully acknowledged the underlying sentiment: many of us no longer believe that is enough. I live in a blue district, represented by a blue congresswoman and a blue senator, and yet my children are coming home from school asking about hateful rhetoric they’ve never encountered before. Neighbors are afraid to leave their homes. Friends worry they may soon lose access to life-saving medication for their children. On darker days, they fear for their children's very safety. I fear for my adult daughter’s future and well-being. Every day, we see images of children torn from their families, of women trapped in a foreign hotel holding signs that beg for their lives, knowing that their imminent deportation means certain death. This is already a life-and-death crisis for millions, and it is only getting worse.

This is our reality. I understand that writing, calling, and donating to the ACLU can make a difference. Indeed, I am writing to you now, so I have not entirely lost hope. But as one commenter at Senator Wyden’s town hall pointed out, the time to for these actions may have already passed. Representative Bonamici faced criticism for not being more forceful at the Department of Education, with some even calling for her to take direct, violent action. I do not fault her for choosing peaceful protest over reckless confrontation. However, that does not mean there are no alternatives. Imagine if she had taken out her phone, started recording, loudly declaring that she was documenting violations of constitutional law, and publicly identifying every officer involved. We must get in their faces. We must make them uncomfortable. Now is the time for peaceful yet unyielding activism. If we continue on the same, well worn path, all is already lost. We must fight fire with fire—without sinking to the opposition’s lowest common denominator.

No battle is too small.

The political losses we have already suffered have caused irreversible damage to international relationships, global stability, and the health and safety of countless people. Some of these wounds will persist for generations. Even if Trump were imprisoned tomorrow, I doubt the damage he has done could be undone in my lifetime or my children’s. It is easy to focus only on the most glaring issues and repeat statements like "chaos is the point," but within that chaos, dangerous precedents are taking root. Consider, for example, the executive order ending the production of the penny. On its surface, this might seem inconsequential, but if left unchallenged, it sets a dangerous precedent—one that allows the executive branch to nullify congressionally mandated responsibilities. If a president can arbitrarily halt currency production, what stops him from declaring that the Department of Education should exist in name only, with zero functional responsibility? Every single battle matters.

There can be no complacency. No action taken by this administration should be allowed to stand unchallenged. Small, insidious precedents pave the way for larger, more dangerous ones. People are already dying. If these precedents become normalized, Congress may lose all power entirely—at which point even more people will die. This is not the time for compromise. This is not the time to choose our battles. Ideally, Congress would bring all legislative work to a standstill until the rule of law is restored. At Representative Bonamici’s town hall, a constituent pleaded with her to block the upcoming Continuing Resolution until the executive branch complies with the law. That seems like the bare minimum. I acknowledge that the minority party has limited tools, but Republicans have mastered the art of obstruction. Learn from them. I know Senator Wyden opposes the filibuster, but when no other tool remains, perhaps petty obstruction is the only available recourse to save lives. Nothing should pass either chamber until the traitors are held accountable. Every inch we cede now enables further atrocities later.

I want to conclude with this: At the town hall, people repeatedly asked what they could do. While I was in Salem, I saw countless protest signs—some humorous, some dark, many outright grim. One recurring theme stood out: references to guillotines and the French Revolution. Take heed—people will not sit idly by while our country is gutted for the benefit of a handful of oligarchs. Democratic leadership is being asked—begged—to provide real, actionable direction. In the absence of strong leadership, people will organize themselves, and history has shown what happens when desperate populations take matters into their own hands. I am not a pacifist; in fact, I firmly believe that opposing fascism—by any means necessary—is patriotic. However, I truly hope it does not come to that. If you genuinely believe there is a nonviolent path to restoring liberty and justice, then now is the time to act. People are ready and willing to do more than send emails and make phone calls—they need to be more involved. I am begging you to help channel this energy productively before it is too late.

We have one chance to get this right. Please, do not waste it.

Friday, January 31, 2025

Thoughts about Narrow AI, ChatGPT, GLaDOS, and DeepSeek

Update (April 18, 2025): It was pointed out to me that using an American cultural reference to challenge a Chinese made LLM may be unfair and biased. At the time of writing this I assumed the training data was comprehensive and lacked cultural bias. Indeed it seems DeepSeek may have used OpenAI training data though we know it was heavily modified as it gets cagey if asked about Tiananmen Square. In my personal opinion the question I chose was fair, but I'll leave this judgement to the reader.


As compared to many of my colleagues and peers, I'm a late adopter. When ChatGPT 3 first exploded into public consciousness I asked it a few technical questions and got embarrassingly wrong answers. The equivalent of being told the sky is green at midnight. That is a sentence, it works in English, it's also entirely wrong. So I shelved the whole thing and laughed uncontrollably every time someone said these tools are coming for our jobs. I've watched YouTube videos where people get ChatGPT to write a video game. The video host helpfully and hopefully provides requirements, requirements that are distilled in a way only someone who knows how to code would be able to simplify… ChatGPT provides responses Then they go back and forth more or less like so:

"Ok, that failed this way, what do I do?"
"Ok, now that worked, let's change this, or add this feature."
"Now this is broken…"

It was painful, a skilled developer could do this in a fraction of the time, yes, they got it done, without necessarily needing to know how to code, but you would have to be willfully ignorant of coding to think this was in any way easier. With some coaxing from the host they usually end up with a passable version of the game. Again, because the host knows what's wrong! They asked the right guiding questions and ultimately wrangle it into a working solution… I frankly think it would be easier to learn to code first.

Then management at work started mandating we use GitHub's Copilot. Yes, mandating, as in, install it or be subject to admonishments from middle management. Copilot is another Large Language Model (LLM), like ChatGPT (well, not really, but close enough for most people reading this). It's specifically targeting developers and instead of only producing human language, it also produces code. It runs as a plugin to your code editor and pops up suggestions as you type. You can also chat with it, ask it to help debug, search for bugs, etc. Generally it's not intrusive, you pause and a few lines of code below your cursor will appear in grey. You can tap tab a couple of times to accept or just keep typing ignoring the suggestion and it goes away. As someone who has been coding for 20 years, and has spent significant portions of my career coding with the less ambitious IntelliSense predecessors, it is a profoundly weird experience.

This is marginally less annoying

It's a bit like having an overeager intern shouting their opinions over my shoulder. Constantly. I can ignore him, but I can't yell at him, tell him to stop fixating on that one feature I finished 2 hours ago, we're doing something different now. I frequently think of Clippy, Microsoft's misguided sidekick from 90s versions of Office. On occasion it's helpful, like for writing a quick utility function. Though 9 times out of 10 it assumes functions exist when they simply don't. What's mind boggling is that's a problem we already solved! Why can't Copilot cross-reference it's suggestions with IntelliSense before vomiting garbage all over my screen? It's extrapolating an API function of this name should exist, because that's how human language works. Sorry, the Jenkins developers aren't good at intuitive function naming, the primary reason I've spent 20 hours in their docs in the last month alone.

Sorry, that got out of hand...

Fast forward a few (five) years: I saw a proof-of-concept on Reddit, generally they'd built a smart assistant with the personality of GLaDOS (the AI villain in the Portal video games). Her voice models exist on the internet, and you simply create a ChatGPT powered pipeline in Home Assistant, give it some simple, plain English instructions (known as Prompt Engineering), and you're off to the races.

What have I done?

Holy cow this is cool. I 3D printed a smart speaker running a software stack of my own creation. Now I can speak with GLaDOS in my own home, and she snarks back at me. If I'm willing to pay OpenAI fractions of a penny in API fees, she can even control my home. Many of my friends have remarked this is how you make Skynet. 

"Hey GLaDOS, tell me a joke"

In my experimentation I have found there are huge differences between each generation of ChatGPT. Generations 3, 3.5, 4, and 4omni are worlds apart. ChatGPT 4o is weirdly good at coding. At least in small batches. I've been conversationally asking it to do things GitHub CoPilot can't. "Would it be possible to write a function to do X?", it spits something out, and the result is one of the following:

  1. I take the response, tinker a bit and realize I didn't actually want to do this. Believe it or not, this is a win, and this happens a lot when you are coding. It saves an hour of reading API docs and iterating to write a function before ultimately coming to the conclusion this was the wrong approach all along
  2. ChatGPT produces a cromulent function and with some massaging and tweaking fits exactly what I need. It makes it easier for me, a human being to do my job, but it certainly doesn't get it exactly right the first time. And that's fair, if I loaded my entire code-base into ChatGPT and asked it to make the changes I'm working on… it would literally have a breakdown and start to hallucinate.

Because ChatGPT doesn't know anything!  It's auto-complete on steroids, the words that came before, statistically, should be followed with these other words. Plus some small randomization. Whether or not those words combined together have any basis in reality is completely immaterial. I really like CGP Grey's primer on Machine Learning, it's more than a decade old (yes, we used to call Narrow AI's like ChatGPT "Algorithms", but that stopped being sexy) Add to all this, the folks at OpenAI have selected for positive answers and a sickeningly cheerful demeanor. It doesn't want to be the bearer of bad news, as a matter of fact, it avoids this to a fault. It's fascinating to me that we've trained this thing based on internet message boards and individual blogs, and it's still so gods damned, oppressively, positive. The insistence on positive answers is actually a flaw and frequently results in conversations like:

  • Me: "The function you gave me doesn't work, I get <insert unexpected behavior>"
  • ChatGPT: "Oh yeah, that's because what you asked for isn't actually possible."
  • Me: ...

In November I took Google's week long Generative AI course (via Kaggle). It's free, intensive, and fascinating. You can take varying amounts of learning from it. They delve deep into training and the vector mathmatics underlying the models, but you can ignore that and focus instead on how to incorporate AI into your programs. I tried to dive deep, but it gets heavy. Ultimately what Google wants is for you to use Gemini in your applications and pay their API fees. After the training I decided to migrate GLaDOS to Google's Gemini - their free tier is more than enough for my usage rate, and the model seems comparable to ChatGPT. So I'm saving $3/mo. Also, because I'm a crazy person, I leveraged LLM vision powered by Gemini to count chickens in the coop after the Smart Home closes the door.

Gemini only sees 3 out of 4 chickens, a forgivable mistake.

One interesting tool we played with in the training is a tool called NotebookLM from Google. You may have seen it more recently in your Spotify Wrapped AI Podcast. It's fun, the gist is you upload data, like some eBooks, or your music listening history and then a pair of AI generated podcast hosts summarize the content. You can also ask a chatbot more concise questions without generating the podcast. Every day of the Kaggle training had a different NotebookLM podcast, the hosts varied from amusing to downright weird. The audio model hallucinates strange sounds of affirmation at odd and unintuitive times. Like most multimodal AI's this phenomenon seems to get weirder the longer the media goes.

Like... really weird.

I bring up NotebookLM because it's an example of what's called a grounded AI. These chatbots I've already discussed don't have access to the internet, they don't even know what day it is. Any knowledge they have is purely incidental and cannot be newer than the date/time they were trained. I'll re-iterate they don't know anything, but statistically speaking the "truth" is (hopefully) the most likely string of words to come out. Grounded models do have access to real data and ChatGPT isn't grounded. When Gemini summarizes your Google search results, it's grounded, but if you're just using it in the Android app it's typically not. NotebookLM is a grounded model, when it summarizes your Spotify listening, it's doing so based on real data. I have on occasion uploaded PDF user guides for complex software tools and then asked NotebookLM specific usage questions. The responses are correct, and it cites it's sources to boot.

I still don't think this thing is coming for my job any time soon. That said I'm realizing it's a remarkably powerful tool for my belt. Spreadsheets didn't obsolete accountants, it empowered them. I think Machine Learning is very similar, I can do bigger, cooler things faster, but it still requires me to know what big, cool, things we're doing.

Now, everyone is talking about DeepSeek-R1. We keep hearing it's equivalent to ChatGPT at a fraction of the price. It's disruptive! China's going to beat us! I think I've established above I'm not an expert in Machine Learning but I say with every ounce of humility I possess, I think I know more than most people, and would go out on a limb to say I'm better educated on LLMs than many of my industry peers. The extraordinary claims about DeepSeek have my skeptical alarm bells are ringing so loudly it's deafening.

I really don't

One of the first things the actual experts told us during the Google Gemini training was the ideas used to build ChatGPT and spark the 2017 AI rush have existed for years, and in some cases decades. The problem is and has always been they are expensive to test. We are in the Wild West of Artificial Intelligence, too many ideas, not enough time or resources. OpenAI took an educated gamble, and it paid off. For every great idea like this, there are 100 white papers proposing improvements/alternative methodologies that have not been tested because their just isn't enough time or data centers. Things are moving at breakneck speed, but this stuff takes time. And money. I mean, DeepSeek cost $6 million to test. The test worked, the resultant model is functional. Could you imagine spending that if their idea had been wrong? They were lucky it wasn't! It could have not worked.  Also consider, maybe this wasn't the first Chinese attempt at building a model with competitive parity. How many dollars were spent testing ideas that didn't work, and so we never heard about them?

I've been interested in self-hosting an LLM but unwilling to allocate the tremendous amounts of hardware (and therefore electric bill). I'm currently home, sick recovering from the flu (so you'll forgive the unpolished nature of this entire post) but from cold-medicine addled boredom I fired up the infamous DeepSeek-R1 and I've got to say... I'm not impressed.

For the purposes of these entirely non-scientific tests there are two metrics I care about:

  1. Speed: Inference rate (measured in tokens per second)
    1. "Tokens" is an industry term, and are approximately equivalent to words... It's complicated, suffice it to say, this is how we measure LLM performance on any given piece of hardware
  2. Accuracy: How useful the response is, this is entirely subjective, and I'm the final judge. Deal with it.

Warning, this paragraph gets technically dense:
A quick rundown of the vitals: I'm running Ollama 0.5.7 setup on an unprivileged LXC Ubuntu 24.04 LXC (Proxmox 8.3.2 on the hypervisor). VAAPI hardware encoding and GPU passthrough to the underlying NUC11PAHi7-1165. I did the core install using an unofficial Proxmox Community Script (formerly TTeck, may he RIP) but ultimately made some small modifications for security and performance in my homelab. The LXC has 6GB of RAM and 4 CPUs. It's not a tremendous amount of hardware acceleration, so it's definitely slow, but all tests should be consistently slow.

For this crude comparison I'm using Meta's Open Source Llama model. You might feel like that's unfair (to Meta) because DeepSeek is built on top of Llama.  By definition DeepSeek is an improvement upon Llama, at least, an iteration thereof - no China didn't whole-cloth reinvent AI, they made incremental improvements to open source work, any other message is business as usual: pop-science news is lying to you for clicks.

The view from my sickbed

Here's the test: I'm going to ask a few different models a simple question: What actor played Spock? This is a (subjectively) good question because it's intentionally ambiguous. The name Spock could refer to the pediatrician/author or be hallucinated altogether. As this is a cultural touchstone we should get to the Star Trek character, but over the years multiple actors have played Spock, so their are several "right" answers. Generally speaking though, humans can guess the expected answer is "Leonard Nimoy," can the machine?

Remember none of these are grounded models, meaning they do not and cannot fact check. They have no access to the web, or any repository of knowledge. They just talk. They've been trained to mimic human speech, that's it. They will all simply word vomit without checking facts. This is called hallucinating in the industry when what they say is wrong and these responses will possibly be inaccurate. That said, I do want to see if we get accurate "hallucinations". Because ChatGPT 4omni is also ungrounded, and it gets a lot right!

So, without further ado, I fire up a lightweight version of Meta's LLM (llama3.1:8b), and ask my question (click to enlarge):

Not bad...

This answer is useful, more-or-less accurate but painfully slow. It took more than 90 seconds to get us the answer on my limited hardware, at an excruciating 2.49 tokens/s. Doesn't matter, you've all used LLMs, this one's similar to the ones you've used, if I had better hardware it'd be faster, but the answer is the same. We have a baseline! Now let's ask deepseek-r1:1.5b:

WTF?

11.08 tokens/s, wow, that's bleeding fast! The words were just pouring across my screen! First thing you'll note is the <think> blocks. DeepSeek is what's called a "Reasoning" model (that's what the R1 is for), meaning it must walk you through it's thought process. All of this content between these blocks is interesting but ultimately useless. It can help with debugging if you're doing prompt engineering or want to understand better what's going on in the model, but I would always turn it off on a production model. It cannot be disabled in DeepSeek. Programmatically I could cut it out but even if I remove it I still have to wait for the model to finish reasoning before I get the answer. This means, in my humble opinion, the token rate is misleadingly high. If we remove the reasoning the amount of time between me asking the question, and the answer appearing is much, much longer than the inference rate implies. This prompt took 48 seconds to run, which is admittedly faster, than the baseline but...

You will also notice the answer is completely and utterly useless. I had to Google "Jim Bourassa" and ... this entire answer is entirely hallucinated. No such actor exists on IMDB. There was an animated Stargate show: Staragate: Infinity, but there was no character named Spock. I'm not an expert on the Stargate franchise but I can't find any references to that ... Weird Chinese name it gave? Nobody named Jim Bourassa was on the actual show. The answer is completely trash.

"But wait!" some of my keen eyed readers may notice, I compared a 1.5b model to an 8b model!

The 1.5b model is tiny, at just 1.1GB

At the risk of overly simplifying, the 1.5b model is much dumber than the 8b model, and that's to be expected. The 1.5b model is the one everyone's running on their Raspberry Pi. You could probably run this model directly on your phone! No cloud involvement. Well, that's an exaggeration, but still, this is an ultra-lightweight model. I compared these as they're both the "fastest" models available for each technique but there is no equivalent Llama model. I've really only established that the 1.5b model is almost useless. Fine, let's try deepseek-r1:7b, I figure the 7b model is comparable to the 8b model, at least in size:

Um...

This run clocked in at a comparable inference rate of 2.48 tokens/s, not a surprise seeing as this models complexity is essentially the same as the Llama model. I'll note once again, the vast majority of the time was spent on reasoning (which is absolutely inane, and we'll get to that). Total duration from prompt to final answer was just shy of 3 full minutes! This took about 2 times longer than Llama!

Now let's talk about that answer! It immediately zeroed in on Shatner, an actor who was indeed in Star Trek, but long hair? British accent? What in the seven hells are you talking about?!

For giggles I decided to run one more test. I ran a modified version of my query in the Meta model one more time, this time asking it to explain it's reasoning. We won't get the <think> tags, but it should give us a reasonable approximation of the same behavior we get from DeepSeek. Here's the result:

Refreshing!

Again, these are all ungrounded so getting the right answer is an entirely "by chance" event, and yet, the Meta model gets the correct answer every time I ask. The reasoning is entirely sound and logical.

I want to underscore my earlier point, the media wants to pitch this as an embarrassment to American companies. The message we're hearing is some tiny Chinese company developed a new way of building models that modifies/iterates on existing methodologies developed by American companies. They did this purely out of necessity (trade restrictions on GPUs). I am not entirely convinced this new methodology is a anything more than a minor improvement. It's possible future iterations of this training method will prove more effective, and I'll concede they did a great job considering the ridiculously low price. Asserting that DeepSeek is equivalent to ChatGPT? That's (in my humble opinion) absolutely insane! I see no evidence to support that assertion, at least at the low-end performance level of these particular variants.

So, my not-exactly-professional opinion, this is much ado about very little. I do think this new training method could be extremely useful for building grounded chatbots.  They're good at talking, but they spew absolute nonsense. If we tethered them to reality, the cheap training becomes a clear advantage. This Chinese startup made an incremental advance, maybe in a few years models trained in this way will provide useful/accurate answers. They also shared their work. This is all open source! OpenAI/Meta/Google will not be going out and retraining their models with this new method immediately, but if there is something to be learned from this cheaper training method, I'm sure they'll figure it out.

The world continues to revolve around the sun.

Wednesday, May 15, 2019

(Mis)adventures In India

I recently was asked by my employer to travel to India for some training and to support a development project.  As this was a once in a lifetime trip I figure I should share my experiences.  I waited a few weeks to write my thoughts down because as you'll see, I needed some time to process my feelings.

It's... complicated
Originally my trip was scheduled for the second half of February, then due to some delays it was moved to the first half of March.  Then it was delayed again to the second half of March at which point my wife said, "Hey, if you're going to India over spring break, let me come too!"  Then guess what? It was delayed again.  And again.  I eventually made the two week trip in the second half of April.  Being stubborn we decided my wife would come anyways.  We asked some friends and family to watch the kids and made the trip.  We are very grateful for all the support we received in the community around us, they really stepped up and the kids were able to continue to attend school and sleep in their own beds which really is a wonderful luxury!

Hot (defined): 105° outside this ancient stone palace filled with thousands of tourists
I don't want to understate how stressful these scheduling delays were.  Every day I went to work I was hearing different things about when the trip would be.  At home, we basically couldn't plan anything because at any moment I was going to have to buy tickets and fly out, maybe this weekend?  I know this is expected with some people's professions, but I don't work one of those kinds of jobs.  In the end I was to fly out on April 14th but was not given permission to purchase tickets until the 10th.  Which meant my wife purchased slightly over priced tickets for the second week I was there.

Obligatory ugly PDX carpet photo
In preparation for the trip I had to make multiple trips to the doctor.  I got immunizations for Typhoid (wait, I thought that was Medieval Europe, is Typhoid still a thing?), Hepatitis A+B, a bottle of antibiotics "just-in-case" (do not drink the water!), and a bottle of "Malarone" with instructions to start taking it daily, twenty-four hours before landing and continue taking it seven days after departure, because the brand of Malaria endemic to Bangalore is resistant to all the other stuff.

Finally, the day of my travel arrived.  I had packed my bags a few days before, attempting to compensate for travel anxiety I had been experiencing for months at this point so we tossed everything into the car and headed to the airport a few hours early.  Flying from PDX to AMS meant I should be there three hours early (international!) but of course, I never go that early.  I mean, seriously, every time I've been three hours early for an international flight I spend two and a half hours in the boarding area.  We get to the airport, I open the trunk and... the zipper on my suitcase has failed the contents are spilling everywhere.  The seam has ripped rendering a six inch section of the zipper worthless.  I am about to spend 20 hours on airplanes and go through four airports to get to my destination, I do not want to screw around so we leave the airport run to a nearby big-box store and buy a new suitcase.  I hastily transferred all my belongings to the new bag and smiled to myself, if this is my one travel disaster this trip I can totally live.  I was in for a surprise.

Aisle seat by the bathroom
The Royal Dutch Airways flight from PDX to AMS was wonderful, the assigned seat wasn't ideal but the flight was only half full so after takeoff everyone shuffled around and I got three seats to myself.  I took advantage of the free in-flight entertainment, sprawled out across my entire row and imbibed no less than four hefeweizens.  All-in-all, if you're going to spend eleven hours on a plane I could think of much worse ways to do it.

My experience of Amsterdam was limited but if the airport exemplifies the city I would highly recommend a visit
I had attempted to book a flight direct from Amsterdam to Bangalore, this would have been another eleven hour flight.  Unfortunately this cost a little more than going via Mumbai and the corporate tool refused to allow me to book.  So I was heading for a twelve hour layover in the great city of Mumbai.  I figured when I got there I might leave the airport for a few hours, check out the beaches, and grab a drink.  It all really depended on how tired I was when I got there.  My stay in Amsterdam was much shorter, after security and finding my terminal I had less than three hours to myself  and my stomach was bothering me.  Exhaustion, dehydration, travel stress.  Who knows, so I popped my second Malarone, sprawled out on one of the cushioned benches they have available all over the international terminals and took a nap.

The eleven hour flight from Amsterdam to Mumbai was much more crowded, and loud.  My shoulders are too wide for coach seats and my legs too long (did I mention my employer refused to book business class?)  By the end of the flight everything hurt, I did exercises recommended by my physical therapist but frankly those only get you so far, and my stomach was really bothering me.  I was so thrilled to be on the ground.

The Mumbai airport is everything the Amsterdam airport is not.  It is poorly organized, hot, and it smells.  There was a thirty minute walk from my arrival terminal to the immigration checkpoint.  During this walk I did not see any people other than those from my flight.  It was just one long, seemingly empty and abandoned passageway meandering through the airport in only one direction.  Immigration went smoothly, my employer had arranged for a six month work permit in advance.  Originally I thought this was overkill for a two week trip, but given their inability to commit to a schedule perhaps this made sense...

Of course, after passing through immigration and getting my photo taken I was sent to baggage claim and customs.  I retrieved my bag, followed the signs and eventually found my way to the domestic check-in lines at the front of the airport where I intended to check my bag and get my next boarding pass.  I figured I could do this, maybe grab a cup of coffee and decide what to do next.  Standing in line for my Jet Airways flight I started chatting with the woman behind me, she was also headed to Bangalore She was lamenting that her direct flight from Amsterdam to Bangalore had been canceled but she had been given an earlier flight from Mumbai to Bangalore, only a three hour layover compared to my twelve.  I guess it was a good thing I didn't book the direct leg.

Look closely, this plane's engines and wheels have been shrink-wrapped - seized by creditors
As we got closer to the clerk I started to notice a pattern.  The passengers approached the gentleman, handed him their identification and confirmation number.  He proceeded to enter the information into the computer, stare thoughtfully and tell them their flight has been canceled.  Continuing on to Hyderabad? Canceled.  Goa?  Canceled.  Finally my turn, guess what?  My flight was canceled.  "OK, well, I paid you to get me to Bangalore, what are you going to do to fix this?"  I'm directed to the travel agent outside the airport where I will get a refund I can use to buy a new ticket and... Oh wait, no we can't refund you because you've been booked on another airline leaving in forty-five minutes.  After waiting in line for half an hour the alternate airline insists I am not a ticketed passenger, this confirmation number means nothing and they have never heard of me...

I will save you a lot of headache and just summarize what happened here.  Jet Airways declared bankruptcy while I was in the air.  All of their flights had been canceled for the foreseeable future.  Normally in this situation travel vouchers exchange hands with other airlines and you end up on another flight but the Jet Airways financial situation was such a horrific mess nobody was honoring their vouchers.  Jet Airways refused to do anything else.  It took four hours of running around an airport screaming at people and I ended up just buying another ticket to Bangalore.  I will let my corporate travel agents haggle with the bankruptcy lawyers over a refund.  I had just under an hour to check-in, clear security and get to my gate.  Well, I guess no Mumbai for me.

I really hate the Mumbai airport.  This airport claims to be "announcement free", so you must find and watch the scarcely placed displays which do not have local time displayed on them.  The gate signage doesn't light up for the next flight until after boarding time begins (seriously).  There is no free internet unless you have a currently working and active Indian SIM.  This means international travelers, the folks who almost certainly need internet access the most, can not use the internet.  It's a complete mess and has obviously not been thought through by anyone competent.

By the time I got to the correct gate, attempted (and failed) to notify my hotel driver I would be five hours early, I was fuming.  I was angrier than is even remotely rational and my stomach was really bothering me which I knew was only fanning the flames of my anger.  I knew I couldn't go to sleep for a few more hours if I had any chance of adjusting to the timezone differences but I was really just ready to be at my destination.

Mumbai airport: Of course there's a line
The flight from Mumbai to Bangalore was fine, the seats were super small and cramped, the way only a small country with 1.3 billion people can do small and cramped.  It was literally the most turbulent flight I have ever been on.  Shaking so violent the seat-belt was necessary to stay out of my neighbor's lap.  At least there was breakfast, and it was only eighty minutes, which after two eleven hour flights felt like barely enough time to get settled in.

In my experience with international travel, the first thing you do when landing in a foreign country is stick your card in an ATM and pull out a wad of local currency.  Sometimes cab drivers won't help you without cash, you might want to grab food or whatever.  It just helps, especially if you don't speak the language.  When I landed in Bangalore I grabbed my bag, found an ATM and attempted to pull out a chunk of cash.  Declined. What?  This is an unlimited corporate card.  OK, I'll try a personal card and... Declined.  After fifteen minutes I grumbled some obscenities at the ATM and stumbled off to find a way to contact my hotel.  A gentleman at the cellphone store helped me and I was blown away by his friendliness.  He let me use his personal phone, helped me figure out how to dial my hotel (much more complicated than it should be).  After confirming my hotel couldn't get me for a few hours I found a cab driver who assured me he would take card.  He spoke enough English that I was certain he understood I don't have cash.  I have no cash.  We are very clear on this.  I am only going to be able to pay with card...

Guess what?  The road running from the airport to the city is a toll road.  A fact which nobody mentioned to me until we were sitting there at the tollbooth, with impatient traffic piling up behind us.  This tollbooth doesn't take international credit cards, not even American Express.  As a matter of fact it only takes Indian cards.  It takes what was probably only three minutes but felt like twenty, but finally the cab driver agrees to "lend" me the money, as long as I promise to find some cash when I got to the hotel.  Sure buddy, I'll try.

I find the juxtaposition of civilization and 3rd world in this image jarring
The drive to the hotel was astounding.  Traffic in this country doesn't seem to obey any pattern or structure I could deduce.  The constant stream of honking permeates every single moment, motorcycles sans helmets or any protective gear whatsoever, weave their way in and out of traffic.  On multiple occasions I saw families driving mopeds with two children sandwiched between parents.  Four people on a tiny dirt bike, no protective gear between them.  I tried to deduce a pattern to the honking, watching the behavior of my cab driver in relation to his fellow drivers.  After two weeks I came to the conclusion the honking communicates one the following three things:
  1. Hey! You just cut me off, made me slow down, or in some other way impeded my journey
  2. Hey! I'm going to cut you off, make you slow down, or in some other way impede your journey (just FYI)
  3. I'm driving!
    1. Seriously, I was out at nearly midnight one day, we flew down the roads at 45MPH with nobody else on the road and still the driver was honking!
The staff at the hotel were extraordinarily friendly.  They did the obvious things like carry my bag to my room and greet me kindly but their attitudes and smiles all seemed genuine.  I just felt like they were going above and beyond with their friendliness.  I asked about local SIM cards and free WiFi, and bottled water and they had answers for me at hand.  They even offered to draw up the legal documents required by the Indian government for an international tourist to get an Indian phone number while I settled in.

Cattle do not cause traffic jams. Irritated drivers are not honking at the cattle. The cattle are behaving correctly, it is the drivers who are failing to drive around the cattle. This was made very clear to me.
So that's what I did, I settled in and showered (twenty hours of airplanes had me stinking like you would not believe).  I setup my internet, left notifications with family and coworkers confirming my safe arrival and went in search of something to keep me awake for a few hours.  My stomach still hurt though I downed a ton of bottled water.  I thought I must just be tired.  I settled on finding a local prepaid SIM so I would be able to communicate while in the country.  The concierge directed me to a Vodafone store and the complimentary chauffeur drove me there.  Since I'd had a chance to reset I tried to take in the city and at its best Bangalore smells of curry and burnt rubber at its worst it smells of piss and dumpster fire.  I really do think you have to leave your sense of smell behind.  I suppose after a long enough period one must adjust to it.

The phone store salesman spoke enough English to get by.  I conveyed to him I would be in town less than one month so he said the easiest thing would be to buy a one month prepaid plan.  He gave me:
  • Unlimited minutes (up to 1000 a week)
    • That's 1000 minutes per week, buddy.  Not unlimited.
  • 1000 SMS per day
  • 1.4GB data per day
All for one month at Rs. 249 ($4.27 USD).  You read right, 1.4GB per day for an entire month.  A total of $4.27.  For the entire month.  Imagine, a phone plan which puts every single American phone plan in existence to shame for less than the cost of a cup of coffee.  Gods below we overpay for cell phones in the U.S.

This is of course the point where I learned about a key design issue with my LG phone, the SIM/SD card tray is very thin plastic pressed up against something very hot.  As it had, naturally, never been removed since I originally installed said SIM and SD card 18  months earlier, I was unaware of this issue.  Upon removal I discovered this tray had melted to the aforementioned hot component and therefore broke off when I pulled it free.  Luckily the SD card sits at the back of the tray next to the hot component so I was able to install the new SIM card, but unfortunately had to go the entire trip without my podcasts.  It seems like having first world problems in a third world country is a special kind of meta...

Indian snacks, provided by management so we had even fewer excuses to leave the office
I went back to the hotel, read my book, video-called my family when they awoke, I slept and awoke the next morning to crippling digestive discomfort and the news that my employer was canceling the project I was there to support.  I want to emphasize I'm trying really hard to find the positive here.  I know the things making me miserable are the results of phenomenally bad luck, but I could have screamed at this point.  I had left home less than 48 hours earlier and was miserable.  It really did seem like the universe was trying to get in my way.  Everything about this trip that could have gone wrong had gone wrong!  If you had offered me a plane home at that moment I would have gladly jumped at the opportunity and flown straight home.  I wanted to forget the whole thing and move on with my life.

Corporate cafeteria food!
Instead I went to work.  Naturally everyone at the office was in an uproar.  "Hey nice to meet you, what the hell do we do for a living now?"  I sipped on green tea and faked a smile as I shook hands with people I have only ever exchanged e-mails with.  I joked a few times my first, second, and third level managers all live in India, so while none of us know if we have jobs I figured the best place to be when not knowing if I have a job was right there, next to the people who were working on that very problem.

Lunch outing with my team at an American themed BBQ place.  It was hilarious to see a caricaturization of American culture through Indian eyes, and these guys were really quite hospitable!
The work was informative, I learned a lot and met some really smart people.  The food was delicious although I could only stomach small amounts at a time.  I love spicy foods, and none of the meals I consumed were close to my limit.  Even though our project had been canceled the company was still hoping to sell the IP (and expertise - us) so we worked grueling hours.  I left my hotel at 8AM and returned at 8PM every day for the week including my first Saturday there.  Sunday we got a reprieve, nobody had to go to work so I got in an Uber and did the tourist thing.

Government buildings!
The way it was explained to me is prior to the British occupation India was a collection of separate kingdoms.  These kingdoms were unified under British rule into India.  Those ancient dividing lines, more-or-less make-up the modern states of India.  The capitol of the kingdom of Karnataka was Mysore, but during the British occupation Bangalore became the capitol so, the things to see are downtown.  I took pictures in front of the capitol buildings, courthouses and the like.  I hired a rickshaw who spoke decent English for a guilt-inducing pittance of a fare and had a tour-guided morning.  After I spent far too much money on souvenirs and had enough of the sun he dropped me off at an overpriced restaurant where I ordered an Indian dish I'd never had before next to a local beer.

You would think they would drink my Indian Pale Ale's in India, they don't
After lunch I visited the Bangalore Palace, traditionally this was the summer home of the Maharaja, this one had been specifically built to imitate Windsor Palace.  I find humor at the thought of the royalty of Karnataka building a summer home to look like Windsor but I do tend to overthink these things.

Can you tell where I am?  England?  Bangalore?
I toured the palace, which it turns out only exists to encourage you to tour the palace in Mysore.  Every room, every painting, everything was annotated saying you should absolutely tour the palace at Mysore.  Mysore is bigger, prettier, better, and superior in every way.  Or so they say.

When I felt like I'd had enough heat and summoned an Uber back to my hotel.  I ordered dinner in the hotel restaurant, the waiter balked at my choice, warning me the plate was spicy.  I smiled and said I would be fine.  It was almost spicy.  My digestive discomfort continued throughout the week.  By Thursday I realized my violent bathroom encounters were occurring exactly eight hours after taking the Malarone and a quick Google search confirmed my symptoms were caused by the anti-malaria drug.

At the advice of some Googlers I cleaned out the pharmacy next door of their entire Imodium supply (8 pills for 85¢ US).  I ended up taking six in the next twelve hours.  The next day I consulted the Occupational Health Nurse on site at work, she scolded me, saying I shouldn't take more than two a day but supplied me with enough to last the rest of my trip.

The USB headset I used to make phone calls and attend conferences on my work laptop failed.  It simply stopped connecting.  I can't even make this stuff up, I was so jaded at this point I just laughed, tossed it in the trash and used the headphones I had brought for music and podcasts.

Pay no attention to that trash
My wife appeared midway through the second week.  I Ubered to the airport and met her there.  There are far fewer restrictions on who can and can't drive for ride-sharing services there.  In the US you can lose your charter for having a water stain on the backseat of your car.  Most of the Ubers I took in India had windows which wouldn't roll up, the stereo had been stolen and the AC didn't work.  Sometimes the drivers were courteous and friendly, sometimes they were the worst human beings I've ever met.

At the urging of my colleagues we decided to book a hotel in the city of Mysore.  We grabbed an Uber early in the morning intending to visit the Ranganathittu Bird Sanctuary.  Naturally it had no AC and the drive was more than three hours.  By the time we got to the sanctuary we were already tired, hot, and deeply concerned about heat stroke symptoms.  We walked the sanctuary a bit, took some photos.  We gulped down water hoping to refresh ourselves.  We were unsuccessful.  Having barely taken in the sanctuary we summoned another cab and went to our local hotel.

 
A rather unique, tall tree
Mysore is definitely cleaner and smells slightly better than Bangalore, the sewage is (mostly) absent but this only reveals a hard to describe underlying odor. Maybe it's the dust? Maybe it's the halitosis of more than a billion people (95% of Indians have gum disease).

We recovered in the hotel for a few hours, had a lovely dinner at what I can only describe as a gluten free, vegan, organic Indian bistro.  The food was terrific, prices fair and the staff were kind and courteous.

It's hard to identify exactly what makes the tea so delicious, could be unpasteurized whole milk?  Copious spices?
The next morning we had tea in a tiny shop which also sold cigarettes and condoms, I'm pretty sure we overpaid at 20 rupees (the previous customer couldn't have paid more than 5) but squabbling over what amounts to a 20¢ difference hardly seems productive.

Speaking of economics, I can pay 1000 rupees for a 90 minute Uber ride but won't buy me a t-shirt (I have been told this is normally 6000). 1000 Rs. will also buy eight people all you can eat buffet and two alcoholic drinks each.  Food and transport are cheap, name-brand clothing compares to bargain prices in the US.  I am told most things in India are cheap although I found this to be hit or miss.  A lot of proprietors do not post their prices and so when you ask you have to trust your being given an honest answer.  I suspected this is not always true, something about our appearance gives us away as "rich westerners".  If one was prudent, one would have a local friend accompany them on shopping expeditions.  You will likely start price negotiations at a more acceptable place.

We made a friend.  We didn't feed him, or pet him, or anything.  He just decided he liked us and followed us around the city for hours
Sunday morning we toured the Mysore palace.  It's beautiful in much the same way as the Bangalore Palace.  Large, open spaces, elaborate art and architecture.  I was amazed to think these places are old enough that all the details would have been hand carved and painted.  Every floor and wall tile.

Sundays are apparently a bad day to go.  It was very crowded, 105° weather outside and it was a cool relief to step out of the palace so I can only speculate how hot it was inside.  It was busy enough we were essentially shoved through the tour, stuck in a moving throng of people unable to affect much change on our path or rate of travel.

Beautiful ballroom looking out over the palace gardens
After we toured the palace it was hot again, not wanting to have a repeat of yesterday's flirtations with heat stroke we decided to trek back to Bangalore early.  My first driver accepted our ride request then called me to say never mind, he had accepted an Ola request instead, would I please cancel?  The second driver, picked us up, saw our destination and promptly dumped us on the side of the road.  Then he proceeded to call me repeatedly begging me to cancel the ride request as he couldn't accept a new fair until I did.  I honestly tried to cancel it, but the app would not let me.  It serves him right for being a complete dick.  Eventually, when he realized I had the upper hand he drove us to Bangalore.  It was an awkward ride, but at least we got there unscathed.

A lovely meal with my lovely wife
The rest of our trip was fairly uneventful.  My wife's experiences confirmed my suspicions of Malarone, making new reservations after the airline kerfuffle meant I had to fly home separately from my wife - almost 48 hours later (You didn't think I would keep those reservations, did you?)  I feel I wrapped up a successful business trip which may have seemed destined to fail.  I met and learned from some interesting people.

The flights back home were thankfully uneventful.  I even sat behind the bulkhead on both of my long flights (legroom!), though this time my route was BLR -> BOM -> EWR -> PDX.  The Mumbai to Newark leg is just shy of seventeen hours.  There are very few things in life capable of making a seventeen hour flight fun.

I flew United, so I suppose I should be thankful I wasn't beaten and removed from the plane
Despite my grumbling I'm glad I went though if I was asked to go again I think the answer would have to be no.  At least now I know how much I disliked it.  I know there are things I could do to prepare for many of the issues I had, but I do think it will be a while before I'm willing to go through the effort of preparing for those issues.

I'm told the anti-malaria medication can take almost two months to adjust to and the symptoms I experienced were rather extreme.  Almost everyone feels off, but it sounds like my wife and I both won the genetic lottery here.

My work situation remains interesting.  In the most cynical sense of the word, though I see a light at the end of the tunnel.

Honestly, I was unreasonably happy to get that exit stamp

Thursday, August 17, 2017

News: Rant and Blog Changes

I recently read about a phenomenon called the "quarter-life crisis".  Basically people in their late twenties and early thirties are suddenly overwhelmed with a sense of loneliness.  The pressures of reality as an adult start to press in on them and people seek companionship by getting married or having children (or both).  I did the kids and a wife thing pretty early in life so I think I skipped that bit, I am many things but I don't feel alone.  I have stress and problems in my life that can at times seem overwhelming but I always know I'm not going through them alone.

I work a lucrative 9-to-5 at a large high tech company. I consider myself fortunate, I can pay my bills, I have money to save for a rainy day, my retirement, and kids' college. I have very little debt plus a mortgage with an interest rate lower than inflation. I run my budgets tight, with lots of money being funneled into savings accounts: I don't want to work a day longer than I need to. This means, even though I do well, I don't have much disposable income. We have a little, but we keep it to primarily essentials. I'm about 3 years into a 5 year plan to take care of some medium-term savings goals (no credit cards, foundation college savings for the kids), some unforeseen circumstances will probably push that out another year or so.

I live in a high cost of living area. To put it in perspective, national inflation rate in 2016 was about 1.7%, the Cost-of-Living index in my county went up by 3.1%, we're definitely above average here. My employer had their best year ever and I think I did a really good job as a tiny cog in a massive machine. I did my job, and I did it well. Well enough I was expecting a decent raise, 5% would have been good, but frankly I would not have been surprised if it was closer to 10%. At least enough that I could loosen up our budget a bit, take my wife out to dinner once a month, maybe add something frivolous (Hulu?) to our monthly expenditures.

This was particularly poignant considering my employer has started scaling back some of our benefits. They've ceased HSA contributions which were worth $750 to me in 2016 and our insurance premiums crept up 10% . This on the back of my wife and daughter both being diagnosed with chronic autoimmune diseases and my daughter and I both participating in immunotherapy for our chronic hay-fever, I was looking forward to a small influx of new cash.

I can't overemphasize, I busted my ass last year. I wasn't expecting something for nothing, I went above and beyond, and ended up receiving a raise that my boss insisted reflected the "corporate average". My raise was 2.4%. Keep in mind CoL in my area increased 3.1% and they've cut other benefits that were worth cold hard cash to me. As far as I'm concerned, I took a pay-cut. A sizable pay-cut that stings all the more considering my corporation's record breaking revenue year.

I'm not quite ready to leave, but I'm on the precipice. These past few years I've become disillusioned with the integrity of the company I work for. About five years ago I had a particularly hostile manager who went out of his way to insult, berate, and harass his subordinates. When we complained, HR simply shrugged and said "he's a dick, get over it." (Read: "He committed no crimes, so you can't sue.") I was pretty shaken by the experience, I'd made my job a part of my identity. It was a valuable lesson and pushed me to separate myself from my work. When I walk out of the office I forget what I do for a living, and don't think about it again until I get to work again tomorrow. I have to or I'd go crazy. I've considered going somewhere else, where I might be better appreciated and compensated. Next year I'll be eligible for an 8 week paid sabbatical, and I'll be damned if I walk away before I get to cash in on that, a little family-time is worth more than any pay raise.

This brings up another question, do I like what I'm doing?  I mean, how did I end up writing software for a living?  If I think back I sort of fell into it.  After I graduated high school, I went to college.  I'd always been pretty good with computers and so when I started school my stated major was going to be in Computer Engineering (a rather unique amalgam of Computer Science and Electrical Engineering my university offered at the time).  This being a science degree I took a variety of science classes, I knew even then I couldn't spend forty hours a week staring at a computer screen.  I thought maybe I'd become a manager of geeks or something, working in technology seemed like a sexy career path and I thought if I could use my technical prowess in conjunction with some soft skills I'd be on the path to success and career bliss. Realistically, I was taking the other science classes to see if anything else popped out at me.  I was looking for some other career path to pique my interest.

My parents brought up four kids on a middle class income, so my college savings was embarrassingly small considering the mountain of cash it took just to attend public state schools in 2005 (yes, I know, it's 300% worse now).  I begged for grants, scholarships, loans but came up completely empty handed.  Being a middle class non-minority male meant getting laughed out of banks and my applications for other forms of financial aid went to the bottom of the pile.  So naturally, the money ran out.  Fast. After less than two terms, I was so stressed about where my next meal was coming from I couldn't do homework, stopped attending, failed my classes and finally dropped out.  This was a very dark time in my life, one I don't care to revisit.  So I called some people I knew in high tech, got a job paying a little more than minimum wage and tried to figure out my next steps.

At that point the plan was something along the lines of working for a few years, saving up money and trying to go back to school, but you know what they say about fate and plans.  I fell in love with my wife and daughter, and the rest is, as they say, history.  I threw myself into my career when I wasn't working I was studying my field, learning and improving to get better at what I do.  I tinkered and experimented at home.  I worked temporary contracts, got raises, laid off, denied job applications, (because of my non-minority status), but finally I did it!  I landed a steady job in corporate America.  Hooray.  At this point I took a look around, looked at my salary and those of my peers and said, why go back to school?  I could spend $100K on an education and it would increase my lifetime earnings by maybe 5%?  It just didn't make financial sense, so I settled in, and tried to make the best of it.

My plan for life by the time I turned thirty was for one of two things to be true: I'd love what I do for a living.  Or I'd be independently wealthy (hey, a guy can dream).  I'm a realist, I didn't expect both to be true and if it was the latter then I could quit, and do something I actually love.  The reality is neither of these is true.  I thought I liked working on computers, but if I learned anything about myself after the experience with the sociopath manager it's I'm only doing it for a paycheck.  I like being successful at what I do, and I'm successful at this, but I don't like it.  I'm not improving the world in any way that I can say I'm proud of.  Currently I make life easier for developers who are trying to improve the cell signal on your smartphone.  Who gives a shit?  I'm not making the world a better place, I'm not going to lay on my death bed and look back thinking "Wow, I'm so glad I helped developers make 5G internet a reality."

I look around at my peers and some of them have been stupendously successful.  I know a few people who invested big in Bitcoin back in 2011, and are independently wealthy.  My adult life experiences have made me severely risk averse, so I passed on that particular investment opportunity.  (Hindsight bias has me regretting that choice right now.)  If I had been able to complete college, what would I be doing for a living?  I have two wonderful children and a mortgage to pay for, I can't afford to quit and go back to school.  I looked into online/night classes at the local community college and was told in no uncertain terms by admissions, these were not offered at that school.  A story I've heard contradicted numerous times since them. (Seriously, she couldn't understand why I wouldn't quit my 6-figure salary to attend community college full-time, it was in the top-five most bizarre conversations I've ever had).

I don't know what my next step will be, but I'm working on it.  I'm sure something will come into focus as it always does.  In the meantime my wife and I are running some side projects. She has a Lifestyle blog for natural DIY projects and things of that sort called "A Crunchy Lifestyle". Obviously Google AdSense is one place she's hoping to make a bit of money there (this blog as well!), but the Amazon links are a part of their Amazon Associates program, if you click a link and make a purchase, we get a commission.

I've created a Patreon for my fiction. I think I'll continue to post my fiction stories here but on a delay, preferring to leverage them for a bit of cash first. We'll see how it all works out.  To help resolve our more immediate financial concerns I've also signed up to drive with Uber and Lyft and have been driving on the weekends. It's not great money but it's pretty easy to make $20/hour, so it'll help finally pay off a credit card I've been fighting with since my contract days.

Analyzing the nature of my existential conundrum, I'd say (tongue, firmly planted in cheek) it more closely matches the definition of a mid-life crisis than the quarter-life crisis I missed.  Existential doubt and confusion, a need to change course to grant meaning to my life and an overwhelming desire to buy a muscle car...  I'm just doing it about twenty years early!  I suppose that's a good thing, by asking these questions early in life I have that much more time to enjoy any changes I decide to make.