Technology Vision

Values

Several values guide my software development process. These values have been refined and tested over time to achieve a pragmatic methodology for long-term software development strategies.

When these values are cultivated, they result in empowerment.

Simplicity

Software should be as simple as possible. This does not mean that software should try to be too simple (reductionism), but that the simplest solution to a problem is usually the best and most easily extensible. Software tends to be simple when a problem is understood. The simplest solution to a problem becomes evident upon understanding the problem.

Atomicity

It is simplest to build software with reusable parts, each of which solves a conceptual problem. In this sense, software design becomes an art not of technical skill, but of divining which parts make the solution, which parts may be extended to solve the problem, and which parts must be crafted anew. This tool-based approach to software development relies heavily on understanding what is desired and leads to software with clear intent with flexible and reusable components.

Architecture

Software should have a clear and robust architecture that definitively serves its ends, much as a physical structure should directly serves its purpose.

Informational Density over Presentational Density

Content should be high in informational density. If the user wishes to navigate and use the content, the user should be able to.

Software should look and feel clean to use. To the extent there is complexity, it is because the system itself is complex and it is impossible (wrt to the problem statement) or undesirable to present to the user in simpler form.

Evidentiality

The purpose of software should be self-evident.

Tool-based Approach

All other factors being balanced, I tend to take a tools-based approach to software development as well as other software related tasks. For a given problem set, I endeavor to develop or utilize reusable software tools in an archtecturally robust combination to produce a good software product. Approaching this from a tools/component-based perspective provides a reusable set of software for attacking future problems, as opposed to centering on an integrated solution (a software monolith). These are tools that others can use as well, towards the end of furthering the collective state of computer science through problem decomposition.

Empowerment

The cultivated value of my vision is empowerment. People should be able to use information (including software) however they want. They will be happier and there will be more accountability. To the extent that computer knowledge is arcane, the internet is the province of those that either possess arcane knowledge or those who may dictate those who possess arcane knowledge. To the extent that the power to use and manipulate information is a public good, collective understanding and empowerment will be achieved.