Obsessions

I’ve had some time to work on the next version of Lens•Lab for iOS devices recently. It’s coming along well and I think you’ll be pleased with the results.

One thing I find myself doing—and this may partly explain why it takes so long for me to produce new software releases—is sort of obsessing over the tiniest of details in the creation of software.

By tiniest of details i mean: how many pixels should I use to line up the controls in the settings panel? What color and/or texture should the background be? At what imperial distance should I start reporting integers instead of %1.1f floating point numbers? When I report fractional imperial numbers should 1.125 inches be reported as 1″ or 1 1/4″? How should the text fields that control the virtual lens constraints behave? How much input validation should I do when the field is done with editing versus when the panel is dismissed?

But there’s also details in the writing of the code itself. These are details that the user will never see but I write as if they will see it and judge me on it. Am I using typedefs appropriately in dealing internally with distances and aperture values? Do my variable and method names make sense? Should this handy method be generalized and made into its own class?

There are other details which I spend an inordinate amount of time on: does using NSOperation to blur the background incur any performance penalties vs. using a function in the UIView class? What about using GCC vs. Apple’s LLVM 3.0 compiler? To figure these things out, I have to use the performance monitoring tools and take measurements to see what effect these things have on performance.

Since the display of Lens•Lab is updated in realtime, it’s very sensitive to performance. Though most may not notice, there’s a pretty big difference between being able to update the display at 15 fps and 7 fps. If I can gain 3 fps by spending 8 hours tweaking compiler settings or altering how memory is accessed in the blur algorithm I will totally do it.

Why? Why do I obsess over these things? Why do I spend hours trying to make the user experience just a little bit better? Part of it has to do with the platform itself. Apple has set a very high bar with iOS and I want to make sure my app is up to snuff quality-wise. (I think it is and going by the reviews, I think others do as well.)

I think another part of this obsession has to do with trying to find “the ideal.” The perfect (or ideal) Lens•Lab application exists in the Universe, I just have to find it. When I’m engaged in these sorts of activities (obsessing over pixels), I feel like I’m more in tune with the “perfect” Universe. It’s part of my lifelong search for Truth/Beauty/Ideals.

We could go into why I search for these things but I think I’ll leave that for another post. For now, I’ll leave this and get back to work. 🙂