Creating great software is a challenging vocation. Why? There really are not many people who are good at it, and others of us make it our lifelong challenge to come close to being adept it.
If you have ever hacked out a program or coded a script then you probably understand the first basic skills one needs to develop. These skills are the ones necessary to claim a basic competency in programming. They are a grasp of algebraic math and understanding of some programming language. These two skills are necessary to write code. Writing code is what I call the first basic skill of creating good software.
Those two basic skills will get you an entry level job writing software.
The next competency up might be an understanding of the environment the software is running in. The term ‘architecture’ is often used to help describe how the various inter-related parts of the software fit together with the hardware. Interrupts, communications, and other real time issues can be a particular hurdle. I would argue, and I doubt anyone would disagree, good software has good architecture.
Above this basic skill is what I call 'Specialized Knowledge'. For instance,
that may take the form of some specialized knowledge of 3 dimensional transformations,
or knowledge of some communications protocol.
Another basic characteristic of someone adept at writing Great Software is that he or she is able to analyze a task and formulate a plan that breaks the task down into smaller tasks. They are logical thinkers. I probably should have put this characteristic first, but I wanted to place it here to contrast it to a next skill I believe is
required to master the art of creating good software.
This next skill is definitely higher (in my mind) up the food and abstraction chain.
Most software is exposed in some way to people (here I am addressing that segment of software). A good software designer understands how chosen varieties of targeted people interact and get tasks done. They endeavor to understand the emotional reaction people have with certain colors, placement, shapes and types of controls. They research how people actually try to get a task done, as opposed to writing code that implements the easiest route to how a computer gets a task done. The previous skill, breaking a task down, is dependent on this people observation skill. Good Software has an ergonomic component. The ergonomic component is equally important with a sturdy functional program in giving a customer a satisfied experience with the product.
There is definitely more to writing Great software.
The last skill I will discuss here to create great software is an understanding of the product market. [I do not mean to imply these are the only skills, just that this is the last one I will discuss in this article.] The skills I listed up to now would let a person create a functional program that gave the customer a good experience. We are interested though in what makes “Great” Software, with a capital G. Now, there is a lot of great software that was not written to be marketed either alone or with some hardware. Marketing may not be required for those types software. An example might be a piece of software written
to test another product. I am not discussing that type of software here.
Further I am discussing marketed software that uses the metric of company profit to determine its success. Yes, there is much software that is successful,
but does not make a profit. I am not talking here about that either.
The Great software I am discussing here, with a capital G, is that which has proven
itself in the market by making more profit than its competitors.
The marketing aspect is probably the greatest challenge to creating Great Software. It involves trying to fully understand your customer, the intended applications, uses/modes/applications not yet conceived, and the competition. It involves creating software based on the conventional and winning market share using the unconventional. It involves making design choices based on cost and ROI. Great Software is designed to win.
Great software may be unnoticed and taken for granted or it may be ‘in your face’. For instance Google Search is taken for granted by the vast majority of its users. The ease at which we can search using this service is a lie. Underneath Google has gone to great lengths to give the appearance that providing relevant search results is easy. The placement of each paid and unpaid search result, and what happens when
someone clicks on a result, is part of their Great Software marketing.
Perhaps the feature of product cost and ROI ties together all the aspects of Great software and great software design. Only a software engineer with intimate knowledge of the product, market and technologies involved can make the choice of which computer language provides the most benefit to the customer and which will lead to expensive
development delays.
Centric to understanding the market is an understanding of the customer and their relationship to the company and software. The salespeople, manufacturing, support/service, and CEO each have a unique viewpoint of how the product should best be directed to satisfy the needs of the company. These unique views need
to be integrated in the expression of your product.
What then is the role of the pure marketing person? Certainly to identify market niches and needs, determine product directions, create sales material, and other tasks normally associated with marketing. In addition the task includes communicating and educating the software designer (and other in the company) and visa-versa. The software designer
should educate the marketing person on the difficulties and opportunities. Both can and should work together to collect objective marketing
data where ever possible or where disagreement exists. The goal is a successful
product, not personal objectives or satisfaction.
Great software, by nature of its interaction with the customer, can create an emotional re sponse
as well. Hopefully the response is not negative. For instance, certainly there are more inexpensive choices of music players on the market, such as the Sandisk Sansa, but there are certain people who LOVE their iPod. There is an industrial and art design aspect to the device People love; the look and feel of their iPod. Part of the feel of the iPod is the hidden software technology in making the iPod function smoothly for a wide variety of people.
Therefore, to effect a great software design an intimate understanding of the customer and application is necessary. Close ties to the salespeople and actually running
through a bidding process or sale can lead the software designer to implement a
critical design decision. Going on service calls can help the designer understand
the obstacles to 100% customer delight. The market is a vast arena with room
for the competition to out maneuver you.
The wider the range of angles the product is view by the software designer the more
opportunity there will be for market success. |