It’s been a while since I’ve posted. I’ve been working on my side project Agulus, my upcoming book Developer Career Book, my podcast Complete Developer Podcast, helping run Code Newbie Nashville, as well as a full time job and having a family. I’ve been doing a lot of writing of late, but not very much online.
As I’ve been trying to juggle all these things, technology has simply not been helping any more. In the past couple months, I’ve had the following experiences:
- Microsoft Azure not being able to install wordpress. I bought a domain through them, set up a wordpress install, etc. It NEVER worked. I cancelled it. A month later, I got a bill for it anyway, and discovered it was still active. So I cancelled again. I got another bill a month after that, so I blocked payment at the bank.
- Beej got hit with a multiple hundred dollar charge on his azure account, because it got attacked. Instead of Microsoft noting a DOS attack and taking steps to mitigate it, they just billed for it.
- Visual Studio 2013 under my Bizspark account ended. I’m using it on Agulus. I tried to pay for it, but was unable to do so. The only way I could get anything was paying for VS2015. That was a forced upgrade due to complete rudeness on Microsoft’s part, not warning me that the subscription was about to expire, but literally just stopping me mid-typing to hold their hand and demand money. They’ve hit me with account renewals a couple of times as well when I’ve had the computer on for hours, but they can’t be bothered to do it when I have an actual working internet connection.
- Visual Studio 2015 is supposedly backward compatible with 2013. That’s a damnable lie. Between it, some weird interaction with the DevExpress controls we’re using and using git with Atlassian, it borked the repository for Agulus (we recovered, but it was a huge pain in the butt and wasted days.).
- Visual Studio 2015 has been repeatedly warning me that my subscription is not current. Turns out once a card is blocked at Microsoft, they think it’s always blocked, and it takes an act of God to get a payment to go through. And you’ll spend every morning on the phone with them until it happens, trying desperately not to have business critical software turned off for your business, simply because they can’t be arsed to figure out their billing system edge cases.
- Windows 10 went from annoying me with regular popups at inconvenient times, to getting installed, to periodically borking drivers on both my laptop and my desktop. In addition, it hosed the linux installations I was dual-booting into, losing data for me because it thinks it owns the MBR.
- My windows 10 laptop battery is almost always dead. Oh, it charges just fine and runs for a long time on battery, but windows turns itself on apparently in a closed laptop bag to do whatever the heck shut down laptops do. This has persisted even with changes to the power options. This is particularly excellent when you realize that it could easily overheat in the bag, damage the laptop, or just flat burn the house down. But by golly, they need to run their forced updates.
- Visual Studio 2013 crashes three and four times a day at work. Apparently a named pipe is closed and that’s a dandy reason to just kill the entire IDE.
- Comcast in my local area has outages of either the TV, the internet, or both about once every two weeks for a couple hours at a time. It never happens during storms or otherwise inclement weather. Oh, hey the sky is blue, the temperature is pleasant, and you have a deadline - I think I’ll drop connection. Or maybe just kill DNS. You do know the IP addresses of your favorite sites by heart, right?
- But let’s stop talking about byzantine things that were designed for appearance instead of stability. Let’s talk about the azure portal. Can any non-autist actually remember where anything is in that morass of options? Can someone get me my domain back? I bought it. It never worked, and Microsoft won’t let me get to it. But boy, are those screen to screen transitions nice to look at…
- My android phone battery won’t hold a charge for crap now. I have to turn it into power save mode or plug it in for it to last through an 8 hour workday. And oh, by the way, nobody calls me and I don’t use the phone much. But several apps on there constantly call home (hello facebook). And lots of stuff fails to work at all unless it gets firehose level network access. You don’t want to give it constant access to your bandwidth, the facebook app won’t work properly again until you power-cycle the phone.
- My backup software randomly hit the limit of the java heap. Rather than giving a useful error message, it just quietly stopped working with no diagnostics. Good thing nothing failed.
- Evernote decided “hey, rather than fixing our software so it’s worth paying for, let’s just brick it if you have more than two devices”. You guessed it, no more evernote for me. I might have been interested in paying for their product, had they not had years of failure before the end of the paid plan, including losing important data for me on several occasions.
- My phone is supposedly synchronized with google calendar. Except when it’s not. Then you double-book things.
- I’m using dotnetcore, trying to just learn my way around. I had a nice little project that was working well with tests and everything. Suddenly, between it compiling one night and opening it the next morning, it no longer could find project references to other projects in the solution. No compiley - just lots of red lines and failure. And literally nothing had changed. I hadn’t even closed down the IDE.
The point is, we’re rapidly reaching a point in technology where our systems are so complex that we can no longer pretend that extensive testing isn’t a deliverable, perhaps even THE deliverable. Moreover, we can’t keep acting like tests are nice to have. You can easily ruin someone’s life at this point by making bone-headed tech decisions. I’ve lost data from windows destroying things. I’ve lost days of work to the various issues above from Visual Studio. I’ve spent probably 10 hours trying to get a domain back that I already own, simply because someone can’t even make the thing I paid for reachable. I could have lost a LOT of stuff had I not been anal-retentive about backups. Some of these things are the result of not making smart, hard decisions and taking ownership of product (hello Evernote/Azure/Comcast) and some are just stupidly complex systems that got out of hand (hello again, Azure), but all of them have failed significantly. And honestly, cause of failure only matters at post-mortem. When it’s breaking things for you, failure is what matters about failure.
So, what’s the solution? I don’t know. Maybe actually test things before putting them out in the world? Maybe provide useful diagnostics? Maybe have customer service that’s empowered to help instead of service that is merely there to keep you busy while people behind the scenes are desperately duct taping random crap together in the hopes that it won’t all burn down.
But something, somewhere has to change. If it doesn’t, you are going to see more lawsuits against our industry, more regulation of our industry and people are going to eventually end up dying due to knockoff effects from shoddy, non-critical software (this has probably happened already, realistically). Microsoft has already been sued over their windows 10 nonsense killing businesses while they forced updates on people who didn’t consent to them. Think about how many spreadsheets are being used in back rooms of places that do things that are mildly critical, but serve to support really critical things. In a massive, distributed system, like literally every critical system we have right now, the node that wrecks your day isn’t the one you’re sitting on - it’s the one a block over that your plumber is counting on for something lame like inventory. And if it falls over and he can’t order parts and then something breaks, guess what? You could very easily have a big problem. Would you like to own a greenhouse or ten when it’s 99 degrees outside in the shade in McMinnville TN, only to find that because windows pushed an update that broke the way some excel macro worked behind the scenes in some inventory system for plumbers, that none of the local plumbers have some little doodad that you need when something goes sideways in the business that you depend on for your mortgage? What if you have a half-million dollars worth of plants in your greenhouses, and this happens? Oh, by the way, you took out a farm loan for all this, so if it goes sideways, you’re going to lose your house? Not only are things getting stupidly unstable, but people are taking bigger and bigger risks all the time. We’re baiting black swans and they’re going to land if we keep this crap up.
The point is, we need to stop acting like bugs are bugs. Bugs are insects. The word you are looking for is DEFECT. And defects have a nasty way of doing nasty damage in a cascading manner in a deeply interconnected world. We’d best be getting a handle on this crap before even more things are online. The thing is, it is possible to do well. The other day, my resharper subscription ran out, so I went to JetBrains website, paid for a renewal and guess what? I was back at work in 4 minutes flat. My timetracker Toggl just works. Same thing with my task-tracking app Nozbe, as does Dropbox. There’s no reason that the rest of the industry can’t come along on this. While JetBrains (picking an example) is probably my favorite company in the .NET ecosystem right now, with no other contenders even remotely close, the fact is, they aren’t that special. They just freaking care about the quality of their work. This makes them special in the ways that matter, but should they really be special, just because they give a damn and act on that fact? No, the rest of the industry should just quit being dysfunctional. It’s very easy to go forward with the assumption that a problem isn’t that big of a problem, but it might be absolutely critical for someone else, probably more critical than that new feature you are trying to force out.
You’d do better handing dynamite to a monkey than handing control of a release schedule to someone who isn’t an engineer. At least the monkey isn’t going to throw the dynamite with absolute certainty that it’s out of the blast radius. I’m not certain that one could say the same about whomever is in charge of release cycles at a lot of major vendors…