Simplicity and software

computerI’m trying to make the things I program simpler. This is true for the graphics stuff I’ve been doing but even more so for UI applications.

Not too long ago, I firmly believed in the mantra: the more settings, the more ways to tweak something, the better. This was important in a world of slow computers, crappy operating systems and overall shittyness. Everything is broken anyway, so if all of the internal workings are exposed, we can at least try and work around it.

I also remember reinstalling my operating system at least once every three months, with ISOs generated with a special tool that allowed me to strip out some of the garbage that came with the vanilla install. Getting a computer to run properly was mostly an exercise of fighting everything from the hardware layer up to the software itself. Hence, the “more settings are better” thing.

I can’t quite put my finger on when this changed. But I do know that I haven’t ever reinstalled this version of Win8 (despite switching motherboards a few times). I have a set of tools that I’ve been using, and I only ever check for updates or alternatives if something breaks (which, in the case of a webbrowser, is about once per week, sadly).

Then I started developing for Windows Phone – hold on, where’s all the interface stuff I’ve been using before? I can’t work with only a handful of textboxes and labels…! Yeah, actually, I totally can. And apps are so much cleaner and easier to use than most desktop programs, simply because there isn’t any room to shoehorn more pointless controls in.

Now I’m back at desktop development with a new project and it made me realize how superfluous and unneccessary most settings are, and how easy it is to break stuff if you don’t know exactly how all the settings in a program are interacting. Even more so, what’s the point of spending a day to implement a setting that nobody is ever going to touch because the default value is just fine?

So I’ve been noticing this weird pattern while developing:

Step 1, create some complicated data architecture.
Step 2, implement a complicated user interface with custom controls that exposes this data architecture to the user in a really convoluted way
Step 3, wait what – why would I even…
Step 4, rip it all out, pick the one or two actually important variables and expose them with standard UI controls.
Step 5, repeat ad infinitum.

I just spent two hours trying to databind an editable DataGrid to a list of strings, and then the column headers didn’t resize properly and I couldn’t insert new rows and then I said FUCK THIS and used a textbox instead. Now I don’t have to spend the rest of the day trying to make this work, and you, dear user, don’t have to learn how to correctly click your way through yet another terrible custom control. We’re both consenting adults, and we both know how textboxes work, right?

So there you have it.