The Great Software Migration: Why Apps Need a New Home
The Great Software Migration: Why Apps Need a New Home
The night Maya's homework planner stopped working for everyone except Maya was also the night she learned that writing code is only half the battle.
It had taken her three weeks to build it. Three weeks of tinkering after school, of skipping her usual gaming sessions, of eating dinner over her laptop while her mother complained about crumbs near the keyboard. The Smart Homework Planner—her creation, her masterpiece, her ticket to finally being known as "that coder kid" at Jefferson Middle School instead of just "Maya who sits in the back row and seems to know things about computers."
The app did everything she wanted it to do. It connected to the school website and pulled her class schedule automatically. It sent reminders three days before assignments were due, then again the night before, then one final panic-alert the morning of. It even learned her habits over time—if she always procrastinated on math homework, it would start sending those reminders extra early, like a digital mother hen clucking in her ear.
Maya had tested it obsessively. She had deliberately broken it and fixed it again. She had stayed up until midnight adding features, then deleted them the next morning when they turned out to be unnecessary. By the time she was ready to share it, she was more proud of that single Python file than she had ever been of anything.
She couldn't wait to show her coding club.
---
The Coding Club met every Thursday in Mr. Patterson's classroom, a cramped space that smelled permanently of dry-erase markers and old textbooks. Maya arrived early that Thursday, her laptop bag slung over her shoulder, practically vibrating with excitement. She had prepared a demo. She had written talking points. She had even made a slide deck, which she never did for anything.
"Okay, everyone," she announced when the room had filled with the usual mix of students who were genuinely interested in programming and students who were just there because their parents made them come. "I want to show you something cool."
She pulled up her presentation. The first slide read: Introducing the Smart Homework Planner! in her favorite font, with a little graphic of a calendar she'd found online.
"I'm going to put this on GitHub after today," Maya continued, clicking to the next slide. "It's open source, so anyone can use it, modify it, whatever. But first, let me show you how it works."
She ran the program. A cheerful interface appeared, showing today's date, her upcoming assignments, and a friendly message that read: *"Hey Maya! You have a history essay due tomorrow. Want to start on it now? No? Well, I reminded you anyway!"*
The room went quiet for a moment. Then Priya, who sat in the front row and always had her hand raised before the teacher finished asking questions, leaned forward.
"That's actually really useful," she said. "Can I try it?"
Maya beamed. "That's the plan. I'm going to show you how to set it up on your own computers."
---
What happened next would later become legendary in Maya's mind—not because it went well, but because of how spectacularly, catastrophically, magnificently it failed.
Priya was the first to try. She had a Windows laptop, sleek and new, covered in stickers for bands Maya didn't recognize. Maya walked her through the process: download Python, install it, use pip to install the required libraries, download her code from GitHub, and run it.
"Sounds simple enough," Priya said, typing rapidly.
Fifteen minutes later, Priya was getting error messages.
"It says 'ModuleNotFoundError: No module named requests,'" Priya reported, her brow furrowed.
"Oh, you need to install that," Maya said, leaning over. "Run `pip install requests`."
Priya typed the command. Error messages cascaded down the screen.
"Now it says 'Microsoft Visual C++ 14.0 is required,'" Priya read aloud.
Maya felt her stomach tighten. "That's... okay, you might need to install the build tools. Let me look something up."
While Maya frantically searched Stack Overflow, Marcus raised his hand from across the room. Marcus had a MacBook, old but reliable, and he had installed Python years ago for some project he never finished.
"Getting different errors here," he said. "It says something about 'incompatible library version.'"
Maya's head snapped up. "What version of Python do you have?"
"Um, I don't know. How do I check?"
The next ten minutes dissolved into a haze of terminal commands and configuration files. Maya discovered that Marcus had Python 3.8 installed, while she had built her app on Python 3.11. Some of the libraries she used simply weren't compatible with older versions.
"I can try to install an older version of the library," Maya offered, her voice starting to lose its earlier confidence.
But when she tried that, other parts of the program broke instead. Dependencies have dependencies, it turned out, and those dependencies have their own dependencies, and somewhere in that vast tree of requirements, versions stopped agreeing with each other like squabbling children in the back of a minivan.
Meanwhile, Devin—who ran Linux and was usually the most tech-savvy person in the room—was encountering an entirely different set of problems. His errors mentioned something about shared libraries and missing DLLs on Linux. The term "DLL" meant something different on his operating system, and getting Maya's Windows-specific code to work on Linux was like trying to fit a square peg into a round hole.
By the time the coding club session ended, Maya's Smart Homework Planner had failed to run on three different computers in three different ways. Priya had installed and uninstalled Python twice. Marcus had somehow corrupted his entire pip package manager and spent twenty minutes trying to fix it. Devin had given up and gone back to playing a game on his phone.
"I'm really sorry," Maya said to each of them as they filed out. "It works on my computer, I promise."
She heard the words come out of her mouth and immediately regretted them. In the entire history of software development, no phrase had ever been more useless than "it works on my computer." It was the programmer's equivalent of "but I studied for the test"—technically true, completely irrelevant, and infuriating to everyone who had to deal with the aftermath.
---
That night, Maya sat alone in her bedroom, surrounded by the comfortable chaos of her workspace. Sticky notes covered her desk lamp. A half-empty mug of cold tea sat precariously near her laptop. Posters of space missions and favorite bands competed for wall space above her bed.
Her laptop screen glowed with a browser window showing the problem: a wall of text that the terminal had scrolled past, full of words like "AttributeError," "ImportError," and "Segmentation fault." These were the messages that had appeared on her friends' computers. On her own laptop, the program ran perfectly, every time, without fail.
The question burned in her mind like a sun that wouldn't set: *Why?*
Why did code that worked flawlessly on her machine crumble into error messages on everyone else's? She had written the same code. They had downloaded the same code. How could the same sequence of instructions produce completely different results depending on which computer executed it?
She pulled out a notebook—she still kept a physical notebook for planning, despite doing most of her work digitally—and started writing down what she knew.
My computer:
- macOS (latest version)
- Python 3.11.4
- All required libraries installed and working
Priya's computer:
- Windows 11
- Python 3.10 (I think?)
- Some libraries missing
- Errors about missing Visual C++
Marcus's computer:
- macOS (older version)
- Python 3.8
- Library version incompatibilities
Devin's computer:
- Ubuntu Linux
- Python 3.9
- Different error messages about libraries
Maya stared at her list. The code was the same. The outputs were diff