Companies producing bespoke software for vertical industries or particular geographical regions
Independent software vendors that build, develop and sell consumer or enterprise software that is consumed by end users
Software service providers that can provide services like software implementation, customization, migration, consulting and training, but do not sell the actual software product. Example:
All of these may be categorized in one or many of the following:
contractual - when the software company is contracted to deliver some particular software from outside
product development - when it produces ready to use, packaged software; Commercial off-the-shelf
Common roles in a software company
Organizing a software company is very specialized type of management skill, where experienced persons can turn the organizational problem into a unique benefit. For example, having sub-teams spread in different time zones may allow a 24-hour company working day, if the teams, systems and procedures are well established. A good example is the test team in time zone 8 hours ahead or behind the development team, who fix software bugs found by the testers. A professional software company normally consists of at least three dedicated sub-teams :
Business analysts who define the business needs of the market
Maintenance engineers who are behind two, three or more lines of support
Consultants responsible for making the solution operational, especially if some specialist knowledge is necessary. Examples of this include: building multidimensional cubes in business intelligence software, integrating with existing solutions, and implementing business scenarios in Business Process Management software.
In September 2017, Allegion collaborated with Software companies to extend electronic access control options.
Structure
The manager of a software company is usually called the Head Of Development, and reports to the stakeholders. He or she leads the sub-teams directly or via the managers/leaders depending on the size of the organization. Usually teams of up to 10 person are the most operational. In bigger organizations, there are in general two models of the hierarchy: All the teams are fully independent and they work separately on the different projects. The structure is quite simple and all the employees reports to one person, what make the situation quite clear however it is not a good solution in terms of knowledge exchange and optimal usage of human resources. In this model there are dedicated managers/leaders for each main specialization, "renting" their people for particular projects led by product/project managers, who formally or informally buy the people and pay for their time. This leads to each private employee having two bosses – the product/project manager and the specialized "resource" manager. On one hand it optimizes the usage of human resources, on the other hand it may give rise to conflicts about which one manager has priority in the structure. There are also a number of variants of these structures, and a number of organizations have this structure spread and split within various departments and units.
Methodologies
Software companies may use a number of various methodologies to produce the code. These can include:
Regardless of the methodology used, the product life cycle always consists of at least three stages:
Design – including both the business and technical specification
C – the development itself
Testing – the quality management
Each stage ideally takes 30% of the total time, with the remaining 10% in reserve. The UMLsequence diagram of interaction between these groups may look like: At each stage a different group plays a key role, however each type of role must be involved throughout the whole development process:
Analysts, after completing the business specification, manage the changing business situation to minimize the possibility of change over time. They also support both programmers and testers during the whole development process to ensure that the final product fulfills the business needs specified at the start. The process ideally puts business analysts as the key players during final delivery of the solution to the customer, as they are best placed to provide the bestbusiness layer.
Programmers do the technical specification during the design phase, which is why they are called programmers/designers, and during testing time they fix bugs.
Testers complete the test scenarios during the design phase, and evaluate them during the coding phase
Systems and procedures
Well-run software companies possess various systems and procedures implemented and working internally across all the sub-teams. These include:
There are also Application Lifecycle Management, which embed some of these functionalities in one package and are used across the groups. They are delivered from various vendors like Borland, ECM or Compuware.
Efficiency audits
Well-established software companies typically have some way of measuring their own efficiency. This is usually done by defining the set of key performance indicators, such as
Estimated time of task comparing to the real time of the task
Number of corrections to the baseline
A number of organizations are focused on reaching the optimum level of the Capability Maturity Model, where "optimum" does not necessarily mean the highest. There are also other systems such as Carnegie-Mellon University's SEMA, or particular ISO standards. Small software companies will sometimes use less formalized approaches. Each organization works out its own style, which lies somewhere between total technocracy and total anarchy. Whichever way the organization goes, they consider the pyramid describing the cost and risk of introducing change to already-begun development processes: