You are skipper of a boat leaving the port trying to navigate the bay to some fantastic destination, out past the horizon. You have a chart, a compass and you can see some buoys. You plot a course that should take three hours.
Three hours later you are a bit miffed when you have run aground on a desert island.
When you are cruising around on a boat, the wind, tides and currents affect where your boat ends up. You can’t just set a bearing and expect to end up precisely where you intended. Instead you need to recalculate where you are and refine your bearings. The more recalculations you do, the closer you stay on course.
Releasing software is similar but even the destination changes. It’s obvious when you’re in control of a boat, but when releasing software it’s easy to forget that getting regular user feedback is essential to staying on track.
Communication is surely an important piece among the many moving parts in the releasing software machine.
Abraham Maslow is a famous figure in the field of psychology. Interestingly he only studied the minds he considered the healthiest of the population. Perhaps this perspective is how he came up with Maslow’s hierarchy of needs. The concept describes the various levels of needs and wants that a human should fulfill before they will desire to fulfill a goal in the next level. It is my proposal that for most non-trivial real world software systems, a similar hierarchy of needs is required to help give you a sense of how to best direct your development efforts.
I learned about Maslow’s hierarchy of needs many years ago at university in an introductory Psychology course. I had long since forgotten about the idea until recently, when after working as a developer at an enterprise software company for many years, I drew the analogy between Professor Maslow’s hierarchy and my own thoughts about prioritisation in the development process.
Initially I had simply been thinking about balancing the interests of customers and the company. What this means in practice varies, but generally speaking the customer’s interests should come first, since they are the person paying the money. If the customer’s interests are not paramount, you could be working for a failing company (or a government organisation :)). It’s also clear that the company has to consider how to best allocate its resources, which inevitably involves some kind of prioritisation. From here I realised that Maslow’s hierarchy provided a useful structure for showing the relative importance of the customer’s various needs.
Looking at it from a customer’s perspective, I have defined these general needs that map closely to Maslow’s hierarchy:
- Innovation/Improvement (Self-actualisation)
- Performance (Esteem)
- Cost/Usability (Belonging)
- Security (Safety)
- Existence/Deployment (Physiological).
Once again from a customer’s perspective, these are my justifications:
- Software does not exist unless it can be deployed and used.
- Once it can be used, they want to rest assured that they can use the software without any risk to their security. Some examples of things that need protecting could be health, property, employment, safety, etc. Customers invest a lot of trust in companies and software at this level, and breaking this trust is probably a deal breaker.
- After customers can securely use your software they want to be able to easily use your software at a competitive price.
- Once software is easy to use the next expectation is that the software meets performance expectations.
- After software is performing well the next expectation is that the software is not stagnant and is improving and innovating over time.
Keeping the software hierarchy of needs in mind might help you rationalise what the next priority should be for your software system.