The cost of an conditional flow in a user story
During this sprint in at my work, some minor touch up stories were added to the sprint. These stories however we’re thought out, at least not to the level that they were ready to be implemented.
Ill try to describe a particular problem of one of them.
The problem is with time management, and perceived different behaviour based on certain constraints.
Here is an example:
Consider a shipping company, each worker packs certain crates and ships them according to a schedule. The worker marks each package as packed and places them in the loading area, where someone else takes over. Every day the worker receives a set of scheduled orders to pack. The worker uses a stock handling tool to manage the product stock while packing.
A nice feature for this system would be for a question to pop-up to the user as he is using the Stock handling tool for picking the products for packing, asking the user if he or she wants to mark the package as packed when all products are picked from stock.
The stock handling tool doesn’t know anything about the order, being picked. So that tool tries to be smart, by asking the packaging system which package is supposed to be packed right now based on the schedule, check if this is the only product to be shipped and if so ask the user to mark the package as packed automatically.
Now the scenario isn’t exactly as clear as I hoped it would. But the point is that the system tries to make assumptions, based on the schedule and the current time, instead implementing a correct version where the system that tries to make the assumption actually has the data needed to make it. In this case, which package currently being picked.
The idea for us was to have a “cheap” version to give a similar flow. The problem is that since there is no immediate link between the product begin picked and the package to pack, the pop-up only shows up during times where the system can guess that the package is fully packed.
So what is the cost of this.
For the developers, its probably fairly cheap, its a if-statement somewhere, perhaps with some extra glue code.
For the support, this is hell, consider the questions: “Sometimes I get this pop-up and sometimes i don’t. Why don’t I get it all the time?”. Imagine the answer, the support technician has to try to describe how that specific if-statement works to the customer, who most likely doesn’t care about if-statements or the likes.
What is worse with such a user-flow is that the developers, being smart people, often make that specific If-statement complex. Trying to maximize the benefit of the specific pop-up. Well, sometimes we can make the assumption based on this, sometimes on that.
For each “or” and “and” function in that if-statement the cost for the support goes up exponentially.
What is potentially a bigger problem is that customers do not like non-deterministic behaviour. The system should just work, users get uneased when their expectations on the user-flow aren’t met, or worse are met only half the time based on some obscure logic that the customer has no real-world conception of.