Put your hand on a hot stove for a minute, and it seems like an hour. Sit with a pretty girl for an hour, and it seems like a minute. THAT’S relativity.
That’s one of my favorite quotes from Albert Einstein. Regardless of how things are, it’s how we perceive them to be that is the most important, and all of our perceptions are relative. Something is brighter than something else, or darker. Warmer or colder than some reference temperature. There are no absolutes in perception. And for those of us that deal in the engineering world (software or otherwise) that’s sometimes tough to wrap our heads around.
It’s a challenge in software. We deal with this all the time in thinking about things like application startup times. It’s why we have splash screens and little spinny icons. People feel as if things are happening faster if there’s something happening, even if it’s not directly related to what they’re waiting for. But is this always the case? When we press an elevator button, it lights up, but nothing tells people how much longer they’ll have to wait for the elevator. Should it?
In the software project I’m working on, we were discussing a non-functional requirement around what the performance must be when the app is transferring files. We wanted to make sure that when files were being uploaded and downloaded, it didn’t bog down the user experience. We were having a hard time expressing the requirement, until my colleague simply said that the acceptance criteria should be that there would be no perceptible difference in application responsiveness when transferring files compared to when not transferring files. At first blush this seemed too subjective, but again, since this is a perception thing, and it’s relative, it seems to be the best way to capture it.
It’s a challenge too when working on software projects. Think about a time you struggled to implement some complex functionality or fix a bug, or waited for a build to complete, or a test to run. Feels like it took “forever” which it clearly didn’t, or you’d still be working on it or waiting for it. Think about implementing a feature where the code just flew from your fingertips. Maybe the actual work took the same amount of time, but the second one felt faster. Then we’ll say things like “I should have figured that out sooner” or “I was expecting that to take more time”. Relativity.
It’s a challenge with kids. I always tell new parents “the days will crawl by but the years will fly.”
It’s a challenge in life. When I first left Microsoft I thought the first thing I would do is set up a blog. I was hoping to get this blog started sooner than later. I was hoping to run out of ideas later than sooner. Not having any ideas for the topic of the posts, or even why I am blogging, made me put it off. Feels like forever since I wanted to start, and now that I did, it seems that I got this blog up and running in no time at all.
When you think about doing things, it always seems you are doing them both sooner than you expected, and later. That dichotomy is part of the human condition, I guess.
What do you think? Better comment soon, or you’ll forget to. But don’t comment too soon, think about it for a while.