Pondering ultimatums

I had cause recently to think seriously about the nature and use of ultimatums in leadership situations. I’ve come to the conclusion that the ultimatum is a tool that costs the leader much more than he gains, if he gains anything at all. It’s no surprise that I’ve never seen an effective leader use an ultimatum to resolve a conflict.

Before I go on, let me make sure we’re all on the same page. In leadership situations the ultimatum takes the form, “If you don’t do what I say, I will institute this [usually very unpleasant] punishment.”

It’s a tool from the carrot and stick school of leadership. When it works, that is, when delivering the ultimatum elicits the desired behavior, it does so because the subordinate desires the carrot, which the leader has control of, or fears the stick, which the leader also has control of. The leader can threaten to take away the carrot or threaten to apply the stick.

The leader delivering an ultimatum absolutely depends on the subordinate desiring the carrot and fearing the stick. The leader has, in his mind, a “can’t lose” situation: he’ll either get obedience, or the subordinate will suffer dire consequences. He knows that the subordinate won’t choose “or else,” because that’s unthinkable. This can elicit the desired behavior in formal hierarchies like the military, because the ramifications of the subordinate’s other choice are indeed dire: court martial or, in a combat situation, execution. It becomes much less effective as the superior/subordinate relationship weakens. For example, in a volunteer organization the leader’s “stick” is almost non-existent. He’s left with the carrot: the subordinate’s permission to participate.

Things go sideways for the leader when the subordinate no longer desires the carrot nor fears the stick. At that point the leader is powerless, but he doesn’t know it. He thinks he’s delivering the knockout blow, “You better do this, or else,” and is not at all prepared for the subordinate to select “or else.” At that point it’s the leader, not the subordinate, who has no choice. He has committed to a course of action and then surrendered control of the situation to the subordinate. The subordinate, who has already determined that the leader has nothing he wants and has no power to harm him, can then tell the leader, with impunity, to go stuff himself. The leader, even if he’s aware enough to realize that he has lost the battle, has no choice but to bring out the stick and attempt to flog the subordinate, despite the fact that his attempt at flogging makes him look like a fool.

If the leader is foolish enough to allow a subordinate to goad him into a public confrontation, then everybody gets to witness just how much weak and ineffective the leader is. Not only does everybody see him fail to control the situation, they see him deploy his ultimate weapon and have it blow up in his face. The subordinate disobeyed, dared the leader to do something about it, and then laughed at the result when the leader took the bait. The leader exercised his authority, but lost the subordinate and the respect of anybody watching the conflict.

The ultimatum is a tool employed by weak and insecure leaders when leadership has failed. Even if it elicits the desired behavior, it does so only out of fear. It forever damages the relationship between the leader and the subordinate, and it will cause anybody who witnesses the confrontation to look at the leader in a new and much less positive light.

An effective leader, on the other hand, establishes control of a developing conflict and works to resolve the situation peacefully and privately. If he determines that there is no hope for an amicable resolution, he removes the carrot or applies the stick without preamble. The leader can do this because the subordinate already knows that he’s crossed the line. There’s no need for the leader to say, in effect, “You have one last chance.” Sure, the subordinate might not care and the leader’s assertion of authority might be meaningless. But he did it privately, on his own terms rather than in response to a final gesture of defiance by the subordinate: a defiance that the leader foolishly made possible and all too often encouraged by his behavior.

The ultimate result is the same, but the difference in perception is tremendous. In the case of the ultimatum, the leader is in effect saying “I will beat you into submission.” And when the confrontation ends with the subordinate still defiant, the leader is shown to be weak and ineffective. But the effective leader calmly saying, “You’ve left me no choice. I must institute the punishment,” the leader is seen as having done everything possible to resolve the situation, but regretfully had to drop the hammer. Even if the confrontation is public, if the leader remains calm and controls the situation he is seen as effective and the subordinate is seen as out of line. And the subordinate’s unconcern never comes into play because he’s never given the opportunity to make that last gesture of defiance.

Posted in Leadership | Leave a comment

The latest meme stock: DJT

During the meteoric rise of BitCoin in 2017, I wrote the following:


(Originally published November 28, 2017)

Gold Bitcoin Beanie Baby Bulbs

So, yeah, I’m not the first person to point out the parallels between the recent Bitcoin frenzy and the Dutch tulip mania of the 1630s. Nor, I suspect, am I the first to mention that Bitcoin’s meteoric rise bears shocking resemblance to:

I wasn’t around for the first of those, but I saw the others happen. I even lost a large part of my meager savings in the 1980 gold frenzy. Every one of these events saw people betting their futures on a “sure thing” that “can’t lose.” They were putting their entire life savings into it, borrowing heavily to gamble on a speculative market that seemed like it would just keep going up. And in every case, the bubble burst, wiping out savings in a very short period.

Those bubbles burst because investors flocking to the “can’t lose” scheme drove the prices to levels that were unsustainable. Early investors get in, ride the rise for a while, and then sell to new investors who want the same kind of trip. It becomes a positive feedback loop, until the price becomes too high to attract new investors. One day, somebody wants to get off and discovers that nobody wants to pay what he’s asking for his position. He decides to sell at a loss, at which point everybody else starts to panic and starts unloading as fast as they can, hoping to get out with something.

I don’t know enough about Bitcoin and other crypto currencies to say what, if anything, they’re actually worth, or if the idea of crypto currency has any long-term merit. But the the meteoric increase in Bitcoin prices over the last year, from $750 to $10,000, brings to mind those parallels, and a little bit more research reveals all the signs of a speculative bubble. The number of companies specializing in crypto currency trading has grown tremendously over the past year. There are “network marketing” schemes that pay you for “helping” others get in on the deal. New crypto currencies are popping up. People are borrowing money to invest. People are posting cheerleader messages (“Rah, rah Bitcoin!”) on social media. I’m seeing more hockey stick charts every day. “Look what it’s done in just the last three months!”

There may indeed be some lasting value to Bitcoin and other crypto currencies, just as there was lasting value in Beanie Babies. I saw some at a yard sale last week, going for about 50 cents each.


Proving once again that people looking for a quick buck never pay attention to past mistakes, we have invented “meme stocks,” the most memorable of which was GameStop. But I think the newest one, the social media company called Trump Media and Technology Group, will eclipse even that. This is the company that supporters of Donald Trump created after he lost the 2020 election and got kicked off of Facebook and Twitter for his actions. The new site, Truth Social, promising “no censorship,” was designed to prominently feature the insane ramblings of the Bumbling Buffoon, and users who contradicted his incoherent missives or said negative things about him were banned from the site.

The idea was always to create the site, create a shell company (a SPAC — special purpose acquisition company) to acquire it and take it public. The site of course had some trouble getting started and even today is mostly a joke. But they succeeded, after a lot of investigation by the SEC and others, in taking the company public. At a ridiculously inflated valuation and with a Trump-typical ticker symbol: DJT. I think the last public company the Buffoon in Chief formed was called TRMP. No surprise, it failed. But not after Trump bilked his investors out of their cash. I’m surprised he managed to escape that one without any criminal penalties.

Anyway, an “investment” in this new company is nothing more than a gamble. And not a very smart one at that. The company lost $49 million in the first nine months of 2023. Its total revenue–every dollar it took in–was $3.4 million. And yet the company is valued, based on the price of its stock and the number of shares outstanding, is something like $7 billion!

Yes, that’s right: the company’s market cap is 2,000 times its revenue, and the company is bleeding cash. Furthermore, the single largest shareholder is the Bumbling Buffoon himself, a person who has a history of taking “investors'” money, siphoning off enough to repay his own contribution, and running the company into the ground. At current prices, Trump stands to gain something more than $5 billion if the company lasts long enough and the stock price remains at its ridiculously inflated valuation. He can’t cash in immediately, though: there’s a holding period on his stock.

You couldn’t convince me to invest a single cent in any venture that’s associated in any way with Donald Trump, and even if the Prevaricator in Chief weren’t involved you couldn’t convince me to invest in a company that’s operating at a loss and is valued at 2,000 times its total revenue. In a rational world, the company’s stock would be trading at just that: pennies per share. What a scam.

Posted in Finance, Idiocy | Tagged | Comments Off on The latest meme stock: DJT

Let’s settle on a newline standard

We’re, what, 70 years into the “computer revolution?” By the late ’70s, we’d pretty much settled on one of two different character sequences to denote the end of a text file line. Either a single line-feed (LF) character, or a carriage-return/line-feed pair (CRLF). Well, there was the classic Macintosh that used a single carriage-return (CR), but that’s essentially gone: the Mac these days uses the LF.

The history of line endings is kind of fascinating in a geeky sort of way, but mostly irrelevant now. Suffice it to say that by the late ’70s, Unix systems and those descended from it used LF as a newline character. DEC’s minicomputers, and microcomputer operating systems (like CP/M and later MS-DOS) used CRLF as the newline. If you’re interested in the history, the Wikipedia article gives a good overview.

And so it persists to this day. To the continual annoyance of programmers everywhere. There are Linux tools that don’t handle the CRLF line endings and Windows tools that don’t handle the LF line endings. Everybody points fingers and seemingly nobody wants to admit that it’s a problem that would easily be solved if everybody could get together and decide on a single standard.

Having come up with early microcomputers running CP/M in the early ’80s, I actually used a teletype machine as an I/O device. That machine required a carriage-return to return the print head to the leftmost position of a line, and then a line-feed to advance the paper one line. Thus, the CRLF line ending. Printers, too, required CRLF to start printing on the next line. If you just sent an LF then you’d get something like this:

The quick red fox jumped
                        over the lazy brown dog.

Instead of:

The quick red fox jumped
over the lazy brown dog.

And if you just sent a CR, you’d get the second line printing over the first. (I suppose I could try to figure out how to do that with HTML/CSS in WordPress, or post an image, but I don’t think it’s necessary. I expect you get the idea. The result is a single physical line with overprinted characters.)

I’d sure like to see the industry settle on a single standard. I don’t have a strong preference. LF-only seems like the more reasonable standard, simply because it’s one less character. It’s not like many people talk directly to printers or teletypes anymore: that’s done through device drivers. At this point, the CR in the CRLF line ending is nothing more than an historical remnant of a bygone era. There is no particular need for it in text files.

Microsoft could lead this change pretty easily:

  1. Fund a development effort to modify all of the standard Windows command line tools to correctly handle both types of line endings on input, and provide an option for each command to specify the type of newline to use on output. With the default being LF.
  2. Modify their compiler runtime libraries to intelligently interpret text files with either type of newline. And to output LF-only newlines by default, with an option of CRLF.
  3. Fund a “newline evangelism” group that advocates for the change, writes articles, gives talks, and provides guidance and assistance to developers who are making the switch.

It’d cost them a few dollars over a relatively short period of time, but it would save billions of dollars in lost time and programmer frustration.

Posted in Software development | Tagged | Comments Off on Let’s settle on a newline standard

It’s not a First Amendment issue

Anybody who tells you that the two indictments of Donald Trump (one Federal and one in Georgia, see below for links) concerning his unsuccessful attempt to defraud the American people by overturning the results of a free and fair election are in any way, shape, or form First Amendment issues is lying to you. They’re either ignorant of what’s actually in the indictments or they know but they don’t want you to know.

Neither indictment is about punishing the Bumbling Buffoon for his well-documented tendency to lie through his teeth. Nobody’s saying that spouting bullshit is against the law, even if you know what you’re saying is false. What the indictments are saying is that the sitting President of the United States entered into a criminal conspiracy to illegally change the results of an election.

“But he really believed that the election was corrupt.”

I don’t believe that. But let’s say it’s true: that Donald Trump at the time really was (and, what the hell, still is) dumb enough or stubborn enough to believe, despite all evidence to the contrary, that there was, as the Federal indictment puts it, “outcome determinative fraud.”

That doesn’t justify entering into a criminal conspiracy to violate the law. It doesn’t excuse filing official documents that contain false statements or opinions asserted as fact, especially when those statements are not backed up by anything approaching solid evidence. It doesn’t excuse the use of intimidation to influence witnesses. It doesn’t exonerate the attempts to convince officials to violate their oaths of office. It doesn’t excuse the President of the United States for suggesting to his subordinates that they violate the law. Those actions are crimes–felonies–regardless of whether one believes that in committing them he is somehow “righting a wrong.”

This isn’t new territory. We don’t let somebody off the hook for murder because they thought the victim deserved it: “The court found him not guilty, but I know he did it.” We call that vigilantism and as far as I know it’s illegal everywhere in the country.

Trump and his defenders will have you believe that he’s being persecuted because he’s a threat to Democrats in the 2024 election. They want you to believe that these criminal indictments are products of a handful of overzealous anti-Trump prosecutors who’ll use any excuse to prevent him from being on the 2024 ballot. They want you to conveniently forget that both indictments are brought, not by the prosecutors, but rather by ordinary citizens–a grand jury that’s selected from qualified citizens in the jurisdictions that the indictments are brought. The prosecutors present evidence to the grand jury and the citizens vote to determine whether the evidence presented is sufficient to charge the persons in question with crimes. They’ve decided that, yes, there is sufficient evidence to accuse Donald Trump and his cabal of co-conspirators with crimes: that there should be a trial.

The Trump apologists, the “what about” crowd, and those who seek to minimize the gravity of the alleged offenses are not being honest with you. These indictments have nothing to do with First Amendment rights. The Federal indictment explicitly asserts the defendant’s rights to say what they please, regardless of the veracity of their statements.

Do yourself a favor: read the indictments yourself.

Federal Indictment

Georgia Indictment

Posted in Politics | Tagged , | Leave a comment

Trump apologists are lying to you

Prominent Republicans, whether they’re Trump supporters, apologists, or announced candidates for the Republican nomination are speaking out against Tuesday’s indictment of former President Trump. In doing so, they’re deliberately missing the point, trying to couch it as a First Amendment issue, or saying things like, “If Trump is guilty of incitement for the Jan 6 riot, then Schumer and Sanders should be held accountable for incidents, too.” See, for example, Scott Walker’s comments. Or Marco Rubio’s tweet:

“Apparently it is now a crime to make statements challenging election results if a prosecutor decides those statements aren’t true.

“So when should we expect indictments of the democrat politicians who falsely claimed Russia hacked the 2016 election?”

I have two points to make.

First, not one of the four charges in the indictment has anything to do with incitement to riot or violence of any kind. The argument made by Scott Walker and others of his ilk is a red herring. Whether Trump, Schumer, or Sanders is guilty of incitement or similar is a separate issue that should not be conflated with the subject of this indictment.

Second, this is not a First Amendment issue. Item 3 in the introduction to the indictment (the second page) says:

“The Defendant had a right, like every American, to speak publicly about the election and even to claim, falsely, that there had been outcome-determinative fraud during the election and that he had won. He was also entitled to formally challenge the results of the election through lawful and appropriate means, such as by seeking recounts or audits of the popular vote in states or filing lawsuits challenging ballots and procedures. Indeed, in many cases, the Defendant did pursue these methods of contesting the election results. His efforts to change the outcome in any state through recounts, audits, or legal challenges were uniformly unsuccessful.”

If you read the indictment (and if you’re forming an opinion on it without first reading it, how can you have any confidence that your opinion is at all realistic?), you’ll see that the charges are for conspiracy, obstructing and impeding an official proceeding, and interfering with citizens’ right to vote and to have their votes counted. Specifically:

Count 1: From on or about November 14, 2020, through on or about January 20, 2021, in the District of Columbia and elsewhere, the Defendant, DONALD J. TRUMP, did knowingly combine, conspire, confederate, and agree with co-conspirators, known and unknown to the Grand Jury, to defraud the United States by using dishonesty, fraud, and deceit to impair, obstruct, and defeat the lawful federal government function by which the results of the presidential election are collected, counted, and certified by the federal government.

Count 2: From on or about November 14, 2020, through on or about January 7, 2021, in the District of Columbia and elsewhere, the Defendant, DONALD J. TRUMP, did knowingly combine, conspire, confederate, and agree with co-conspirators, known and unknown to the Grand Jury, to corruptly obstruct and impede an official proceeding, that is, the certification of the electoral vote, in violation of Title 18, United States Code, Section 1512(c)(2)

Count 3: From on or about November 14, 2020, through on or about January 7, 2021, in the District of Columbia and elsewhere, the Defendant, DONALD J. TRUMP, attempted to, and did, corruptly obstruct and impede an official proceeding, that is, the certification of the electoral vote.

Count 4: From on or about November 14, 2020, through on or about January 20, 2021, in the District of Columbia and elsewhere, the Defendant, DONALD J . TRUMP, did knowingly combine, conspire, confederate, and agree with co-conspirators, known and unknown to the Grand Jury, to injure, oppress, threaten, and intimidate one or more persons in the free exercise and enjoyment of a right and privilege secured to them by the Constitution and laws of the United States—that is, the right to vote, and to have one’s vote counted.

The indictment clearly lays out evidence of those conspiracies, detailing how the defendant was instrumental in organizing and putting in place an illegal scheme to create fraudulent electors in an attempt to change the election result in his favor. An election that he knew, as shown by his own words, that he had lost. This indictment is not about the President lying. No, this indictment is about the President’s participation in a conspiracy to overthrow the U.S. government using lies, false accusations, and intimidation to enlist others and justify his illegal actions.

The key point here is that the President of the United States attempted to seize power for himself after losing an election that he knew full well was free and fair. Anybody who calls himself a patriot, who believes in the rule of law and the principles on which this country was founded, should be demanding that he stand trial and, if convicted, be imprisoned. Donald Trump, in his attempt to retain power after losing the election, acted like any other thug ruler in history. He does not deserve your, or anybody’s, support.

Posted in Politics | Tagged | Leave a comment

Initial thoughts on Trump indictment #3

I spent a large part of the day reading the latest indictment of Donald Trump, this one for his role in the fake electors scheme following the 2020 election, and then letting it marinate in my brain for a while. These are initial thoughts, subject to revision after another reading and more cogitation.

Donald Trump, while President of the United States, used his band of paid intimidators (Elite Strike Force Legal Team) in an attempt to convince or coerce ordinary citizens, state officials, state legislators, federal government officials, and even the Vice President of the United States to fraudulently overturn the results of an election. An election result that, by his own admission, he knew was legitimate. In almost every case, those whom he attempted to enlist in his fraudulent scheme refused, often incurring the President’s wrath. The President fired some and publicly called out others, resulting in many of them receiving death threats and other abuse from Trump’s supporters.

I find it quite interesting that the indictment focuses almost exclusively on Trump’s words: opinions he expressed. You can expect sympathetic individuals to latch onto that and make a big deal of it, especially in light of Monday’s court ruling that, read broadly, essentially says that the President’s words, even if they’re knowingly false statements intended to deceive, are protected by Presidential immunity. But the ruling does not assert blanket immunity. Judge Erdos, who issued the ruling, said:

Other legal proceedings may examine the propriety of his statements and actions while he was the President and whether, as the plaintiffs in this and other cases contend, it was this conduct which served as the actual threat to our democracy. But this case is not the proper place to do so. Here, Trump is entitled to Presidential immunity.

In my opinion, Jack Smith would not have issued the indictment on Tuesday if all he had was Donald Trump’s words. The almost complete absence in the indictment of evidence showing or even hinting at Trump explicitly directing his subordinates or hired thugs to break the law is a red herring. I suspect Jack Smith is holding that back for now and will dribble it out as necessary. I think if he didn’t have clear evidence of Donald Trump breaking the law or directing others to break the law, he would not have released this indictment.

In my mind, there are two separate issues here. The key issue, of course, and the only one relevant to the legal proceedings is whether Donald Trump broke the law. That’s something we won’t know until trial. The second issue, and the one that’s more important in my mind, is whether Donald Trump’s statements and behavior described in the indictment are true. A trial could very well reveal that, as the indictment alleges, Trump knowingly lied in order to retain his office. And yet the jury could find him not guilty of committing a crime.

Imagine that were to happen. Would people still support him? Despite knowing that Donald Trump is, as I have maintained, a liar, cheat, grifter, con man, etc. who consistently made false statements about non-existent election irregularities, made knowingly false accusations of misconduct against innocent Americans, tried to convince his subordinates and personal staff to fraudulently overturn an election result, ultimately culminating in a riot on January 6, 2021 by those who believed his lies. All while standing behind his alleged “immunity,” knowing that if his scheme failed, somebody else would take the fall for it.

I think every American, even those who would support Trump, should read that indictment and subject their beliefs to some serious consideration. I find it inconceivable that the breadth of evidence revealed in that indictment could be fabricated, that every witness who testified could be convinced to lie under oath. I hope that any honest thinking person, regardless of how dedicated they are to the fraud that is Donald J. Trump, would come away with some serious questions about the former president. Regardless of your political beliefs, is that really the kind of person you want at the head of our government?

Posted in Politics | Tagged | Leave a comment

Re-thinking the retry

(Originally posted October 30, 2018)

A common pattern used when communicating with external services is to retry a call that fails. Stripped of bells and whistles, the typical retry loop looks like this:

    result = makeServiceCall(parameters)
    numRetries = 0
    while !result.success && numRetries < MAX_RETRIES
        // insert delay before retry
        ++numRetries
        result = makeServiceCall(parameters)
    end while

    if (!result.success)
        // Raise error. 

We can quibble about the specific implementation, but the general idea is the same: make multiple attempts to get a success response from the service, inserting a delay between calls. The delay can be a fixed amount of time, an exponential fallback with jitter, etc., and you can include all kinds of other logic to improve things, but it all boils down to essentially the same thing.

Under normal circumstances, of course, service calls don’t fail, and this logic works very well. But if the service call failure rate increases, some very bad things can happen.

Imagine a critical service for which you have a contract (a service level agreement, or SLA) that guarantees an average 10 ms response time for up to 1,000 transactions per second (TPS). Remember, though, that this is a shared service. There are many other clients who have similar contracts: 10 ms response time for X TPS. Your application calls that service perhaps 900 times per second, on average. There will be brief periods when your call rate will exceed 1,000 TPS, but that’s okay because the service is scaled to handle large amounts of traffic from many clients. Say the service can guarantee that 10 ms response time for a total of 1,000,000 TPS from all of its clients, combined. Short-term bursts of excess traffic from a few clients aren’t a problem.

Even if calls to the service exceed 1,000,000 TPS, the likely result at first will be increased response time: perhaps latency increases by 50% with a sustained traffic increase of 10%, and doubles when traffic is 20% above the configured maximum. The specific breaking point differs for every service, but in general latency increases non-linearly with the call rate.

Clients, of course, won’t wait forever for a response. They typically configure a timeout (often two or three times the SLA), and consider the call a failure if it takes longer than that. Not a problem with this retry logic: just delay a bit and try again.

As I said above, this kind of thing works fine under normal conditions. But in a large system, lots of things can go wrong.

Imagine what would happen if the service starts getting 1,500,000 requests per second: a sustained 50% increase in traffic. Or one of the service’s dependencies can’t meet its SLA. Or network congestion increases the error rate. Whatever the cause, the service’s failure rate increases, or latency increases beyond the timeout value set by clients. Whatever the cause of the service’s distress, your application blindly responds by sending another request. So if your MAX_RETRIES value is two, then you’ve effectively tripled the number of calls you make to the service.

The last thing a service under distress needs is more requests. Even if your application is not experiencing increased traffic, your retries still have a negative effect on the service.

Some argue that services should protect themselves from such traffic storms. And many do. But that protection isn’t free. There comes a point when the service is spending so much time telling clients to go away that it can’t spend any time clearing its queue. Not that clearing the queue is much help. Even after the initial problem is fixed, the service is swamped with requests from all those clients who keep blindly retrying. It’s a positive feedback loop that won’t clear until the clients stop calling.

The retry loop above might improve your application’s reliability in normal operation. I say “might” because most applications I’ve encountered don’t actually track the number of retries, so they have no idea if the retry logic even works. I’ve seen the following in production code:

  1. A retry loop that always made the maximum number of retries, even if the initial call succeeded.
  2. Retry logic that never retried. That code was in production for two years before anybody realized there was a problem. Why? Because the service had never failed before.
  3. Retry logic that actually did the retries but then returned the result of the first call.
  4. Infinite retry. When a non-critical service went down one day, the entire site became inoperable.

As bad as it is that many programmers apparently don’t test their retry logic, even fewer monitor it. In all the applications I’ve seen with retry logic, only a handful can tell me how effective it is. If you want to know whether your retry logic is working, you have to log:

  • The number of initial calls to the service.
  • The number of initial call failures.
  • The total number of calls to the service (including retries).
  • The number of call successes (including success after retry).

From those numbers, you can determine the effectiveness of the retry logic. In my experience, the percentage of initial call failures to any service under normal operation is less than 1%, and retry succeeds in fewer than 50% of those cases. When a service is under distress and the initial failure percentage gets above about 10%, retry is almost never successful. The reason, I think, is that whatever condition caused the outage hasn’t cleared before the last retry: service outages last longer than clients are willing to wait.

For the majority of applications I’ve encountered, retry is rarely worth the effort it takes to design, implement, debug, test, and monitor. Under normal circumstances it’s almost irrelevant, maybe making the difference between 99% and 99.5% success rate. In unusual circumstances, it increases the load on the underlying service, and almost never results in a successful call. It’s a small win where it doesn’t matter, and a huge liability when it does matter.

If you have existing retry logic in your code, I encourage you to monitor its effectiveness. If, like me, you discover that it rarely provides benefit, I suggest you remove it.

If you’re considering adding retry logic to your code, be sure to consider the potential consequences. And add the monitoring up front.

Posted in Software development | Tagged , | Leave a comment

Rock Me Baby, ’til My Feet Come Off

Very early in our relationship, Debra and I got silly one night and were making fun of country music. I don’t know what prompted it but at some point I came up with a song title: “Rock Me Baby, ’til My Feet Come Off.” We couldn’t stop laughing. I know, it was one of those, “you had to be there” moments.

That was 30 years ago and I still think that somebody should come up with lyrics. It could be a hit!

I’ve been poking at Microsoft’s Bing Chat (powered by ChatGPT) and Google’s Bard recently, so I thought I’d see what they can do with that title. My prompt to each one was ‘write lyrics for a country song called “Rock Me Baby, ’til My Feet Come Off“.

Bing Chat

Here’s a country song called “Rock Me Baby, ’til My Feet Come Off”:

Verse 1: I’ve been working all day long My feet are tired and my back is sore I need someone to take me home And rock me baby, ’til my feet come off

Chorus: Rock me baby, ’til my feet come off Hold me tight and never let me go Rock me baby, ’til my feet come off And I’ll love you more than you’ll ever know

Verse 2: I’ve been waiting for this moment To hold you close and feel your love I need someone to take me home And rock me baby, ’til my feet come off

Chorus: Rock me baby, ’til my feet come off Hold me tight and never let me go Rock me baby, ’til my feet come off And I’ll love you more than you’ll ever know

Bridge: I don’t need no fancy things Just your love is all I need So come on baby, take my hand And rock me baby, ’til my feet come off

Chorus: Rock me baby, ’til my feet come off Hold me tight and never let me go Rock me baby, ’til my feet come off And I’ll love you more than you’ll ever know

Outro: Rock me baby, ’til my feet come off Rock me baby, ’til my feet come off.

Google Bard


(Verse 1) Rock me baby, ’til my feet come off
I’m so tired, I can’t stand no more
I’ve been working all day, and I’m beat
Just rock me baby, and make me feel complete

(Chorus) Rock me baby, ’til my feet come off
I’m so tired, I can’t sleep at night
I just lay there and toss and turn
And dream of being rocked in your arms

(Verse 2) Rock me baby, ’til my troubles are gone
I’m so worried, I can’t catch my breath
I’ve got a lot on my mind, and I don’t know what to do
Just rock me baby, and make all my troubles new

(Chorus) Rock me baby, ’til my feet come off
I’m so tired, I can’t sleep at night
I just lay there and toss and turn
And dream of being rocked in your arms

(Bridge) Rock me baby, ’til I can’t feel my bones
I’m so worn out, I’m just about gone
But I know that if you rock me long enough
I’ll be all better, and I’ll be able to go on

(Chorus) Rock me baby, ’til my feet come off
I’m so tired, I can’t sleep at night
I just lay there and toss and turn
And dream of being rocked in your arms

(Outro) Rock me baby, ’til the morning light
I’m so tired, I can’t see the night
Just rock me baby, and make me feel all right
I’ll be your baby, and you’ll be my knight

Well of course they’re terrible. But then, it’s country music.

I don’t think music writers have anything to worry about quite yet . . .

Posted in AI | Tagged , , | Leave a comment

No, AI won’t take your job

I can’t tell how serious writers and actors are about their concerns with AI. They’re asking for some unspecified safeguards on the use of AI, or regulations, or something. In general, some language to assure them that their jobs will not be taken over by “AI.”

I think it’s ridiculous, but perhaps I’m attributing to the writers and actors things that have been overblown by the media or by the general public’s hysterical reaction to anything that somebody calls “AI.” Or algorithms in general. As far as all too many people are concerned, any “algorithm” is automatically evil and out to do us harm.

I base my ridicule on three things. First, people have been protesting new technology since the dawn of new technology. Two hundred years ago, the original Luddites destroyed equipment in textile mills in protest of automation, but they weren’t the first to protest automation. Strangely enough, the machines didn’t put them out of work. And yet protests against automation were common throughout the industrial revolution and continue to this day. Computers, for example, were going to put armies of clerical workers out of a job. But now, 70 years into the computer revolution, there are more clerical jobs than ever. There are cases in which automation has made certain jobs irrelevant, but it doesn’t happen overnight. And there continues to be need of the replaced skill for some time.

Second, the idea of artificial intelligence replacing a journalist, screenwriter, actor, programmer, or any other skilled human is laughable. As I’ve mentioned before, ChatGPT (which I think is what has gotten everybody up in arms) and similar tools are just mimics: they rearrange words in a blender and spit them out semi-randomly, following rules that dictate the form, but with no regard to substance. And that’s just regurgitating stuff that’s already known. Attempts at AI creativity–having the computer create something novel–are comically terrible. The idea of a generative AI replacing a human writer just isn’t realistic. Certainly not within my lifetime, and likely not within the lifetime of anybody born today.

Third, if somebody does develop an AI that can produce objectively better news stories, movie scripts, novels, acting performances, computer programs, etc. than a human, then more power to them! As long as I’m informed or entertained, I don’t particularly care who or what created the article or the performance. We all benefit from better expression of ideas, and those whose skills are better performed by artificial intelligence will either find something else to do that is not yet AI-dominated, or will be able to peddle their skills in a smaller and often more lucrative market. For certain, any actor who’s pushed out of the big studios by this future fanciful AI will have plenty of opportunity in smaller studios that can’t afford or don’t want to use AI technologies.

Yes, there is some justifiable concern that studios will use currently available techniques, and new techniques going forward, to unscrupulously manipulate an actor’s voice, image, or performance to say things that the actor never intended or agreed to. We’ve all seen those agreements that allow the companies to use our likeness in any way, shape, or form, in perpetuity. Those types of clauses should have been eliminated from contracts decades ago, and I support those who are trying to address that situation now. But beyond that, the fears about AI replacing skilled workers, especially skilled creatives, are unfounded.

Posted in AI | Tagged , , , , | Leave a comment

Credit scoring is a scam

I do a quick check of my credit score approximately on a monthly basis. I’m not sure exactly why I do that, considering that I’m comfortable financially, my life is pretty much the same it’s been for some time, and I don’t foresee any major changes.

I have one credit card, and a five year auto loan that has about a year and a half left. That is the extent of my outstanding credit. My monthly purchases on the credit card fall within a very narrow range and I pay it off every month. The auto loan is current and I’ve never been late with a payment.

Given the above, one would expect my credit score to remain the same, with a few minor fluctuations on a month-to-month basis depending on how much I charge on my credit card. And it does, mostly. But in the last month my credit score dropped 32 points (almost 4%), and I have no idea why. There have been no recent inquiries, no new accounts, no missed or late payments, and the outstanding credit card balance is within the normal range of what I charge on a monthly basis. In short, nothing has changed.

At least, nothing on my side of the equation has changed. Whether something has changed in the way the Vantage credit score is computed is an open question. It’s an open question because only the people computing the credit score know how it works. We’re being graded on hidden criteria. The scoring system is proprietary. Most of us who are affected by it have no way of knowing how our scores are computed or how our individual financial decisions will affect that score. And yet, credit score is a huge determining factor in one’s ability to get a good rate on a house or car loan–or to obtain a loan at all.

Sure, we know some general rules: don’t have “too much” available credit or use “too much” of it. Don’t have “too many” inquiries or open “too many” new accounts. But be sure to have “enough” available credit and be sure to use “the right percentage” of it to show that you know how to handle the responsibility. And be sure to have a first mortgage because that shows your ability and willingness to handle long-term credit commitments.

You paid off your home mortgage? Shame on you! We’re gonna subtract points because “you don’t have enough experience with a first mortgage.” That’s right, paying that 30-year loan off in 20 years is a bad thing.

There are general guidelines (Vantage, for example, says that I should have at least $50,000 in available credit and using up to 10% of it is “Excellent”, which is ridiculous), but there’s no hard detail that says exactly what the grading criteria are and how they interact. As far as consumers are concerned, a bunch of numbers go into a black box and the MagicScore™ comes out. We don’t get to know how it all works, and apparently we’re not even told if the innards change and suddenly we’re being graded completely differently.

In a just world, we’d at least know how the score used to decide whether we get a loan, and at what rate, is computed. I realize that credit score isn’t the only determining factor, but it can be a deal killer (i.e. everything else looks good, but the MagicScore™ is off).

I’ve long held that credit scoring, as currently practiced in the United States, is essentially arbitrary. Incidents like my score’s recent drop, with no indication of why it dropped, strengthens that perception. The companies that market the scoring systems (Vantage is a joint effort of the three major credit bureaus, FICO is a product of the Fair Isaac Corporation) and the financial institutions that use them, seem to have absolutely no desire or incentive to tell us how the scoring works. And consumers have nowhere else to go: buy into the credit score scam or go visit Guido.

Posted in Finance | Leave a comment