Three parts of software development

As we race toward the impending Siggraph conference deadline, I am in the middle of coding a demo/presentation. And it occurs to me, watching this process, that there are three distinct parts to any such endeavor.

One is the coding itself. You need to make the thing you are going to show, or there is nothing to talk about.

Another is good documentation. Your little software child will not live on if you don’t provide proper instructions for using it, explain how it works, and make sure to give people a way in.

The third is performance. You need to try it yourself lots of times, show it to other people, get their feedback, listen carefully to their feedback, and iterate like heck.

So “creating software” isn’t just a matter of creating software. It’s a matter of telling a good story and telling it right, listening carefully to how your audience receives that story, and then constantly going back in to make it better.

In that way, I guess it’s like a lot of other things.

2D versus 3D

I am currently creating user interfaces in both 2D (screens with mouse and keyboard) and 3D (VR headsets with gloves that track hand and finger motions). This is giving me an opportunity to compare and contrast.

Clearly the 3D space is far larger and richer. In essential ways it mimics the richness and freedom that we experience in reality as we move our bodies through physical space.

But the 2D paradigm has its own advantages. There is something to be said for “less is more”.

For certain applications, 2D seems ideal. Spreadsheets come to mind. There might be a better way to do spreadsheets in a full 3D room simulation, but I don’t think we would know for sure until a good designer comes along and shows us an example.

Even when we are fully immersed in a realistic 3D simulation, I wonder whether we will go full 3D.

After we are all in The Matrix, we might be surprised at the retro interfaces we end up with in there. Maybe we will still be using screens with computer mouse and keyboard.

Making plans

I’ve been wondering how much our lives actually align with our plan for our lives. This question is relevant for both big things and little things.

The big things include stuff like “I am going to be married by the time I’m thirty”, or “I am going to get that Ph.D. I’ve been talking about!” Little things might include stuff like “I’m really going to clean out my closet by the end of this year.”

I suspect that when our life deviates from what we planned for it, selective amnesia can set in. We don’t like to think about the things we didn’t end up doing. After all, those things did not actually happen.

Would we be happier, in the long run, if we knew that there was going to be some kind of reckoning? What if we knew, when we made our plans, that we were going to be confronted with any difference between what we said and what we did?

Would that just cause anxiety, because every decision would take on greater weight? Or would it make us happier, because we’d be more likely to actually achieve our goals?

I have no idea what the answer is. But I’ve been wondering about it.

Future interior design

Today I toured a house that is under construction, but nearly finished. Workers are now busily putting the final touches on the cabinets and other fixtures.

I couldn’t help but wonder what the house would have been like if it were designed from the ground up for mixed reality. For example, the great room had twelve foot high lofted ceilings.

That would not have been necessary if people in the house were always wearing those future contact lenses. Furthermore, in that alternate future, you could choose a custom height for the ceiling for any day of the week.

In fact, different people in the room could, at the same time, experience ceilings of different heights. One person might be claustrophobic, and prefer the luxurious feeling of high ceilings, whereas another might kenophobic, and prefer a low ceiling.

Similarly, different people could choose the lighting fixtures and style of lighting of their choice. One person might like natural light through large bay windows, while another prefers the warmth of a room lit by a thousand candles.

In the future, I suspect that architecture and interior design will change quite a bit. This will be somewhat akin to the way that magazines and journalism have changed in an on-line age.

Those things haven’t gone away. They’ve just morphed as they have adapted to a new medium.

Train of thought

Sometimes it seems that a day can take forever. The sun just hangs up there in the sky, and doesn’t seem to move.

But there are other ways to look at it. Suppose we had a train on tracks that encircled the Earth’s equator?

As the Sun makes its way across the sky, this train would keep up. Where the train is, it would always be high noon. How fast does the train go?

Well, the Earth is about 25,000 miles in circumference, and there are 24 hours in a day. So the train would be going a little over 1000 miles per hour.

If you were standing right next to those tracks, you would say the train was going fast. Very, very fast.

So the next time you think the Sun doesn’t seem to be moving in the sky, you might think of that train. If you think about it long enough, the day might go by quickly indeed.

You may end up wondering where the day went.

Special knowledge

When I was in my early teens, my friends and I used to play a board game called “Diplomacy”, which is kind of like “Risk”. In both games, you wage long imaginary wars over Europe.

This became significant in the 8th grade, when our entire class was given a surprise spot quiz to see whether we could identify the locations of the countries on a map of Europe. Those who got the answers right could opt out of needing to take a class on European geography.

Everyone in my circle of friends got all of the answers right. Everyone in the rest of the class flunked the test, except for the Catholic kids. They had apparently learned the same thing in their weekly after-school parochial school.

It seems that these two very different groups shared the same special knowledge.

Genotype / phenotype

Recently a colleague and I were discussing the distinction between genotype and phenotype for synthetic objects. Two virtual objects can both be chairs, but look very different.

This is important, because in both cases, virtual humans would know that they are things to sit on. And this generalizes to virtual tables (things to put stuff on), walls (things a virtual human can’t walk through) and windows (things a virtual human can look through within a wall).

When you model a virtual object, it is useful to identify its genotype. This not only helps when using it, but also as you continue to refine its appearance.

No matter how you modify the appearance of a virtual chair, it should still be able to function as a chair in your little virtual world. And no matter how you modify your virtual human, you still want that virtual human to be able to sit down on any virtual chair.

It may seem like these sort of rules will add lots of constraints. But it turns out that having those constraints actually makes everything easier.

New toys

Every once in a while I get new toys. I guess I should qualify that.

These are not “toys” like when I was seven years old. They are actually various kinds of professional equipment.

In just the last few weeks I’ve gotten a fancy new VR headset with gaze tracking, a camera that senses both color and depth, and a pair of gloves that accurately tracks your finger movements. I’m using it all for work.

But still, they are toys, if I am being honest. I love creating things in computer graphics and animation, and every new piece of equipment allows me to do that in new and exciting ways.

So this is a nice case of professional productivity coinciding with fun. The more fun I have, the more I get done.

OK, maybe these are toys like when I was seven years old. 🙂

Giving demos

Giving demos is very good for my process. You would think it an imposition to give a demo every day, but it turns out it is quite the opposite.

Every time I give a demo, I learn something new. Usually it is something that I need to fix.

The process of “performing” my software turns out to be a key part of successful development of that software.

Good thing there are people who like watching demos!