If you want to build a ship, don’t herd people together to collect wood and don’t assign them tasks and work, but rather teach them to long for the endless immensity of the sea. – Antoine de Saint-Exupery
I have a dream about a company that always makes users happy. The company that quickly builds high quality, simple and usable software that fully meets user needs. The company that reacts rapidly on customer demands, anticipates new needs and immediately use these opportunities. The company where people are happy, motivated and could realize their potential, dreams and life goals. The company that is successful on market and in the hearts of users, investors and employees. The Ideal Software Company.
What are the main problems with building software? What are contributing factors to these problem? What prevents many existing software companies from being ideal?
- Unclear, incomplete or misinterpreted user needs. The software programs often don’t solve needs on adequate level, have bad usability and contain many unused features.
- Difficulty to estimate required effort. Missed deadlines, doomed schedules and budget overruns are the common deceases in software development.
- Inability to adopt to changes. Often it is even impossible to estimate effort at the beginning as many things are changing during the course of the project: customer needs, performance requirements, business context. But for many software companies these changes still bring chaos to their projects.
- Poor, rigid or low quality solutions. Implementation defines project success. Talent, experience or knowledge are necessary to build good solutions, and they are often missing in the project teams.
The main reasons for these problems
- Top-down decisions – only few people make decisions with limited information, lack of feedback and independent information
- Poor aggregation of information from different sources
- Lack of diversity: homogeneous groups that are responsible for only specific aspect of the project (requirements, design, programming, etc.)
- Lack of accountability for the end results, mismatch in company and personal employees goals, politics and suboptimal decisions.
- Low motivation and morale – minimal control over decisions, poor relation of incentives and payout to contribution into the company success.
- Centralization – authoritative control causes inflexibility, lack of independence and adaptability; missing local tacit knowledge in decision making.
James Surowiecki in his book The Wisdom of Crowds clearly shows that traditional top-down companies are inefficient in making the best decisions.
The Ideal Software Company
A. Company organization
- Powerful teams – the company represents a conglomerate of powerful teams. Projects teams are small, diverse and empowered to make most project decisions.
- Egoless management – management carry mostly support, coordination and representation functions. Leadership is moved to the teams level. Top management is a consulting body, which includes highly skilled professionals in finances, technology, sales, etc.
- Shared and competing infrastructure – company infrastructure could include services as hosting, customer support, recruitment or distribution. These in-house services are shared and compete with outside providers.
B. User needs, product and feature ideas
- Generate many alternatives – the company uses diverse sources (internal, user community, paid analysts and experts, etc.) for ideas generation
- Predict most successful ideas – the company establishes prediction markets for deciding forecasting most successful ideas with large group of participants – customers, user community, domain experts, managers, designers, and developers. They make independent guesses based on their private knowledge.
- Select the best ideas – any team could use this information to sign up for implementation of the product or feature ideas.
C. Team is a business unit
- Full responsibility – a team is ultimately responsible for all decisions and end-results. The team selects product ideas, come up with solutions an implements them.
- Diverse teams – teams are diverse, self-sufficient and include people with different background, areas of expertise: marketing, domain experts, UI designers, developers, system administrators, testers, customers and community representatives.
- Organic composition – the team can choose its composition, hire (or outsource) an additional or remove poor performing member; selects in-house or outsourced services (hosting, customer support, etc.)
D. Team formation
- Talented people – the company hires talented people with diverse background, skills and experience. The only requirement is high qualification, creativity or expertise.
- Easy start – Anybody in the company can initiate and assemble the team for implementation. The team applies to the internal VC group (see below) for financing and approval of the project.
- Easy scalability – the team can contribute to open-source projects (at least for non-core and non-competing features and modules) and easily scale beyond company borders.
E. Sharing and learning
- Shared best practices – the company promotes the best practices, tools, designs, conventions and approaches from internal and outside sources. Teams are free to select and use any of them.
- Cross-team training – the company organizes cross-team knowledge sharing and training.
- Continuous improvement – the company encourages regular reflection and continuous improvement sessions, where the organization, processes, company and teams interactions are scrutinized and changed.
F. Financing, incentives, internal market
- Internal Venture Capitalist group (VC) – the company has something like Venture Capitalist (VC) group, which includes management, investors representatives and leaders of top teams that approves and finances new projects and teams. Teams are starting with minimal budget that barely covers their first needs.
- Team value market – The company has internal market for the value of each team. This value is linked to success criteria established by company: (revenue, number of users, cost saving, use inside company, buzz).
- Pay based on performance – Team budget, payout and incentives are directly corresponding with their value. More successful teams will get more money, resources and influence in the company. VC group disassemble unsuccessful teams. While any employee has guaranteed minimal salary, the people who doesn’t contribute in any team will be fired. People who performs will be very well rewarded.
- The company in time of emergency or especially large projects can force creation of special task teams (as National Guard). Company leaders should approve this temporary mobilization and limit impact on other projects
The Ideal Software Company should overcome most barriers.
- Teams are diverse, independent and make most decisions. Information flow is free and the company ensures that teams receive it most effectively.
- Individual income is directly linked to their team performance (but not individual contribution inside the team). Teams compete with market not between themselves.
- Teams can still uses benefits of centralized services, coordination of activities and shared knowledge. Company organizes prediction markets, internal VC group and provides financing of the projects.
- The system is adaptive, lean and focused on the market and user needs. Bureaucracy is almost absent, the company need only few coordination mechanisms, the approach is compatible with our human nature and self-interest. It is combination of adaptability of decentralized and power of coordinated system.
What if we have only one team? We receive a small, lean and powerful startup. As a startup becomes bigger, it is often turns into inefficient traditional corporation with hierarchical control. Many startups lose their flexibility and adaptability once they become bigger. The Ideal Software Company should avoid this fate with the growth.
Is it possible?
I see many potential problems with creating The Ideal Software Company – political (most managers are not egoless), economical (internal financing schema, appeal to investors), organizational (new ways to employ people). But I believe it is possible.
Agile development processes (Scrum, Extreme Programming, Crystal Clear) are changing the role of people and teams in software companies. I know few companies that are close to the ideas of The Ideal Software Company. Google in software world, 3M and Toyota in manufacturing. Google has free flow of ideas, powerful self-organized teams and attention to user needs. 3M has entrepreneurial cross-functional teams with focus on business goals. Toyota become #1 auto manufacturer because their Toyota Production System gives unprecedented power to the teams and continuous process of improvement and solving root problems.
Is The Ideal Software Company utopia? What do you think?