Organizational Structure
The people designing and developing a software solution are determined by the organizational structure. The structure determines if the software solution has a consistent set of people working on it or if subject matter experts (SMEs) and technical specialists are brought in for much of the work. For the sake of the software solution, retaining the people that originally developed it throughout the lifetime of the solution is usually optimal. Organizations using software created by external consultants can usually expect few developers to stay with the product for a long time. From the perspective of companies developing software for others, the solution is often delivered under a limited engagement and other developers fix bugs and make future enhancements. Matrix organizations, in which an employee, particularly a software developer reports to a manager regarding their performance and skills, but reports to a product or project manager regarding the work they are doing, can lead to ambiguity and conflict in prioritization of the employee’s expected duties and where they should allocate their time. Teams composed of people in significantly different time zones face challenges not experienced by teams located together. Small companies focused on developing a single product (startups) incur minimal impact from organizational structure as they have very little.
Examples of organizational structures:
- A small company with one team of developers that produces a software product for external customers.
- A large company with hundreds of developers writing software for many external and internal applications. Team members work on different products as they join different project teams for three months to a year.
- A consulting company that writes software for a client, then moves on to a new client.
- A mid-sized company with many developers that are specialists and specialists join teams temporarily as needed to work on projects. Developers report to both project managers and department managers.
- A small company with a few developers, each of which is solely responsible for the software solution they support for internal or external clients.
- A company with developers spread out around the world working on the same product.