Last night I had a dream where I was talking with a friend who told me he needed an app for his new company. We were discussing the purpose of the app, and I asked him “how will you create the app?” His response, “I’ll manage the process myself.”
At this point in the dream, the conversation stopped, and my thoughts took over… I’m now dreaming about thinking…
How will he manage developers and he knows nothing about software creation? How will he confirm whether deliverables are good or bad? How will he have time to develop his business and manage?…
I’m no dream whisperer, but I do know where this mental anxiety stems. I used to volunteer as a technical expert to startup founders through a nonprofit. At the beginning of creating a company, startup founders are doing almost everything themselves. This is problematic for software creation, which is one of the reasons the minimum viable product and agile methodologies are popular in the software-startup world. These are methodologies that allow a business to start with little resources and scale its app as the business scales.
The reason I have anxiety about people managing the creation of complex software ideas with no experience is that delivering software the right way is hard! Not hard in the sense that the work is strikingly more difficult than other engineering work, but because to create software is create something that will change.
When an architect designs a building, she is designing something that will not structurally change. However, a software team is creating something that will change, and likely within the next 6 months. This type of creation adds additional layers of challenges, such as designing for flexibility, and constant customer communication and feature prioritization.
This is in addition to the normal challenges of software creation, such as usability, team -to- management -to- client communication, balancing technical constraints and requirements, etc.
This is my analogy to highlight the balance needed for creating and delivering good software:
Software Management Balance
One the left side is a building. The building represents the architect and builders who create a structure. In their industry, they have well-defined standards. Once the plans are complete and the ground is broken, the building proceeds to completion (this is an oversimplification, but bear with me).
On the right side is a garden. The garden represents a landscaper who understands the flowers and trees need to be planted in a layout that is visually appealing, but also flexible for change. When a plant dies or the season changes, the garden will change and evolve.
Software creation and delivery is a balance between these two analogies. The architect represents structure and guidelines. It is good for managing and staying on schedule. Too much “architect” means the software will likely be biased and not have enough flexibility to satisfy customer expectations.
The landscaper represents flexibility and is good for accommodating changes and future scale. Too much “landscaper” will create a product that is so flexible it is difficult to support and manage.
Being good at delivering software is understanding this balance and identifying areas for concern – recognize where the project is tilted on the scale and work with team members and stakeholders to balance project direction.
For example, if the customer doesn’t communicate well, the project will naturally steer towards the architect, created based on team bias and may not deliver the customer’s expectations. To maintain a balance, extra effort should be made to get client feedback.
On the other side of the scale, if client requirements are not distilled and clearly communicated to the technical team, the project may incorporate too many ideas, becoming overly flexible and difficult to manage. In this scenario, effort should be made to communicate information to team members without ambiguity.
In conclusion, delivering good software is a constant balance of maintaining software standards for reliability and maintainability, while also managing for flexibility to change. While at the same time, accounting for user experience and technical scale.
If I could have added to the dream conversation with my friend, I would suggest that he get someone experienced with managing software (or a developer) to manage the app creation and delivery. And he should take a product manager role, where he interacts with potential users to identify features that will make the product a success.