View on GitHub

Devendra's Log

Thinking in shades of gray

There is black and there is white. That is how monochrome displays represented colors, maybe the white was sometimes green, but it was white nevertheless. Shades of gray began to appear, the grayscale display was born. It wouldn’t be long before color displays sprung up. That is how technology evolves, from the bottom, whatever is possible, up to a point it becomes like clay. You make whatever you want to out of it, just get your hands dirty and keep an open mind.

For a computer programmer, a bit is the smallest unit of information, a sequence of 8 bits is a byte. The beauty of the bit is that, any information that long is either there or not there, black or white, true or false. The moment you go beyond a bit, you need to be prepared to think in shades of gray. There cease to be absolutes, several other possibilities emerge between the two absolutes.

We know that even the physical world is not what our eyes would have us believe. It is a quantum world that appears to us as a cohesive whole. Whatever gives rise to the quantum world is yet, and probably meant to be, beyond our comprehension. As an aside, my take is that we are a simulation, and cannot step out of the simulation, just as a computer program cannot step out of the computer. We would need to step out of the simulation to observe what keeps us going. Easier thought than done. I know a very popular movie that was based on the idea.

As software and product designers we need to think in shades of gray, we need to let our absolutes be marred by a series of possibilities. It is easy to think of a simple solution to a problem, it is harder to step back and see all the solutions to a problem, and pick the best. It takes hard iterative work, because often we are led astray. We need to step back, learn, iterate.

Exposing the right level of complexity to the user, who we ourselves should be very often, is a challenge software designers face daily. The lay user interacting with the product will never know the layer upon layer of complex interactions happening below the hood. As developers we regularly embrace complexity to expose simplicity.

If I sound like I have a practice to preach, I’d like to clarify that I don’t. I just go along with whatever works, or refuses to work otherwise.