If I had the ability to freely work within my preferences, I’d be building applications that you call from a command line or terminal. They would do their work quietly, report their state to some logging table somewhere, and they would make their output available in some useful fashion. That is to say, my ideal user interface is some form of this:
user@something:file/system$
Or this:
C:\file\system>
I recognize that I am absolutely in the minority with this opinion. It’s definitely not an especially user-friendly way to build software. It demands that the user conform to the weirdness demanded of such an approach. You’d have to memorize or look up commands to get anything done, and, truthfully, you can communicate so much more information with a mouse.
Frankly, I think that my opinion on this matter is almost entirely indefensible. There are probably some corner cases here and there that make this sensible, but I certainly can’t think of any.
The reason that I hold this opinion is simple: I am awful at building user interfaces.
Some Caveats
Since my job is to produce software that people will actually use, I have had to develop some degree of ability to work with CSS and HTML. There was no getting around it!
At one job, life was easy. I knew exactly what size of screen someone was using, and I had the luxury of enforcing the browser they used. I built applications for a small audience, and they had very, very low expectations about how the interface was going to look. In the event that they hated it or thought it was ugly, I still had no problem. I could summon all of my tact and tell them, in the most acceptable way possible, “Too bad!” I’d suggest that working on that wouldn’t generate the return that we’d hope for reckoned against producing new features or some other similar argument.
This meant that I was able to skate by with the bare minimum. I would create what would make my life easier and then cut further development off with a razor-clean edge and move on to other back-end-focused things.
I eventually left that job and spent years standing on the shoulders of giants. Other people have laid out wonderful, clear templates and style guides. All I had to do was read, pay attention, and follow directions. In essence, serious artists were creating detailed paint-by-numbers kits and then holding my hand as I filled in the picture.
So in one sense, I was capable of this kind of development work. I could absolutely write the necessary code to give the user interface some behavior, that was easy business. I could also use whatever was given to me to put elements on the screen.
In another sense, I’d only ever done that. Smart people producing good stuff had set me up for success and made failure almost impossible. I just didn’t develop the ability to start from a blank document and work any of this up myself.
Until
Until today! I decided that I was going to rework an old side project of mine, and I didn’t want to bug anyone else. Historically, I’ve had another developer who was leagues better than me at this kind of thing take the metaphorical wheel. That’s asking quite a bit of someone else, though, and I figured that it’s high time I developed this skillset for myself. It couldn’t possibly be bad for me!
Observations
I’ve begun to spend time learning to draw. I sit down with a sketchbook and pencil and try to coax useful movement out of my arm and hand to make a recognizable image. Unfortunately, much of the time, I come away feeling like I produced something that ought to be flushed. Trying to produce a decent-looking user interface, I’ve come to discover, generates much the same feeling. In both cases, I’m willing to grit my teeth and work through it. In only one case do I feel that I will ultimately have to show the end result to someone.
I believe that CSS is the main culprit here. It’s been around a minute, and things keep getting added to make life easier. I don’t know what those things are, because I’m inexperienced. When I go to search up an answer, I find information that might date back to 2008! That information was correct back then, but people were still greatly concerned about Internet Explorer 6 and there wasn’t a smartphone to be found.
Succinctly, there are a lot of ways for things to go wrong and only a few ways for them to go right. CSS is a room full of sharp edges and hard furniture, and the lights are off. The only way for me to find my way around is through experience gleaned by bumping into those objects and swearing.
It’s possible that a framework or template exists that I could use. I have two subjectively strong reasons for why I’m not doing that.
First, the gap in my skillset annoys me, and I want to learn this stuff well enough that I can work without the net. My ability to produce stuff on my own is necessarily limited if I never take the time to close this gap.
Second, I don’t want to. I don’t want to hunt down the right product, I don’t want to figure out how to use it, and I don’t want to introduce another dependency in my project that I’ll have to babysit.
I can work with the constraints produced by those two arguments because I stand to gain experience that I think is really valuable, and all I have to lose is time.
Different Worlds
Because most everything I work on gets installed on a server and not some user’s machine, I have a known target. This known target is even easier in a world of containers because I can just define what I want (within reason). In this sense, life is pretty easy, and I get to focus on things that I really care about, like the design of the solution and lunch.
I can also read the code and reason about how my stuff will behave given a known input. I can chase down problems this way and, should I choose, put a bunch of statements in that dump the state of the program to some output stream that I can read to validate or refute my assumptions.
This is not the case for the web. I know that I am stepping into a world full of concerns about the size and nature of someone’s screen and other salient details about their device. The only way that I can really work through these problems, as near as I can tell, is to figure out what responsive design means, make my stuff responsive, then hope for the best.
Thoughts You May Have
“This sounds like someone complaining about inexperience.” – Yes, you got it! This is exactly right. But I am also working through my thoughts in writing, and I am duty-bound to publish those same thoughts.
“Duty-bound? That sounds arbitrary.” – Yeah.
“I kind of want to see what this guy’s working on.” – I’ll eventually spill the beans, but not at the moment. I have more that I’d like to do before I advertise it. It’s nothing special.