Software Development Process

Not that kind of “process."
I see Software Development as beginning from two critical terminal points and converging in the middle across the mottled terrain of compromise. The two critical terminal points are:
  1. Data
  2. User Experience
Not all software is well grounded. By well grounded I mean that the software has a clear purpose and expectation. Without being well grounded, it is difficult to define the terminal points, but, not impossible to arrive at a satisfactory conclusion. My perspective is drawn from developing well grounded software.
Data
Why is data first? How could I consider data to be more important than user experience? Does the order of my tiny list even have meaning? In reverse order: yes, easily, and because, the purpose of a tool is more important than the ease or joy of using it except when the purpose of the tool is the ease or joy of using it.
Computers would not exist if they did not serve purposes held in esteem far greater than the ease of their use as evidenced by smashing successes such as UNIVAC and every mainframe ever created. Software is just a smaller section of the overall computing fractal. Data represents the purpose of a computer, even if you must consider it abstractly. Input from a user is data. Output from a program is data. Whether this is a voice from a human responded to by synthesis, or keyed text responded to by errors about its format, the interaction with a program is data and it is well defined.
It is an essential requirement to define the data in order to define expectations about the processing of the data. Definitions can seem very loose, but, actually be very specific. For example, in audio processing, one may be tempted to consider a voice as extremely loose. But, the voice isn’t the data. The voice is a signature of meaning held within the data. The data is the audio signal, and it is quite easy from the perspective of the machine to define it in mathematical terms.
So there you have it. You can’t even begin to set realistic expectations or even idealistic goals for the User Experience terminal point if you don’t know what the tool is meant to do. That is why Data comes first.
User Experience
That isn’t to say that Data is ultimately dictatorial. In the end, a user must be served by the tool. If a user is not served due to incorrect data design and expectations, then the data design must change. However, in the process of invention it is almost always easier to define the data before the user experience. In future iterations, the opposite becomes true. For this reason, the definition of terminal point two can be considered a very early second iteration of the tool’s design.
It is incredibly common to see arguments about form following function or the opposite. It is less easy for people to understand that they are integral in the final result, because, it is difficult to imagine them as integral during the invention process. That’s because they are not integral at this phase. Refinement during development, or the path one decides to take across the aforementioned mottled terrain of compromise, is responsible for merging the optimum combination of form and function.
The user’s experience of using the tool is critical to the design. There is no point in producing a tool that a user can not use just as there is no point in producing a tool that does not succeed at its goal. With fortune, then, we realize that we can adjust the goal to accommodate user experience. So long as we do not lose perspective and move it too far, this is the way that user experience drives development primarily. Data can be redefined over time based on the changes in the goal that are driven by necessary compromises in user experience. When a developer truly shines is when they are able to solve these conflicts by inventiveness of engineering instead of acceptance of compromise. But, let’s be realistic: that approach is often revealed as foolish and far too commonly leads to a worse overall result.
Two Terminal Points
I define the data that the tool will accept. I define the data that the tool must maintain and understand. I define the data the tool must produce. I define the reasoning about the data so that a foundation for the goals of the tool can be laid atop of it. From there we gain a great understanding of what the tool truly is. From there, we can begin to understand the ideal ways in which the user will engage the tool and leverage its benefits. And from there, we can begin the process of refining the tool’s design to meet the best compromise of user experience and functionality where the goal is to compromise on neither, but, the understanding is that a good tool with a good user experience is ultimately better than a bad tool with a great user experience or a great tool with a bad user experience.
That said, across many scenarios, people will often be happier to accept a great tool with a bad user experience if the purpose it serves is important enough to them. This is fairly important to remember particularly when designing software that accepts complex or critical responsibilities for its users.
Today
Today I will begin the process of defining the first point for a new personal project that I have been dreaming about for some time. Within this phase of the process, I will experience a great degree of introspection and face hard decisions about the realities of the goals I prematurely set for the project. However, in strictly defining the data for the tool, I will come to far more concrete terms about what is feasible. In the end, I will be far more satisfied as I will have set achievable goals and have something far more recognizable as a path to follow during the subsequent phases of development.
Wish me luck. I hope to write more about this project in the future.

Postach.io Wish List in October 2014

Today I was evaluating Postach.io’s premium subscription offering to decide if it was something I might find valuable. I like to support the services I use. This is actually a fundamental reason I am a user of Evernote. I feel that the best products have fair value propositions between the producer and the consumer. As a consumer, I want to avoid services that try to reverse the arrangement and consume me, such as basically everything Google does. I use services like 500px, Evernote, Netflix, and so on. They all allow me to pay for added features and functionality, or simply to get their service at all. I prefer this for things I will use often over a long term. But, extolling the virtues of this model is not the purpose of this article.

When I was evaluating Postach.io’s premium offering, I realized that it doesn’t offer anything I need or could even use. I want to host my personal home on the web here. I get minimal traffic. Mainly, I refer people to my page as needed and that’s the bulk of it. Rarely, I may have an article that gains some attention. I don’t need password protection for a whole site. I don’t need multiple authors. I don’t need any more sites. In fact, for the majority of my usage, the free offering from Postach.io covers what I need.

That said, as I mentioned before, I prefer to use services I can pay for. I don’t want to be some kind of human version of a loss leader or filler. I don’t want to be productized. I don’t want a service I invest my time into to disappear due to lack of income from the bulk of its users. So, as a response to a tweet, I decided to write a little wish list. Some of the items on this list may be features that should be available to everyone. Maybe some make more sense as premium offerings. That’s not something I’m going to try to differentiate. I will merely list the capabilities I’d like to have which are not there, or enhancements to existing capabilities.

  1. SSL: I want https://ztj.io/ to work. In fact, I want non-SSL connections to redirect or fail. I don’t really want to work to make it happen. I am willing to pay assuming the fee is reasonable and somewhat comparable to doing this on my own. I realize a certificate would have to be provisioned for my domain. In this and all the other wish list items, I keep an open mind to reasonable fees and restrictions and cooperation with identification or whatever else is required.
  2. Control over the index/greeting/landing page. I want to be able to make a user land on a static page instead of the article listing. Specifically, I want my bio/about type page to be what they see first. My site is primarily used to convey identity to new contacts.
    1. As a side note of this wish item, I would like static pages to look less like directly linked article/blog entries and more like standalone pages on the site.
  3. I’d like to be able to put up “naked" assets, including but not limited to HTML that is not at all decorated by the system itself, JavaScript, and CSS resources. I’d like it to be possible to make such a “naked" HTML page into the landing if I wanted. I don’t expect any added dynamic server-side capabilities than what is there, except perhaps a base URL replacement variable, but...
  4. In association with the previous item, I’d love it if there was a purely restful way to access the content being cloned out of Evernote, Dropbox, Pocket, and wherever else. I think it would be great if I could build my own single-page front end to my Postach.io site if I felt so compelled. But, at the very least, I might want to make a fancy landing page that listed the last 5 articles or what have you, or use the tag cloud data, or whatever else.
  5. Another useful developer capability, especially in relationship with the last two items, would be making it possible to add domains to the CORS headers in responses for my own site.
  6. I’d like to see some better themes and would even consider paying for them in the way that Tumblr offers such things.
  7. I’d like to have more advanced image handling with automatic gallery generation and a high quality viewing experience on click-throughs with direct linking possible for those full size views as well. Perhaps multiple styles available, with the choice made with some kind of tag (image-tile, image-gallery, etc.) with a sensible default behavior, which would probably be the existing behavior of leaving images in their place as indicated by the Evernote note.
  8. Would it not be cool to be able to link additional notebooks to be used as a different kind of data source? Perhaps, as an alternative to the last wish list item or maybe done along with it but as another way of controlling this by the user, one could point Postach.io to another notebook that was to be treated as nothing but an image source gallery, ignoring content in notes besides images, using the note title as captions for all the images found in there, and auto-organizing into sets (a la Flickr) based on tags?
  9. That just made me think of something else I’d like to see, especially if the last feature was implemented, which would be a way to have Postach.io pull notes based on an Evernote search query instead of a notebook as I do not use Evernote notebooks to sort images, but, I do tag them all. Plus there are content based search parameters that could be used as well.
  10. I’d like my site to be apparently isolated from Postach.io (no bottom links or references) so that I could have uncensored content without implicitly or otherwise associating that content with Postach.io. I don’t intend to post anything illicit, but, censorship is no fun and I think people should be allowed to host whatever they want on their site so long as it is legal. I also understand the risk a company takes with its image when arbitrary content that may be offensive to potential customers is seen within clicking distance of that company’s name. With no reference to Postach.io, there would be little reason for uppity viewers to think Postach.io endorsed anything posted.
  11. Winding down the breadth of my imagination here… wouldn’t it be great if I could create a “page" entry that linked externally? Maybe a note with a “link" or “bookmark" tag along with a “page" tag would use the Evernote URL metadata to make a link to an external site.
  12. I’d like to be able to change or otherwise cause to reset the URL generated for a post/note easily.
  13. Social sharing button (just one, with a pop-out with whatever services listed) on posts. Maybe this is a template/theme thing.
  14. A way to preview posts on the site before setting them published.

Ultimately, the majority of what I want from Postach.io is already implemented and working. Even if I instantly had all the items in the wish list available to me, I don’t expect I would use them immediately or extensively. However, there are occasions where I’d like to be able to really stretch my legs and put something unusual up on my own little corner of the web. As a software developer, I like to play with software. I really don’t have the time or desire to maintain the environment to do this sort of thing on my own, though. We all have to prioritize. I have plenty of work to do and very little of it is in this realm. So having the abilities mentioned available would allow me to, say, rewrite my site as a hilarious Elm application navigated by platforming around in a video game if I felt so determined. But, more importantly, it would make it possible to put my unique stamp out there when I wanted to, but, always have the convenience of publishing typical day to day articles out of Evernote all in the same container (Postach.io,) with no maintenance or hosting contracts or other tedium.

And, perhaps most importantly, more premium features could draw in more paying customers, myself included, and help ensure that the service I prefer to use continues to exist.