Humanistic Software Development
Creating Technology that Helps People Do the Things that Matter Most
We always start with a question: how can software help the people using it perform the tasks they need and accomplish the goals they want? The answer: software should not ask people to think or act like machines but rather fundamentally acknowledge the people using it. Put the human being first in the design process. Software should let people do the human things they do best, such as relating to others, being creative, and working towards goals. Technology should inform and create calm and software should help people focus on the things that matter most to them. A person’s primary task should not be computing but being human. We call the process for achieving these objectives humanistic software development.
hu-man-i-stic soft-ware de-vel-op-ment
/hjumənɪstɪk sɔftwɛɹ dɪvɛləpmənt/
process : a way of creating technology that starts and ends with the human beings using it
Our software development process begins and ends with the flesh and blood human beings who are going to be using the software. You might call this an extreme devotion to the imperatives of high usability and optimal utilization. Writing computer code and architecting a system can be an arcane and abstract process. But there is nothing abstract about achieving a profound understanding of operational requirements, system specifications, user capabilities and conventions, tasks to be performed and goals to be achieved. It takes work. And listening to lots of people. And asking lots of questions. And then repeating back what we have heard and understood to make sure we’ve got it right. It takes true, honest, real communication and understanding. When software projects fail, and fail they unfortunately do industry-wide at a 50% rate, they fail overwhelmingly due to poor communication. Our process is designed to make sure that doesn’t happen. We have a 100% completion rate mainly due to this: we will make absolutely, positively sure that we understand a system’s ends before we start writing any code.
Humanistic Software Development
1
Begin with the End in Mind
Custom software is opinionated. It is a dedicated tool rather than a generic catch-all, a screwdriver rather than a Swiss army knife. It starts and ends with real people acting in distinct environments to achieve specific aims. As developers, the better we can grasp these factors from the start, the better the results. All our projects begin with an in-depth investigation of the software goals, tasks, users, and computing environments. In other words, we seek a clear and complete understanding of the software’s ends.
We call this perspective-taking, an attempt to see the world through our clients’ eyes, to get inside their heads, to understand their perspective. We try to achieve both an intellectual attunement of the objective circumstances and situational empathy for the people using the software in their actual computing environments. We believe there are both intellectual and emotional dimensions to creating software! The better software “fits” its users in their specific environments, the better they work, and the higher the ROI for organizations. We spend lots of time listing and asking questions at the start, gathering knowledge, achieving perspective. Considerably more than most other software development companies. We believe the results make it worth it. There is great wisdom in the carpenter’s adage, “measure twice, cut once.”
2
Doing The Right Things Right
We don’t put fingers to keyboard until we know what we need to do. Coding starts after we achieve perspective, after we know the software ends. Once we know we are spending time on the right things, we can focus on doing them right. A clear sense of purpose and an understanding of goals is essential, but so too is proper execution. An excellent strategy requires efficient tactical execution. In the words of Sun Tzu, “Strategy without tactics is the slowest route to victory. Tactics without strategy is the noise before the defeat”.
For us, good “tactics” means exercising proven, professional software practices, the consistent application of good programming principles, practices and techniques. Techniques such as rigorous unit testing, principles such as the separation of concerns, and DRY coding practices. We share these principles with people we admire and companies we benchmark against. Some of us have even taught these techniques to others at the university level. Clean, robust code is our goal, code that other programmers can effortlessly read, understand, and build upon. The way we begin the software development process with comprehensive perspective-taking is unusual, our “strategy” is unique. But our tactics, the way we write code, is based on common standards. It is deliberately NOT unique. We don’t write idiosyncratic code!
3
Finish With Integrity
The old proverb “the proof of the pudding is in the eating” is just as applicable to software development as it is in the culinary arts. Ultimately, the success of custom software is measured by the people using it. For that reason, we practice an iterative development process and strive to create prototypes rapidly and have real users take it for a spin early in the development process. We listen carefully to their feedback and incorporate elements that improve the efficacy. We typically have four stages of software release: alpha, beta, pre-release, and production. Each stage accompanied by user-testing, with a gradual increase in the number of users culminating in the final production release.