Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Software company
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{short description|Company that develops software}} {{Multiple issues|{{more citations needed|date=June 2024}} {{Essay-like|date=June 2024}}}} A '''software company''' is an organisation β owned either by the state or private β established for profit whose primary products are various forms of [[software]], software technology, distribution, and software product development.<ref>{{Cite web|title = What is a Software Company Today?|url =http://redmonk.com/sogrady/2014/03/19/software-company/|access-date = June 2, 2017|publisher = RedMonk.|date = 2014}}</ref> They make up the [[software industry]]. == Types == There are a number of different types of software companies: *There are companies selling available to use [[commercial off-the-shelf]] (COTS) products. *Many [[companies]] provide Software Development services, and have a structure to develop [[custom software]] for other companies and businesses. *Companies producing specialized commercial off-the-shelf software. *Companies providing Software as a Service ([[SaaS]]). *There are also other types of SaaS products, of companies providing IT infrastructure services and Cloud Computing services. *API as a Service, that allows third party developers to interact with a company's software. *Companies producing [[Third-party software component|software components]]. *[[Application Service Provider]]. *Companies producing [[bespoke software]] for vertical industries or particular geographical regions. *[[Independent software vendor|Independent software vendors (ISVs)]] that build, develop and sell consumer or [[enterprise software]] that is consumed by [[End user|end users]]. == Common roles in a software company == Organizing a [[software]] company is a 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 a time zone 8 hours ahead or behind the development team, who fix [[software bug]]s found by the testers. A professional software company normally consists of at least three dedicated sub-teams : *[[Business analyst]]s who define the business needs of the market *[[Software developer]]s who create the [[Specification (technical standard)|technical specification]] and write the software *[[Software tester]]s who are responsible for the whole process of [[quality management]] In bigger software companies, greater specialization is employed, and quite often there are also: *[[Technical writer]]s who write all the [[Software documentation|documentation]] such as [[user guide]]s *Release specialists who are responsible for building the whole product and [[software versioning]] *[[User experience design]]ers, who are creating the design architecture based on business requirements, user research and expertise in [[usability]] *[[Graphic designer]]s who are normally responsible for the design of the [[graphical user interface]]. *Maintenance engineers who are behind two, three or more lines of support *Consultants are responsible for making the solution operational, especially if some specialist knowledge is necessary. Examples of this include: building [[Multidimensional scaling|multidimensional cubes]] in [[business intelligence software]], integrating with existing solutions, and implementing business scenarios in [[Business Process Management]] software. == Structure == The manager of a software company is usually called the Head Of Development (HOD),<ref>[https://books.google.com/books?id=XvFxROsje8gC&dq=%22Head+of+Development%22&pg=PA12 Greenlit: Developing Factual/Reality TV Ideas from Concept to Pitch p.12]</ref> and reports to the [[stakeholder (corporate)|stakeholder]]s. 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: [[File:SoftwareHouse-ClassicStructure.jpg|none|thumb|550px|Typical structure of a software company]] 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. [[File:SoftwareHouse-MatrixStructure.jpg|thumb|550px|Matrix structure]] 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 [[organization]]s have this structure spread and split within various departments and units. ==Methodologies== {{main|Software development process}} Software companies may use a number of various methodologies to produce the code. These can include: *the [[waterfall model]], including project management methodologies like [[PRINCE2]]<ref>[https://books.google.com/books?id=9Oa2MFvhRlMC&q=prince2 Managing successful projects with PRINCE2]</ref> or [[PMBoK]]<ref>[https://books.google.com/books?id=3mvnx1FA8e0C&q=pmbok A User's Manual to the PMBOK Guide]</ref> *[[agile software development]], such as [[Extreme Programming]]<ref>[https://books.google.com/books?id=ms9jTEm8aeEC&q=extreme+programming Planning extreme programming]</ref> and [[SCRUM]]<ref>[https://books.google.com/books?id=RpYX01XVMksC&q=SCRUM Agile Project Management with Scrum]</ref> There are also some methodologies which combine both, such as the [[spiral model]], [[Rational Unified Process]] (RUP)<ref>[https://books.google.com/books?id=7FSf5661dfMC&q=RUP The rational unified process made easy: a practitioner's guide to the RUP]</ref> or [[Microsoft Solutions Framework|MSF]].<ref>[https://books.google.com/books?id=KiYW_F9xaakC&q=MSF Microsoft Solutions Framework (MSF): A Pocket Guide]</ref> ==Product life cycle== Regardless of the methodology used, the [[Product lifecycle (engineering)|product life cycle]] always consists of at least three stages: * Design β including both the business and technical specification * Coding β the development itself * Testing β the quality management Each stage ideally takes 30% of the total time, with the remaining 10% in reserve. The [[Unified Modeling Language|UML]] [[sequence diagram]] of interaction between these groups may look like: [[File:SoftwareHouse-GroupsSequence.jpg|none|thumb|550px|The general interaction between the four main groups]] 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 best business 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 == Software companies possess various systems and procedures implemented and working internally across all the sub-teams. These include: ===Business analysts=== *Modeling tools like [[Sparx Systems]] [[Enterprise Architect (software)|Enterprise Architect]] or [[IBM]] [[Rational Rose]] ===Programmers=== *[[Version Control System]]s and [[software versioning]] procedures *Code analysis tools and [[coding standard]]s, [[Verification and Validation (software)|validated]] manually or automatically *Deployment mechanisms ===Testers=== *[[Bug tracking system]]s *[[Test automation]] tools *Performance and stress test tools ===Project/product managers=== *[[Enterprise Project Management]] (EPM) systems and procedures *[[Product portfolio management]] (PPM) *[[Change management (engineering)|Change management]] systems and procedures There are also [[Application Lifecycle Management]] (ALM), 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 indicator]]s (KPI), such as *The average number of bugs done by the developer per unit of time or [[source lines of code]] *The number of bugs found by tester per test cycle *The average number of test cycles until [http://blogs.technet.com/victor.pearson/archive/2005/12/01/415400.aspx Zero Bug Bounce] (ZBB) *The average time of test cycle *Estimated time of task comparing to the real time of the task (exactitude of planning) *Number of corrections to the baseline [[File:SoftwareHouse-ChangePiramid.jpg|thumb|Pyramid showing risk, time, and financial cost of introducing changes]] A number of organizations are focused on reaching the optimum level of the [[Capability Maturity Model]] (CMM), where "optimum" does not necessarily mean the highest. There are also other systems such as [[Carnegie-Mellon University]]'s [[SEMA (association)|SEMA]], or particular [[International Organization for Standardization|ISO]] standards. Small software companies will often use light-weight approaches to their process, formalized or not. Each [[organization]] works out its own style, which lies somewhere between total technocracy (where all is defined by numbers) and total anarchy (where there are no numbers at all). Whichever way the organization goes, they consider the pyramid describing the cost and risk of introducing change to already-begun development processes as a true model to manage changes. ==See also== {{Portal|Technology}} * [[List of the largest software companies]] ==References== <references /> {{Authority control}} [[Category:Software development]] [[Category:Software companies| ]] [[Category:Knowledge firms]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Authority control
(
edit
)
Template:Cite web
(
edit
)
Template:Main
(
edit
)
Template:Multiple issues
(
edit
)
Template:Portal
(
edit
)
Template:Short description
(
edit
)