Deliver to Primary Persona first
Imagine:
We have a straightforward, early-stage eCommerce system that allows us to display the digital products we want to sell.
We have 3 courses that we sell today.
We have an unlimited number of licenses for these 3 courses in stock.
We are also working on the 4th course, but we want to start selling this one the next month.
We have a separate service for storing Product information, and we must use it (do not ask me why).
It is the current architecture:
The sequence goes like this:
Customer enters the website.
Simple UI is rendered.
Frontend is getting the available products and prices from the eCommerce monolith to present the offer to the customer.
eCommerce monolith is getting product data and availability from a separate Products service.
Customer can see the list of available products along with their prices.
That’s it. No more features for now.
Value for a Customer
The value for our Customer persona is being able to browse available products.
As we do not even have checkout features, a Customer can email us to buy a specific course.
Value for a Business Owner
Let’s assume we would like to give the Business Owner the possibility to add products and change the availability status of each product. To implement that, we need to develop another page with CRUD operations that will allow a Business Owner to modify data stored in our Products service.
In such a situation, we would most likely implement:
Simple frontend for managing Product Info.
Database in a Product service to store data about the products.
The value for our Business Owner persona would be the ability to add/edit/delete products on their own without asking engineers to do so.
And that would be a waste of engineering time.
How often do we modify the Products?
At the beginning of this article, we mentioned that we would like to publish the 4th course next month. So it is rare.
We may cover our business needs by returning a hardcoded JSON from our Products service, which may look like this:
{
"products": [
{"name": "Course 1st", "price": 4.99, "isAvailable": true},
{"name": "Course 2nd", "price": 9.99, "isAvailable": true},
{"name": "Course 3rd", "price": 14.99, "isAvailable": true},
{"name": "Course 4th", "price": 24.99, "isAvailable": false},
]
}
How to update Products?
Business Owner talks to Engineer
Edit JSON
git commit -m “NEW PRODUCT STOCKS ARE COMING!!!!!!”
git push
Deploy
Avoid bikeshedding
According to the Internet:
“Bikeshedding is a common term for wasting time and energy on more trivial details than addressing important matters.”
We should prioritise the delivery for Customer first to maximise the business value and reduce the business risk. That will also allow us to start testing the critical path earlier.
Delivering a feature to Business Owner first would be a waste of time. Maybe, we do not need to implement it at all.
When planning the implementation, look for the most crucial piece first. Do not bikeshed.
And consider exchanging the word User with a specific Persona.