For quite a while, almost everything that uses electricity has been controlled by a microcontroller, a tiny computer programed with specific behavior. This means that device capabilities and user experiences are determined not just by the device itself, but by the embedded software installed on a device.
But what happens when a device's programming becomes obsolete- incompatible, outdated or broken? The idea of upgrading a perfectly good device by replacing it with an identical one with slightly different code seems incredibly wasteful.
In most devices, the programing code is baked into the device and is difficult or impossible to change, even when we would really, really like to.
For example: have you ever bought a flashlight with multiple modes and wished it worked just a little differently? Most flashlights don't get very dim on their lowest setting, and they often have a rarely used blink mode that you have to cycle through to turn them on or off.
Why can't a very dim setting (to extend battery life) be added? Or a "programming mode" that could be triggered by holding down a button, for users who don't want that annoying blink mode?
On microcontroller-based devices, such as your flashlight, there are a few reasons for the limitation of coded features. "Hidden features" and options for customization are common in higher-end products and less common in cheaper items, like your flashlight. Sometimes this is just a simple case of lazy design or the manufacturer thinking nobody is interested. Sometimes this is an intentional choice: a way for manufacturers to differentiate between the high and low end of a product family, or a way to sell the exact same device with "better"software at a higher price.
One problem with embedded software is that more and more devices seem to include some sort of vendor lock-in. Some of these include: batteries containing authentication chips that prevent third parties from creating compatible replacements, dependence on cloud services, and proprietary data and power connectors that restrict manufacture of accessories. Everyone is aware of Apple's restrictive charging-cable hardware, for example; the newer iPhones aren't compatible with older phones' cables. For some devices, particularly safety-critical things like cars, space heaters, and smoke detectors, a case can clearly be made for this kind of feature-control. But most of the time, it's just a big annoyance to the average consumer.
To illustrate the type of waste that can result from the constant "improvement" of software, take the case of Revolv, a company that sold a $300 smart-home hub. After selling many hubs, the company Nest acquired Revolve and shut down it's cloud-based servers, rendering the hubs useless. Nest did this simply because it believed it had a better smart-home program than Revolv. To Revolv's credit, the company appears to be offering a refund for their hubs. However, this doesn't change the fact that most of those devices are likely bound for a landfill.
Another common device with less-than-perfect software is the Android phone. Even the cheapest Android phones have fairly powerful hardware, but they also come with useless bloatware that cannot be removed. Unlike a full-size computer, they only support whatever operating system (OS) the manufacturer provides. The only solution to this is that sometimes a few Android-based third party firmware projects can be installed with varying degrees of difficulty, for the more popular types of phones. But when the manufacturers stop supporting the phone, there is often no way to upgrade to the latest OS, and most users just go out and buy new ones, sending their old phones to the landfill.
Are there any solutions to the waste resulting from poorly-executed software programing in consumer technology?
Today, there are all kinds of uses for devices when they no longer serve their original purpose, as long as the software on these devices can be edited. Already, lots of things can be used in ways unintended by the manufacturer, like the cordless drill, for example. Look at the endless (and sometimes awful) ideas people have had for using those!
If customers could purchase codes to restore missing features, disabling features of a device's software wouldn't have to be as daunting as it seems. This solution may not be as good as fully-open source and user-programmable devices with all features enabled out of the box, but it's a decent compromise compared to fully locked-down devices headed straight for the landfill. It might be better than paying for features you don't need.
Software obsolescence leads to a lot more of this.
Combat software obsolescence with more firmware projects.
In some devices, notably many WiFi routers, modifying or replacing the code is relatively easy, with many compatible firmware images available online.
Firmware projects for microprocessors such as Arduino, Raspberry Pi, and the OnePlus One prove that at least for some types of devices, manufacturers can still make money while allowing users full control of their devices.
If a flashlight is going to have a CPU, it should be possible for end-users to write code for it, or at least customize it via detailed adjustable settings. No piece of software (or hardware for that matter) is going to please everyone, and there is a lot of room for improvement. But as more and more devices include different displays, network connections, or USB ports, there is a huge opportunity for manufacturers to add all kinds of options for customization, upgradeable firmware, and connectivity. There is even the growing opportunity for users to write their own code for their devices. These changes made to device microcontrollers might just change their destiny. Proper programing could be the difference between devices with futures in our lives, or futures in landfills.