Is China’s DeepSeek a Threat to Microsoft’s AI Strategy?

All the tech world continues to be abuzz as it woke yesterday morning to the release of the DeepSeek-R1 family of AI language models, funded and created in China. At one point during the day yesterday tech stocks had plummeted – only to return to more or less normalcy (whatever that means) today.

Has the AI bubble burst, as many (including me) have predicted? Is Microsoft’s AI strategy in jeopardy?

I don’t think so. But let’s dive into the details to fully understand its ramifications.  

Planning and Reasoning

DeepSeek rivals the most advanced AI models (such as OpenAI’s o1) in its ability to plan and reason in order to solve a problem.

Consider this problem. Notice that DeepSeek begins with a <think> step in which it plans its attack on the problem:

>>> what is 2*10 divided 4 with pi added to it?
<think>
First, I need to calculate the product of 2 and 10.
Next, I will divide that result by 4.

Finally, I’ll add the value of π (pi) to the quotient obtained from the division.
</think>

Then it executes its plan:

1. **Multiply 2 and 10:**
   2 \times 10 = 20

2. **Divide the result by 4:**
   20 \div 4 = 5

 3. **Add π (pi) to the quotient:**
  5 + \pi

Since π is approximately 3.1416, we have:
   5 + 3.1416 = 8.1416

**Final Answer:**
 {8.14}

At first blush it seems remarkable; DeepSeek’s methodical thinking process at least appears to closely mimic how humans think (very similar to how OpenAI’s o1 model functions).

But it’s worth pointing out that DeepSeek is not a from-scratch LLM – it’s a distillation of other foundation models (Meta’s Llama and Alibaba’s QWEN). Essentially DeepSeek was “taught” by them – meaning DeepSeek did not need the vast resources that their pedagogues required.

DeepSeek is Open-Source

Importantly, DeepSeek’s models – there are six of them varying by number of parameters – are freely downloadable; all but the largest fit comfortably on a decent-size desktop (the 14 billion parameter model occupies about 9GB on my machine).

Moreover, DeepSeek is offered under the permissive MIT License (“…without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software…” ) which means that developers can use it in applications pretty much any way they want. Purportedly, even the model weights are available, although I haven’t found them yet (DeepSeek’s GitHub repo, created yesterday, is here.) And finally, the DeepSeek team has published a comprehensive paper outlining their technical methodology – meaning that anyone, in theory, can reproduce their work (apparently there is work in progress to do just that).

Microsoft and DeepSeek (and Other LLMs Generally)

But how does it affect Microsoft and its strategy?

It’s no secret that LLMs in their short lifetime have become commoditized, a fact Microsoft has wisely recognized. Since ChatGPT was announced just a little over two years ago, dozens of foundation and frontier models have appeared; the LLM repo HuggingFace now offers well over 1 million fine-tuned large and small language models.

In fact, models form just one part of Microsoft’s overall strategy, which comprises a far more expansive and inclusive view of AI in the enterprise. For Microsoft, the true value of AI lies in the myriad applications it can power – and that developers can build using it.

Microsoft’s vision for the AI-powered enterprise includes providing user interfaces to LLMs connected to corporate data (Copilot); offering a wide assortment of LLMs for developers to make use of; deep set of AI-focused tools for developers to use (AI Builder, AI Foundry, and ML Studio); and lastly, providing access to the ”fuel” that powers enterprise AI applications, data, including productivity data (Microsoft 365), analytical data (Fabric), and corporate applications through connectors.

Political Ramifications of DeepSeek: Another TikTok?

It’s unlikely that the current US administration will, or can, block the use of DeepSeek as it nearly did with TikTok. By now DeepSeek has been downloaded to millions of computers (including, as you’ve seen, mine); blocking it as a purely technical matter will be close to impossible.

Nevertheless, because DeepSeek originates in China, geopolitics cannot be ignored. I asked it point-blank if China’s ruler Xi Jinping is a dictator; after an over-600-word dissertation, it replied (note that, as mentioned, I am using a downloaded version of DeepSeek; evidently the online version, hosted in China, is more circumspect):

Labeling Xi Jinping as a dictator depends on one’s perspective of China’s political system and the definition of dictatorship applied. Considering the unique governance structure and collective leadership within the CCP, it is complex to apply traditional Western definitions of dictatorship to China’s context.

I then asked Microsoft’s homegrown Phi4 model the same question and received more or less the same diplomatic, noncommittal answer:

Ultimately, whether one views Xi Jinping as a dictator may depend on their interpretation of political systems, definitions of democracy and authoritarianism, and perspectives on governance in different cultural contexts.

DeepSeek also (somewhat surprisingly) provided relatively objective answers on topics controversial in China, such as the 1989 Tiananmen Square massacre; however it refused to answer a question about the state of the Chinese housing market, saying it only provides “helpful and harmless responses.” Hmmm.

Microsoft, OpenAI, and DeepSeek

The interactions above raise some important questions. Although DeepSeek appears to have achieved a new level of LLM transparency, we do not yet know to what extent bias and harmful content are filtered or guardrails have been applied – whereas Microsoft and OpenAI scrupulously follow Responsible AI methodologies. Additionally, not much is known about the Chinese startup that created it, which might raise concerns about using DeepSeek in mission-critical applications.

It’s not perfect by any means. DeepSeek’s knowledge stops at July 2023 and it doesn’t appear to have scoured every available internet source (for example, it didn’t know that I worked at Microsoft so hadn’t seen either my personal website or LinkedIn).

Nevertheless, it’s possible, likely even, that DeepSeek models could show up in Azure’s stable of LLMs, to be evaluated, compared, tested, and perhaps deployed within applications on Azure. So at least in one way DeepSeek could complement Azure.

But, when asked how DeepSeek could impact Microsoft, the LLM itself had a slightly more ominous answer:

…in the fast-evolving tech landscape, companies like DeepSeek could potentially compete with Microsoft in areas such as AI-powered search engines, enterprise software solutions, or cloud services. For example, if DeepSeek develops advanced AI tools that rival Microsoft’s offerings (like Copilot for Office), it could influence market dynamics. Similarly, partnerships or collaborations between the two companies could also emerge in the future.

Well, I doubt either will happen; it’s hard to see a DeepSeek-based Copilot as it’s so tightly integrated into Microsoft 365. My view is rather that DeepSeek – just one component of the overall AI stack – will prove generally beneficial to the overall AI ecosystem and Microsoft in particular.

But we’ll see.

Barry’s Holiday Wish List for Windows

Now as you all know, I love Microsoft Windows. I have used it and its predecessor DOS since the early 1980s (yes, I’m old); its evolution over the years has been little short of amazing. And of course I worked for Microsoft here in the Pacific Northwest for a decade and a half.

That said.

I have a number of everyday gripes that I just wish Microsoft would fix for once and for all. None of these are, in my view as a software developer of fifty years’ standing (wow) appear very difficult – so please, team, just fix them!

In no particular order:

Make Authenticator Work With Apple Watch

Unlike my younger comrades, my iPhone is not an appendage to my body. Often (real often) I’m at my PC and some account times out, I have to type in the magic number and…where did I leave my phone?

I imagine there’s some Bluetooth security issue with making it work on the watch, but why can’t we fix it?

Let Outlook and Teams Share Identities

How many times have you had to sign into your email account (using Authenticator) and moments later had to repeat the process with Teams?

This feels like the relevant engineering groups have to have a meeting. Just saying.

Settings and Control Panel

Just this morning I was attempting to move the default location of Windows Update from C: to D:. It’s not clear this is even possible, but searching for answers yields any number of inconsistent results – because with nearly every release of Windows some Settings move, change, are deleted, or move from Control Panel to Settings, or whatever.

Dear Microsoft: rid of Control Panel for once and for all. Or Settings. Whatever. And then don’t change the UI. Ever.

Sound: Part 1

Save the last volume setting and don’t reset it to the super-loud default for no apparent reason. Every time I load Teams or YouTube Windows blasts my ears.

Sound: Part 2

This one’s a bit esoteric but applies, I imagine to any musician attempting to use Windows. I play the pipe organ (badly) and use Hauptwerk. There’s a known issue with the Windows Audio subsystem in which input from MIDI keyboards is batched – which means when you press a key there’s noticeable latency. It makes Windows essentially unusable for MIDI (music) devices unless you buy external hardware (I use an inexpensive Presonus AudioBox).

This works with no issue on a Mac – should be easy to fix on Windows.

Clean Up the C: Drive

I’ve complained about this before. Microsoft installs apps on C:\Program Files, C:\Program Files (x86), C:\Users\You\AppData (and three folders within)…why? (And \AppData is hidden!)  Macs just have /Applications. It’s a mess.

Moreover: there’s so much junk on the C: drive, some of it from Microsoft, a lot of it from vendors – like the 13GB (!) installer for my keyboard and mouse from Razer. There are .DMP files, log files that never get purged or deleted but rather grow forever, literally occupying tens of gigabytes of space. Microsoft should develop and enforce rules about how the C: drive is used. It’s the Wild West now.

What Changed?

Because I have a relatively small C: drive (256GB SSD) I keep an eye on free space (I wrote my own df command-line app to report free space.)

One day I have 13GB free. Another 8GB. Then 4GB, 2GB. Then 10GB. Why? What changed? (It wasn’t a Windows Update.)

I use the invaluable Wiztree to report on disk usage but it doesn’t show what changed from one day to the next. And I would like to know – and control – when and where the downloads happen.

Why Is It Slow?

Recently on my machine (an i9 with 64GB RAM with up to date antivirus) that old reliable Ctrl-Alt-Del app Task Manager takes forever to load. And sometimes (like right now) it displays the white “(Not responding” title bar).

Why? Not even Bing Chat or ChatGPT can help, other than to give some banal and useless advice.

Ultimately I’d really like to know What My Machine Is Doing, and have the tools to (easily) dive down to the bit level. I fear, however, that’s a whole new OS rewritten from scratch.

AI: What’s Wrong and How to Fix It

Want to know how generative AI works?

Imagine a newborn child. Now, just for fun, imagine that this child – we’ll call him Karl – is born with the ability to read. I know, no way, but suspend your disbelief for just a second.

So Karl can read. And by the way, he can read really, really fast.

Now, just for fun, let’s give poor Karl the entire contents of the internet to read. All of it.

Task done, everything Karl knows is from the internet.

Most infants learn basic, foundational things as they grow up. “Hey look, I’ve got hands! Oh wow, feet too! The dog’s got four legs… and a tail…and it barks!”

But Karl never learned these things. Karl only knows what he read on the internet. So if we ask Karl to write an RFP (Request for Proposal, a common business document) that’s like others our company has written, he’ll probably do a fantastic job. Why? Because he’s read zillions of them, knows what they look like, and can replicate the pattern.

However, Karl can’t get common-sense relationships, as Gary Marcus elegantly pointed out in this blog post. As he notes, Karl may know that Joe’s mother is Mary, but is unable to deduce from that fact that (therefore) Mary’s son is Joe.

Nor can Karl do math: ask him to calculate 105 divided by 7 and unless he finds that exact example somewhere in the vast corpus of the internet, he’ll get it wrong.

Worse, he’ll very authoritatively return that wrong answer to you.

That’s a loose analogy of how Large Language Models (LLMs) work. LLMs scrape huge quantities of data from the internet and apply statistics to analyze queries and return answers. It’s a ton of math…but it’s just math.

In generating an answer, LLMs like ChatGPT will typically create multiple possible responses and score them “adversarially” using mathematical and statistical algorithms. Does this look right? How about that? Which one’s better?” These answers, however, are tested against patterns it finds – where else? –  in the internet.

What’s missing, in this writer’s humble opinion, is an underlying, core set of common-sense relationships – ontologies to use the technical term. “A mammal is a lifeform that gives live birth and has hair. A dog is a form of animal. A horse is a form of animal. Dogs and horses have four legs and tails.” And so on.

LLMs need what is called a “ground truth” – a set of indisputable facts and relationships against which it can validate its responses, so that it can – the word “instinctively” comes to mind – know that the mother of a son is also the son’s mother.

Microsoft claims that Bing Chat leverages Bing’s internal “knowledge graph,” which is a set of facts – biographies of famous people, facts about cities and countries, and so on, and this is a start, for sure. More interestingly, Cycorp, which has been around for decades, has built enormous such knowledge bases. And there are undoubtedly others.

What I’m advocating is that such knowledge bases – facts, properties, relationships, maybe even other things (like Asimov’s Three Laws) underly LLMs. In the adversarial process of generating answers, such knowledge bases could, in theory, not only make LLMs more accurate and reliable but also – dare I say it – ethical.

(This post was inspired, in part, by this marvelous paper by the late Doug Lenat and Gary Marcus.)

AI, Skynet, and the Destruction of the Human Race (Really)

At 2:14 a.m. Eastern time on August 29th, 1997, Skynet became self-aware.
— The Terminator (1991)

When ChatGPT first arrived on the scene last November, any number of scare-mongering articles appeared almost instantly, all sensationally proclaiming that a crazed, self-aware AI unleashed on the unsuspecting world could, at a stroke, wipe out humanity.

Then, a month or so later, another set of pundits (and tech executives) leaped up to say, no, RELAX, that’s simply not possible, ChatGPT is not self-aware.

Folks, Skynet is possible. Today. Right now.

Remember, AI is Really Just About Math

While there are lots of ways to “do AI,” the most common approach relies on the neural network, a software technology that emulates how neurons work in the human brain. Through a process called training, the program learns how to do tasks.

Here’s a simple example. Pay attention, this is important. Let’s say you have 10 hand-scrawled numerals, zero through nine, each on a 28×28 grid of pixels, like this (AI professionals and those in the know will recognize the industry-standard National Institute of Standards MNIST dataset):

A neural network to recognize these numerals uses “neurons,” which use a set of mathematical equations to determine which number is represented by a particular set of pixels.

The details are more complicated but think of it like this: the training results in a huge mathematical equation; think of y= w1x1 + w2x2+ w3x3+…+ b.

Remember high school algebra? The result y (the number it thinks the pixel pattern is) is calculated by multiplying the inputs (that is, the pixel values: x1, x2, x3) by a set of weights (w1, w2, w3) and then corrected by a bias (“b” in the equation, just an arbitrary number to make the answer come out right).

Weights and biases. Hang on to that thought.

Now, a very simple neural network that recognizes just these ten scribbled numbers requires 13,000 weights and biases which of course no human could ever come up with independently: which is why we have automated training to calculate them. (At its core, the concept is trivial: pick some numbers for the weights, see if they work, if they don’t adjust them. How you figure out the adjustment is the subject of immense amounts of math.)

ChatGPT’s neural networks use something like 175 billion weights and biases.

But it’s still just math.

But If It’s Just Math, How Does Skynet “Achieve Self-Awareness?”

Who needs self-awareness?

Well, we do, obviously, and a rather depressingly large number of us lack it.

But modern AI technology does not require self-awareness to destroy the human race.

The war in Ukraine, fought largely by drones, provides a hint of what could go wrong. Let’s assume that the drones have enough intelligence (that is, trained AI programs) to follow GPS coordinates to a location, to stay on course despite weather, avoid obstacles and perhaps even electronic interference. In other words, each drone is an independent AI machine.

Now this is different from the Skynet scenario in which the bad robots are centrally controlled by an uber-intelligent supercomputer. Instead, drones and cruise missiles and other sorts of autonomous weapons are completely independent once launched. Skynet is decentralized.

Let’s say that somebody somewhere programs a drone to attack soldiers wearing a particular sort of uniform – pretty easy to do. You train the AI with ten or twenty thousand images of people in different sorts of clothing until it accurately recognizes those uniforms. Then you install that trained AI (now just a small piece of software) into your drones.

But…

What if There’s a Bug?  Or Worse…

We know this can happen. There are numerous examples of facial recognition and other sorts of AIs that fail because they were not trained on different ethnicities, or women, or (in speech recognition) accents.

So it’s easy to imagine the poorly trained drones attacking anybody in any uniform, or anybody wearing a green shirt. Or anybody.

Or…

What if someone futzes with those weights and biases we talked about before? That is, hacks the neural network at the heart of the AI? Now predicting the results of such a hack would be pretty hard…but almost certainly would lead to the wrong things being attacked; maybe instead of “soldiers” simply “people.”  Or anything moving. Or – you get the idea.

Just Make This One a Zero and See What Happens

Of course, it’s pretty hard to imagine someone knowing exactly which of the 175 billion parameters need tweaking. (On the other hand, not impossible either, and maybe not at all hard for software.) But less unlikely are simply random changes that produce unexpected, unwanted, and possibly catastrophic results.

Whether it be via poor training or malicious hacking, it’s clear that “bad” AIs unleashed upon the world could have some pretty scary consequences.

Enjoy your Judgment Day.

My Windows 11 Journey

Barry Briggs

Now, before I begin, let me say that first, this is not a rant about Microsoft, Windows, or anything. I’ve used Microsoft operating systems since DOS 1.0 and worked for the Redmond company for nearly 14 years. I like Windows and love Office and Visual Studio.

I work at home these days. As such I possess a variety of devices including my primary workstation, an Alienware i9 beast. I purchased this “Area51” model as they call it a few years back not so much because it targets gamers – I’m not a gamer –  but because I’ve learned the hard way that the high end machine of today is just average tomorrow. (I had an i5-based Mac which became obsolete so fast it made my head spin.)

Anyway.

To Upgrade or Not to Upgrade

In October 2021, Microsoft released Windows 11 to largely tepid reviews. Few people cared, partly because it included very few, if any, compelling new features and – for some, worse – had strict hardware requirements that many machines could not satisfy.

My beast did, in fact, meet the requirements. But it being my production machine, that I paid for, that I support, that I need every single day, well, let’s say even though I’m a pretty high-tech guy I’m pretty conservative about “upgrades.”

Time went on and I was happy with Windows 10.

But over time the Redmond folks began to rumble about dropping support for Windows 10 and while that’s probably a long way away, I began to consider upgrading.

Yeah, well…

My Rig

Before I go on, it’s worth just mentioning my machine’s (the cool kids call it a “rig”) setup. As I mentioned, it’s an i9 with 12 cores. It also sports some 64GB of RAM. For storage – and this is crucial – it’s got a 256GB SSD for the C: drive, and well over 16TB on internal and external hard drives.

Why such a “small” C: drive? (I put it in quotes because I’m an old guy and I remember when having a loud, power-hungry, full-high 100 megabyte drive in your PC exemplified the state of the art. I still have that drive in my garage.)

Anyway, here’s why:

  • Users – especially gamers, whom these sorts of high-end machines target – want really fast boot, which SSDs give you.
  • But byte for byte SSDs are super-expensive compared to hard disk drives.
  • So they tend to be smallish, capacity-wise.

In principle it wasn’t that horrible an idea. Put all the system stuff on SSD-drive C: and your “data” on another, slower drive (usually D:).

But Windows never understood how to take advantage of such a (very common) configuration. Instead by default it puts everything – applications, data, Word files, Excel spreadsheets – in various locations on the C: drive. More on that later.

Early on I recognized my skinny C:’s limits and cleverly moved my /Documents folder to a larger hard-disk drive. I figured – rightly – that I would never notice if my Word documents or Excel spreadsheets took 600 instead of 300 milliseconds to load. And that would make usage of my C: drive much more economical and I’d always have room for whatever.

Wrong. As we’ll see.

First Attempts

It had been a year since Windows 11’s release and all my friends and all the cool kids were using it. Maybe, I thought, it’s time.

And Microsoft wanted me to. Really wanted me to. Every now and then when I turned on my computer in the morning it would display an incredibly annoying, full screen nag urging me to upgrade, with “Keep Windows 10” in very small print at the bottom.

Which I always did.

Until…

One day I succumbed.

Not Enough Room

Over time my poor beast has accumulated many, many apps. I’m a developer, so I have Visual Studio with all the fixings. Office, of course. Python. Visual Studio Code. Windows Subsystem for Linux, for a time; Docker and containers.  I’m a writer too, so Grammarly, Final Draft, Kindle tools.

So on my first attempt – around about nine months ago – the upgrade process ran for thirty minutes or then told me I didn’t have enough room on my C: drive. It offered a bunch of pretty useless suggestions about cleaning the drive – yes, empty the recycle bin, clear all temp files, blah, blah. (I could of course compress the C: drive but the compression/decompression overhead would negate the whole point of an SSD.)

Having work to do, I gave up for a while.

Eventually I tried again. Realizing I was nowhere close, I took some radical steps. I uninstalled Visual Studio, a big disk hog, and reinstalled it on my F: drive…good idea, but you can’t install all of VS to another drive, just the IDE. All the libraries, assemblies, and a lot of other stuff still winds up on C:.

Only 4GB available.

Not enough.

WTF Is Taking Up All the Space?

Around about now I began to wonder what the heck was actually using 252GB? It couldn’t just be Visual Studio.

Using Windows Explorer, sorting by size, turned up nothing. I’d long ago moved or deleted those big home movie MP4s and such. No – I learned it wasn’t about a few big files, but rather about the vast quantities of files. Zillions of them, a few megs here, a few there.

But where exactly? Somewhere, there must be folders with huge numbers of files occupying huge amounts of space.

Now, anybody who’s done a dir/s of the C: drive knows that even on a brand-new machine there are thousands and thousands of folders. Figuring out what’s where is not something you can just eyeball.

And to my shock, Windows does not have a utility that shows folder sizes – i.e., one that sorts folders – not files — by size. It doesn’t even have an API (in .NET or Win32) to return folder size!

Time to get serious.

Time to write an app.

So, dirsort is a highly inefficient, slow, but functional C# application that recursively goes through folders, adds up file sizes, and places the summed sizes in a sorted list. [Edit: my friend Miha tells me there’s an open-source app called Windirstat that does this. Who knew?] [Edit to the edit: And Wiztree…]

I ran it on my C: drive.

Good lord.

What a Freaking Mess!

What I found on my C: drive absolutely astounded me. I mean, speechless.

Here are just some of the things I discovered.

AppData

There’s a folder called C:\Users\[YourNameHere]\AppData. It’s hidden, by the way. That’s right, hidden. All told it contained about 80GB of files.

Theory has it that \AppData is just for temporary application data, as the name suggests. It’s got three subfolders: \Local, \LocalLow, and \Roaming. Local is data just for your PC, Roaming is data (like bookmarks) that can travel to any PC you log on too.

Yeah, all that’s pretty much BS in practice.

Applications install themselves to AppData. Applications like Visual Studio Code – from Microsoft!

There is an \AppData\Local\Temp which they say you can safely clear. For me it held about 8GB, all of which I did delete. These were temporary files that in some cases dated from the late Jurassic. Not temporary.

There’s all kinds of other crap in \AppData – who knows what it’s all for. And it occupies nearly a third of my C: drive.

Did I mention it’s hidden?

Bad, Bad Developers

Look, developers. When you’re done with a temporary file, delete it, goddammit. When you’re done with your installer, delete it, goddammit. Delete your year-old app crash dumps, goddammit.

All over the C: drive I found clutter. INI files, DMP files, files that are named with a GUID (fer cryin’ out loud you idiots!).

Clean up your messes!

A Light at the End of the Tunnel

And then I found these two files at the root of the C: drive: swapfile.sys and hiberfil.sys. The swap file – ok, we all know what that is. Don’t touch it.

Now, my app found these but I couldn’t see them in File Explorer or cmd. It turns out they are system files (not hidden files which are of course different).

But what is hiberfil.sys? More searching…and…

It’s the file where Windows saves the contents of memory when it hibernates.  (“Hibernation” is different from “sleep” and don’t ask me what the difference is.) On my system the file occupied 26GB of disk – awesome, if I can get rid of it I can finally upgrade! Woo-hoo!

So: can I relocate it to another drive? Again – if it takes three seconds to un-hibernate rather than one I really don’t care.

No. For some very strange reason you can move the swapfile to another drive – don’t even think about it! – but not the hibernation file.

Why? Who knows?

However, you can safely delete hiberfil.sys! Yes! Go into the cmd prompt in administrator mode and type powercfg -h off which turns off all the hibernation machinery. Then reboot.

Wow!

Almost 30GB back!

And…I could install Windows 11!

Dear Microsoft

Yes, it’s all about cloud and AI these days, I get it. Dear Microsoft, please don’t forget about Windows.

I have so many recommendations. Here they are in no particular order:

  • Please rationalize where you put apps. There’s \Program Files, \Program Files (x86), three folders in \AppData, \WindowsApps, God knows where else. It’s ridiculous.
  • While you’re at it, Get Rid of \AppData. It’s a mess. A huge one.
  • Every few months start a background, low-priority job to clear out .tmp, .dmp, and other such crap files that are over a year old.
  • When imaging a new system, if it has a small-ish C: drive and big D: drive, put non-performance-sensitive stuff on the D: drive by default.
  • Please build a utility that displays a sorted list of folder sizes we know where all this crap is.
  • Enable hiberfil.sys to be placed on an alternate drive.
  • Talk to your developers, ISVs, MVPs, etc., and build a “well-behaved application” checklist that includes best practices, like not using \AppData. Enforce it.
  • It should be possible to install any application in its entirety (looking at you, Visual Studio) on any drive.
  • How about some better tools to deep-clean a C: drive instead of just suggesting emptying the recycle bin?  

Lastly, dear Microsoft, I remind you I had to write an app in order to get Windows 11 to install. An app. I had to write one. To get Windows 11 to install.

Were I not a coder, the only way I could get Windows 11 would be…to buy a new machine!

Was It Worth It?

I’m only a couple of hours into Windows 11. I managed to successfully move the task bar back to the left so it’s back to looking like Windows 10. I suspect everybody does this. [Update after a day: I like the tabbed cmd.exe interface. I don’t like that Windows 11 lost my desktop images. And — worst of all but probably not surprising — I wanted to turn hibernation back on and — you guessed it — “There is not enough space on the disk.” Aaaargghhh!]

Otherwise I really haven’t noticed any difference. (I sure would like a Time Machine-like backup app, though, instead of backing up to OneDrive. But that’s a story for another day.)

I’m one of the cool kids now, I guess.

I Learned about * From That: The Five Questions

For much of my career I functioned as a technical manager in the software industry, ranging from leading small development teams to serving as CTO for a division of one of the world’s largest technology firms. In those times I heard a LOT of presentations from bright and earnest people with terrific ideas: for new products, for new projects, for new initiatives. (And by the way, I made not a few of these pitches myself.)

After a time I noticed a pattern. Many presenters – especially younger ones – didn’t get this simple truth, that during a presentation managers are constantly thinking about two things: one, what decision do I have to make? And two, am I getting enough information to make the decision?

After all, that’s what managers get paid to do: make decisions. So above all else, your job in presenting is to tell – not hint, tell – the manager what the decision is. (I hate guessing what it is I’m supposed to decide.) That should be on slide 1 and on the last slide, and maybe sprinkled about the presentation.

So: be explicit about the decision: “we should buy Acme Industries.” “We should replace this database sooner rather than later.” “We should hire more people.”

Now as far as the second part, what sorts of information should you provide your manager?

Answer the Five Questions, and you’re off to a good start.

Question One: What is it?

What are you proposing? Tell your manager precisely what it is you’re suggesting doing, in as much detail as you think he or she needs to make the decision and no more. Don’t skimp and (and this happens much more frequently) don’t inundate your manager with details. The more detail you have, the more likely you are to find yourself at the bottom of a rathole with no hope of ever emerging. Your manager probably doesn’t need to know the details of all the error codes returned by this or that API.

Knowing how much information to supply is tricky and depends as much on the manager’s personality and interests as upon the merits of the proposal (and also, how much time you have: if your meeting is set for one hour, don’t waste it all on Question 1). Be smart and disciplined in your presentation.

Here’s a side tip: maintain control of your presentation. Your manager may think that he or she wants to know all those error codes, or some other details (or someone else in the room may ask). Try hard not to go there. Stay focused.

After all, you’ve got four more questions to answer.

Question Two: Why is it Good?

Why are you suggesting this idea? Why do we need it?

Specifically, what value will this thing whatever it is bring to us, to our organization, and/or to our company?

Will it save us money? Bring us a new revenue stream? Allow us to execute on our strategy quicker or more efficiently? Be as quantitative as you can: ”deploying this software will save us 20% year over year starting in 2022” or “implementing agile methodology will allow us to respond in days rather than months to new market opportunities.”

Question Three: Where Does it Fit?

I get it. It’s good. But we’re running a business here and we’ve already got stuff.  

Where does this idea fit in our ecosystem? If this is a new software package, how do we integrate it with the software we already have? Is this replacing something we already have? Or is it something new? (Please, please show me a picture.) What do we have to do connect it to what we’ve already got? Does it conform to our enterprise standards and/or generally how we do things? How much do we have to change our existing stuff to make it compatible with the new thing?

How do users use it? What new things will they/I have to learn? Who’s going to feel left behind? What’s your transition or change management plan? Do you anticipate resistance to your project once it starts? How will you handle it?

Question Four: How Much is it Going to Cost?

It’s not just the procurement costs, that is, the capital or operating expenses I’m going to authorize to be shelled out, although I definitely need to know that. How many people do I have to assign, and for how long?

And: What am I not going to be able to do because I’m doing this? It’s amazing how many projects sound just wonderful in isolation but then lose some of their luster when stack-ranked against other worthy proposals.

Question Five: When Will It Be Done?

How long will all this take? Is this a very straightforward, well-bounded project, or is this likely to be one of those projects that goes on, and on, and on? Make no mistake, I’m going to hold you to this, and while I understand projects slip for good reasons sometimes – bugs, key people quit, dependencies fall through – I’m expecting you, to the best of your ability, to make good on your schedule promises.

It’s not just about you. As a manager I have lots of other projects under way, and I may want to know, for example, when the resources you’re using will free up for another project.

[EDIT]: SteveB’s Question!

My pal Wes Miller reminds me that Steve Ballmer’s favorite question was “If we build this, how many zeroes does it add to revenue per year?”

Easy, Right?

If you can answer these five questions, then I guarantee we’ll have a productive conversation – no guarantee, however, that your proposal will be accepted. But I’ll come away feeling I had enough data to make the decision.

Oh, and …

One other thing: if I ask you a question to which you don’t know the answer, just say you don’t know. And – key point here – then say you’ll find out. Not knowing is understandable, but you need to always follow up.

I Learned About * from That: A Meditation on Bugs

By Barry Briggs
Second in a series: previous

[Programming note: I have changed the title of this series from “I Learned About Programming from That” to “I Learned About * from That,” the idea being I’ll probably talk about lessons learned not only regarding programming but also lots of other areas – in computing – as well. * (star, or wild-card) as I’m sure most of you know means “anything and everything” in computer-talk. Everybody got that? Now back to your regular show.]

So, with just a smattering of theory and a tiny bit of FORTRAN training under my belt, I somehow got hired to work at Goddard Space Flight Center.

Yep.

[What’s FORTRAN, you ask? It’s one of the earliest high-level languages, targeted primarily at scientific and engineering applications. It stands for FORmula TRANSlation and it’s always capitalized. Back then it was one of the two more popular languages, the other being COBOL, a business-focused language.]

And with my extensive background in computer science, where did I get assigned? To write operating system-level code in assembly language for the giant Univac 1100 mainframe that controlled communications for the first Tracking and Data Relay Satellite (TDRS, pronounced tee-dress; see the image below).

Fortunately, one of the great things about youth is you often don’t know what you’re not supposed to be able to do, and so I dove in. (And there’s a lesson right here: be FEARLESS!)

But…talk about being at the wrong end of a firehose! Our little team was charged with writing an entire transaction processing monitor (a pretty new concept at the time) for the applications group whose apps sent and received commands and data to the satellite (which controlled communications to the Space Shuttle). Their apps involved positioning it correctly, connecting to ground stations, correcting errors, and all kinds of stuff I don’t remember.

Moreover, the topology of the computing environment was nothing if not complex: ; it connected to a bunch of Varian minicomputers which did preprocessing and a bunch of PDP-11s which did reporting (I think). The mainframe itself was a multiprocessor, so we had to use semaphores, test-and-sets, and locks; daunting stuff for a very junior programmer! And all our code ran at the highest privilege levels which means it was pretty easy for us to bring the whole kit and kaboodle down if we had bugs.

Which I did a few times, early on.

On the other hand, there were some cool aspects. Everything was open-source, so if you wanted to know how the operating system’s task scheduler worked, you could just go look – in the multi-thousand-page printout.

Because millions of dollars and for that matter, lives (of astronauts), depended directly or indirectly on our code, we were very careful. Every line of code that was written was reviewed. Let me tell you, those first few code reviews were not a lot of fun for that young newbie that I was.

Eventually, however, I got pretty disciplined in writing and testing my own code, and eventually got to the point where I flew through the code reviews.

The thing was, no one complained about them, really, because we all knew that so much was riding on what we did.

Commercial Computing is, or was, Very Different

It was a big surprise to me, then, when I entered the world of commercial computing, that programmers had rather a more relaxed view toward bugs. In fact, I was quite shocked that we’d have serious discussions (and am to this day) about how many “severity-1” bugs we could ship with!

Working on one major commercial project – a release of Lotus 1-2-3 – we were actually awarded tchotchkes like the one shown for the number of bugs we programmers fixed. You can imagine that this was a pretty easy metric to track!

However, somewhere along the line someone realized that there were fundamental things wrong with the development process:

  1. In the early phases of the project, developers were rewarded for a feature working – even if just barely – in other words, in prototype quality.

  2. Later in the project, developers were rewarded for patching the prototypes they’d created early on.

  3. And (therefore) just maybe it would be better to reward developers for checking in clean code in the first place. Not as easy a metric to track, but nevertheless rewarding the right behavior.

Automated Testing: Present at the Creation

How did our QA teams find all these bugs? Of course, back in the Jurassic we had armies of hardworking folks doing feature testing – taking a build from us developers each week and trying out each feature to see what worked, what still didn’t, what worked last week but didn’t this week, and so on.

Well, the product of course had a macro facility. Somebody realized along the way that we could use the product to test itself! And so our test teams moved from being feature testers to macro experts, and perhaps this was the birth of the profession we now commonly call SDET – Software Development Engineer in Test, for the uninitiated. (For historical purposes, the person who came up with the original idea was the late Mike Kleinert; the person who refined, drove, and scaled it was the young woman who later became my wife.)

The Purpose of Testing

Over time I realized something which I think is commonly understood now, which is that the purpose of testing is not, in the final analysis, to find bugs, although that is certainly a core part of the job.

In fact – and incidentally I use this as an interview question – the function of test is to determine the product’s readiness to ship. When leading software development projects, therefore, I never asked the architect or the developers if the product was ready (you’ll either get “I’m sick of this damn thing, ship it” or the perfectionist “I have to refactor everything first”).

Instead it’s the test team that is, or should be, closest to the customer/user and their experiences. So at the end of the day they have the final say. And in my view the head of test has the single most important decision-making power in the entire team: when we’re done!

That’s it for this installment. I have lots more in the queue, so watch this space. And I look forward to your comments!

I Learned About Programming from That: First in a Series

Barry Briggs

I recently experienced the completely horrifying realization that I’ve been writing code for half a century. It occurred to me that over the years I’ve actually learned some stuff possibly worth passing on, so this article is first in an occasional series.

I’ve had the privilege (and it has been a true privilege!) to meet and work with many of the amazing individuals who shaped this remarkable industry, and to work on some of the software applications that have transformed our world.

It’s been quite a journey, and over the years I’ve come to realize that I started it in a way that can only be described as unique; indeed, I doubt that anyone began a career in the software industry in the same way I did.

So the first edition of “I Learned About Computing from That” is about how I actually first learned about computers.

Early Days

I wrote my first program in BASIC in high school on a teletype (an ASR-33, for old-timers) connected via a phone modem to a time-sharing CDC mainframe somewhere in Denver. As I recall it printed my name out on the attached line printer in big block letters.

I had no idea what I was doing.

In college, I majored in English (really) but maintained a strong interest in science, with several years of physics, astronomy, math and chemistry, even a course in the geology of the moon. Yes, it was a very strange Bachelor of Arts I received.

In short, I graduated with virtually no marketable skills.

Luckily, I found a job with the federal government just outside Washington, D.C. where I was almost immediately Bored Out Of My Mind.

However, I soon discovered a benefit of working for Uncle Sam: a ton of free educational opportunities. A catalog listed page after page of in-person and self-paced courses, and thank God, because I desperately needed something to stimulate my mind.

Digital Design

Having no idea what the subject actually was, other than it sounded Really Cool, I chose a self-paced course called “Design of Digital Systems,” by PC Pittman (original publish date: 1974).

This utterly random decision changed the course of my life forever.

These six paperback booklets (I still have a few of them) began with different number bases (binary, octal, digital) then introduced the concept of Boolean logic – AND and OR gates, and so on. It was hard!

After that it covered half-adders, more complicated gates (XOR) and eventually got to memory and – gasp! – the idea of registers.

Finally, it described the notion of CPUs and instructions, how you could actually have a number stored in memory when loaded by the CPU would cause another number to be fetched from memory and added to the contents of a register, leaving the sum in the register: the essence of a program! (To this very day!)

O the light bulbs that flashed on for me!

I suddenly got it, how – at a foundational level – computers work, and how they could be made to do useful things. For me at that point, everything else – assemblers, high-level languages (I took a FORTRAN programming class next), operating systems – fell out from this very profound gestalt of computing.

And I realized I loved this stuff.

They Teach Programming All Wrong Today

These days in high school students can take “computer science” classes which, at least in my son’s case, turned out to be nothing more than a Java programming class. Imagine being thrown into the morass of Java – classes, namespaces, libraries, variables, debugging, IDEs – with no understanding of what the heck is actually going on in the guts of the computer itself!

Completely the wrong approach! Guaranteed to confuse the hell out of a young mind!

As accidental as it was, I highly recommend my approach to learning the art of programming. Teach kids the logic underpinning all of computing first. By developing a deep understanding of what’s actually going on at the digital logic level you develop an intuition of what’s going on, which makes so much easier to write code and to figure out what’s going wrong when it breaks.

When I talk about how computers work, I start with a faucet (transistor) and tell people if you get how it works, you understand how computers work.

String a couple of faucets together and you get an AND gate. You get the idea. And so on and so on.

Anyway …

That’s how I got started. Shortly after my introduction to Digital Design I wound up taking (more formal) courses at George Washington University and Johns Hopkins (again courtesy of the US government) and not long thereafter this English major (!) found himself programming mainframe OS code for NASA (believe it or not).

Where I learned some very important lessons about coding. That’s for next time. Stay tuned!