Tuesday, September 8, 2009

J.Q. Thomson: Making Memories

As a software engineer, it's often easy to get caught in pitfalls of thought: upholding the importance of designs without fully understanding their utility, getting tunnel vision on some quality without a wholistic appreciation for what you are creating, maintaining an irrational belief in the finality of one's decisions.

These technical challenges are compounded by the practical reality of the software.  When photography company Lifetouch Portrait Studios made the transition to digital, they had to create a robust, scalable system usable by photographers.  They needed to build something that wouldn't require an IT staff or a month-long training course, which could be adapted to a variety of circumstances and environments, many unknown at the time of creation.

They went to great lengths to avoid these engineering pitfalls, and the result seemed to have paid off.  There were a number of things that stood out about their design:
  1. Avoiding duplication from modularity: One side-effect of establishing a strong, multi-layered hierarchy is duplication of data structures and logic.  GUI, control logic, and databases can all contain information about the same object, and a single change might need to be made in multiple parts.  They addressed this through the use of "Forms", defining display logic separately from display code itself.  This is basically a well-designed implementation of the Model-View-Presenter architecture pattern.  The Spring framework was fundamental in defining this structure.
  2. Avoiding environmental dependency: They went to much effort to avoid depending on the system's environment variables or database set-up by defining the required information within the program itself.  They created a Launcher that identified and loaded the dependencies of various system modules, and integrated things like database updates into the system itself.
  3. Distinguishing commands: Throughout the system, operations were wrapped in objects.  Image manipulation was handed through RenderRequest objects, database updates were objects, GUI interaction was handled through command objects.  This made operation more loosely coupled, enabling messages to be more easily sent across computers, and separating layers.
To see how this design scaled in the following years, I've decided to interview a Lifetouch Portrait Studio photographer from the year 2013, Topeka photographer John Thomson.

Kurt: Mr. Thomson, I'm glad to have you here on the time phone.
Thomson: Yeah.  Um, call me J.Q.
Kurt: Shall do.  Anyway, I have some questions about the software you use in your work.
Thomson: What, Creation Center?
Kurt: That's the one.
Thomson: You with the government?
Kurt: Well, technically, I'm employed by the state of Illinois.
Thomson: I had nothing to do with nothing, you hear me?
Kurt: J.Q., I'm only here to--

And he wiped out the connection.  I'm a scientist by training; perhaps I need to learn a thing or two about journalism to effectively contact more lawyerly times.

No comments:

Post a Comment