Common sense about the software business
Information Technology (IT) has become a cornerstone and an enabling force for people, organisations, societies and nations worldwide. If you take any modern, forward thinking organisation or enterprise or government institution, in any country for that atter, IT plays a major role to fulfill their purpose and objectives. In Sri Lanka, IT has penetrated every enterprise that is either providing a service or functioning in an intermediary role facilitating commercial activity in the local economy. The utilisation may be at various levels but diversified enterprises as well as those serving a large customer base with multiple delivery channels may require enterprise level IT utilisation.
Information technology underscores a whole gamut of techniques, tools and devices for the transmission and processing of data to create information and knowledge. As much as there is a value chain for any activity of any enterprise, there is a similar value chain with any IT process. In the IT ‘value chain’, there is dependency at each stage to ensure guaranteed delivery of the payload to meet time and quality requirements. The coordination of these technologies is performed by the ‘glue’ called software that operates in the digital world to deliver the promise of IT to the end user. Whilst technology has developed at a rapid pace software may not be able to maximise on the full promise offered by technologies that are part and parcel of IT. Why is software lagging behind hardware?
Software is everything that comes with a computer system that is outside the ‘touchy feely’ hardware. Often, software is equated to the artifact created by software engineers called the programme that makes use of a computer for some purpose such as to maintain your personal accounts; catalogue your digitised family photos or play any game from Minesweeper to Limited-Over Cricket. Programmes are just one of many other artifacts that are always provided with software. Usually software will include the media like a CD-ROM that will contain the programmes that are installed and activated to operate in the computer. Software will also include the user manual and the license document that explains the legalities and the contractual relationship between the software provider and the end-user.
Programmes could be further categorised as systems programmes and application programmes. Normally, systems programmes are provided with the computer and that facilitates the general use of a computer. The operating system and the web browser fall into this category. Application programmes are normally created by software engineers using programming languages in consultation with human beings to either replace a repetitious and time consuming activity or an operation that requires a large workforce with a high probability of errors and omissions. In common parlance, the programmes are equated to software and other artifacts are termed as documents.
Software engineers are the human resource that is entrusted with the creation of software, in its real sense. Not all software engineers are the same: the junior software engineer may only know how to make use of a programming language or a software tool to give an expressive meaning to a real-world problem using a computer. There are software engineers who have acquired knowledge of a domain such as Banking, Accountancy, Logistics or Engineering through educational qualifications or by working in a particular domain over a considerable period of time. Then they will be called in to perform domain analysis or problem identification or requirements elicitation. Otherwise, they may interact with the domain workers to refine the software that is developed. Then further along the way, there are software engineers who ‘see’ several solutions and play the role of architects similar to architects in the construction industry.
Architects are the real designers of the software by making use of various notations and the knowledge of design patterns to create a robust solution. There are software engineers who have the knack of detectives, to test the software to ensure that it performs in accordance with pre-determined and agreed requirements. Software Test Engineers evolve into Software Quality Assurance Engineers but these folks ensure that the software value chain adheres to established standards as well as take corrective early action that may otherwise result in a waste of time, money and effort. Then at the higher echelons of the software engineering community there are two experienced software engineers: the project manager who will plan, coordinate and manage the delivery of the software as a solution; the Product Manager who will generalise the software in to a product and manage its life cycle to create more value to the potential user.
Software Engineering is not an easy undertaking. On one hand, it is a highly abstract human endeavour. On the other hand, it is a time consuming, error prone, human drama that is a veritable nightmare unless the effort is well planned and human resources are well managed. The human effort is essential though facilitated by nifty tools, automation and fast computers.
The front end work of software engineering like problem definition, requirements identification, architecture and programming requires the abstract thinking and multi-dimensional faculties of humans.
This complication is further exacerbated by rapidly developing software tools such as operating programmes and software development tools that also change to be on par and compatible with developments in Information Communication Technology. Software engineers need to write their thoughts, ideas and their grasp of users’ requirements, business rules, usability criteria and other matters as these issues need to be properly addressed during and after software development. However, conventional wisdom among software engineers is that documenting is a time wasting exercise. Management of software companies need to drive the message that documentation is a must and the customer should also demand and even take to inspecting and reviewing software documents. Software documents will become part of the organizational knowledge base; it will provide a regressed view of the thinking that was employed during the actual development of the software. It could be reviewed by new software engineers to acquire knowledge rapidly without resorting to crude methods of knowledge acquisition. Availability and presentation of software documents will be a reflection of maturity of the company and its software engineers.
Almost always, software is developed for a community of users, normally called end-users. Developing software for a single, highly specific user may not be worth the effort unless otherwise it carries a hefty price and there is a strategic benefit or the common good. Since the software industry is part of the national economy, it is also affected by internal and external factors that either enhance its viability or threaten its survival.
When software is developed, it will only be useful if it is created for a purpose to achieve one or more objectives; the purpose and objectives may differ and depend on the target user or industry. Therefore, software will be developed as a solution or workaround to minimise, overcome or eliminate a problem or it could be provided to enhance the quality of life of a target user population. In the former case, the target user could be an entity such as an enterprise (bank), organization (library) or the government and in the latter case, the offering is in the form of a product to a target user community that could be performing a specific activity (PC user) or operating in a specific business environment (exporters) or a vertical market space (financial services). Usually, software originates as a solution (operating system of a personal computer) and thereafter evolves to be a product (Microsoft Windows)
Software should always create value for the end-user; customer acceptance and fitness for use or perceived quality is highly important. The value provided to the end-user will determine its market price though competitive pressures may not be present unless the software can command the mass-market appeal. The value of software is generally maintained by continuous improvement to ensure that its quality is always maintained in tandem with user requirements and operational requirements. Concurrently, software needs to be supported by dedicated teams of software engineers; information technology infrastructures and support services to serve customers and handle business and financial transactions. Therefore, software needs to be priced as costs are incurred to develop and deliver solutions or products and a reasonable margin has to be included for profit, a portion of which would be ploughed back into the development of the human resources and the organisation.
The software company is just like another business enterprise. Market forces and economical trends affect its continuity thereby creating qualitative changes in its structure and business profile. It has to safeguard its human resources as retention is a contention in a highly competitive industry where other enterprises may be willing to acquire resources by offering above market terms. Therefore, software companies may not serve certain markets, organizations and enterprises if they are unable to come to accept and accommodate business practices of those market players.
These business practices could be artificial barriers to entry; irregular payment for services and lack of disregard for intellectual property. Certain software companies may focus only on markets based on their perception, experience and recommendation as being open, transparent and integrity in their business transactions.
Software companies come in all shapes and sizes. Some are start-ups, some may be well established and highly profitable and others may be seeking business to survive in the short term and a few may be in the throes of dying but not showing that in its demeanor. It is up to the software company to be open and honest about their business but the customer should also perform the due diligence to assess the capability of the software company. Some use glossy brochures and extravagant web sites to promote their company while others depend on referral marketing using their customer base. Finally, it all boils down to the real value a software company is capable of delivering to the customer. It is pertinent to mention that there is a difference between small and big software companies. The small software companies are sometimes more agile than their larger counterparts. Their staff is highly skilled, dynamic, competent and ever willing to role-up their sleeves to get the job done. Highly successful companies may lack the interest to work on software to solve problems of small companies as they may be dissuaded to commit resources that bring them less value.
Therefore, software companies and enterprises operating in a particular market needs to mutually respect each other in order to produce fruitful results in their relationship. For the software company, it should not be the be all and end all; it should not try to bite more than it can chew and always act with integrity and be always transparent with its stakeholders. There is an intrinsic responsibility for a software company to respect intellectual property of its customers and competitors as much as safeguarding its intellectual capital from external forces. The software company should never compromise the trust bestowed on it by its customers. Finally, the software company should always be seen to be delivering on its promise whether that is delivering quality software on time or ensuring that the customer is never maligned through unethical business practices. Software engineers need to be flexible, adaptable and persevering to navigate internal politics; manage the resistance to change and become ‘one’ with the customer throughout the engagement. Finally, the software company should respect and tend the business relationship it has with the customer for long term, mutual gain.
On the other side of the equation is the customer. How should the customer fulfill its obligation to the software company? The customer should always try to maximise resources offered by the software company. This could be done by making a commitment at the highest levels of their company to see to the successful completion, delivery and implementation of the software.
The customer should engage the software company as a partner – even if it’s a short term engagement – to develop their company: specifically their understanding of own business operations; IT literacy of their human resources and seek views and opinions of the software company for the development of their IT capability and utilisation.
The customer should provide prompt feedback and constructive suggestions to obtain an improved level of service from the software company. Last but not the least, the customer must ensure that the software company has to beg for payments due to them and affect payments according to a well defined schedule. In that way, the customer could ensure the long term survival of the software company as it would be an enabling partner unless it is disabled prematurely by the customer.