Recently I’ve been thinking that Software Development is a game. The goal of this game is to discover and implement the best solution for customer’s needs. There are other important goals as making money, empowering business or keeping people happy, but they matter less for the purpose of the game.
External Elements of The Game
These elements are external and players don’t have much control over them: Needs, Context, Constraints
Any solution should satisfy some needs. These needs could be satisfied differently – from using beaten tracks to finding absolutely new ways. Discovering the best solution is a challenging goal as needs are unclear at the beginning and change during the game.
Characteristics of typical needs:
- inaccurate – people often cannot come up with correct needs; people have communication gaps, misunderstanding, lack of knowledge and experience.
- moving – needs are constantly changing because people, organizations, business and markets are changing; also people better understand their problems, real needs and experience solution as the game unfolds.
- contradictionary – needs often represent conflicting people interests (customer groups, various stakeholders, politics) and incompatible system goals (functionality, performance, usability)
- complex – our civilization, society and business advance forward, face more challenges and bring more and more sophisticated needs and requirements
A good solution requires well understood and stable needs, which are very difficult to achieve in the non-trivial instance of The Game. Therefore, seemingly the best solution can easily turn to be useless by the end. This is the greatest challenge of the game.
The game is played in a specific context: organization, market and technology. Even the best solution could conflict with organization culture, fail on market or become technologically unreliable and costly. Context greatly influence a solution and make each game very unique and unpredictable.
Discovery of the best solution will always have some limitations. The most famous are money and time. Constraints limit what is possible and bring down to land fantasies and plans of the players.
Players and Core Elements of The Game
Players have control over 3 core elements – Ideas, Actions and The Solution.
Software team members cooperatively try to discover and implement the best solution. They have
- knowledge – domain, design, programming, methodology, theoretical and practical
- experience – intuition and tacit knowledge formed by years and many projects, successes and failures
- capabilities – skills, intellect, motivation and discipline
Players have two most important responsibilites: generate ideas and execute actions. Players are very different – some players are more creative and can come up with great ideas, some are better in execution and making sure that things are done.
Ideas are the moving force of The Game. Their quality directly impacts quality of The Solution. Players come up with ideas concerning
- How do we understand needs?
- How do we translate them into a solution?
- How do we meet constraints?
- How do we ensure the solution success in the given context?
Ideas come from 3 main sources:
- innovation – new ideas coming from research, brainstorming and creative insights
- improvement – enhancements and optimization of existing ideas
- adoptation – borrowing and reuse of external ideas from competitors, experts and other domains
Software ideas dimensions with examples
|Philosophy||Usability, Simplicity, 80/20 rule||Object Oriented Programming and Design||Agile|
|Strategy||Roadmap, Vision, Market Analysis||Platform, Architecture||Iterations, Planning, Self-Organization|
|Implementation||User Stories / Requirements||Code, Web Design, Database||Unit Testing, Pair Programming, Refactoring|
Players should find the best set of actions to translate ideas into the solution. Actions are outcome and execution of ideas. Quality of execution matters – even the best ideas could fail because of bad implementation. Actions and getting things done are practical and very important part of the game.
The Solution is the ultimate goal of the game. Players deliver the solution to customers and users and make them happy or unhappy. Players win if they discovered and implemented the solution that satisfy client needs, succeed in specific context and meet all constraints.
Afterword and Foreword
Why am I doing this seemingly impractical brain exercise in this post? The goal is creation of a simple mental model for thinking about software development and for my future posts. I want to avoid all the noise that come from different factors and specifics of individual software projects. People like to make things complicated (see CMMI or PMBOK). I want to focus on the simple and pure mechanics of software creation (or The Game). I like to play and win 🙂
Does this simple model makes any sense for you?