Software Designed for Actual Human Beings
What is custom software?
Let’s take the “custom” in the term “custom software” seriously. The word “software”, by itself, indicates the set of operating instructions used by a computer. To “create software” means to produce instructions that are read and followed by a machine. Rules translated into binary code, strings of 1s and 0s that the computer obediently follows. But insert “custom” in front of “software”, and we suddenly have a very different kind of animal. For by adding “custom”, we are adding the human being into the mix. And this changes everything. “Custom” means something made for particular, real, physical human beings. A custom suit is clothing tailored to a unique, individual body. A custom home is a dwelling built for a particular individual or family. Custom software is software created for specific, flesh and blood human beings.
noun : software created for real human beings
At KW Works, we take the semantics of custom software seriously. KW Works offers a wide variety of software services and technology solutions for companies of all sizes and industries. But at the most basic level everything we do is custom software. We create technology that helps the real human beings using it to achieve their specific goals easily and effectively. Software predicated on the imperative to help humans work better with machines. Software that doesn’t ask that people act like machines, nor expect that machines should act like humans, but amplifies the best part of each. We develop custom software centered on the human being using a unique process that we call humanistic software development.
Humanistic Software Development
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.”
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!
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.