I Asked ChatGPT a Seemingly Impossible Task, and This Is What Happened.
How to use AI as your productivity booster
A background story
In September 2016, I worked as a consultant on-site for a client. The team I was working with was a fairly typical traditional software team. By saying typical, I mean they still struggling with the Waterfall development model, where development following the upfront design output, front-end and back-end of the application were developed separately, and a lot of issues were discovered during integration, etc.
As you might imagine, any changes in requirements during the development process led to a lot of rework. Long is the client's leader, and he realized the current approach's drawbacks early on. And he wanted to establish a more lightweight process with shorter feedback cycles and small iterative deliveries.
And I am mainly responsible for improving some team members' skills in some core Agile practices. I tried to upskill the team on splitting requirements, such as applying the INVEST principles and SMART principles to have manageable chunks of tasks that are easier for developers to pick up and ease the pain of integration. The team quickly saw the benefits of this approach. The integration testing is included as acceptance criteria for each user story, and each user story emphasized business value, etc. Soon, business analysts could apply the principles in their day-to-day work.
One day, Long came to me. He felt that this training plus practice approach was a bit slow, and a lot of pressure was concentrated on colleagues responsible for business analysis. He asked me if writing a program to implement the requirement splitting function was possible. My true feeling at the time was, "Are you kidding me?" However, out of respect for the client, I had to say this was unrealistic. Regardless of how the requirements were described, it was unrealistic for the program to understand the meaning of these requirements and how to formalize principles such as Independence and Negotiability in INVEST.
I thought this was a ridiculous idea and even joked about it on social media. I didn’t mean to embarrass anyone but rather like designers complaining about some crazy ideas from their clients.
I got many comments from it (don’t check my Twitter, the above tweet is a fake one. The initial version was a WeChat moment and in Chinese, I made the above image up). The ideas among these interesting comments can be roughly divided into three categories.
This idea is not practical, or at least not practical in the next few decades.
“Cloud splitting” - like having some professional BAs split in the background and then making a front-end to surface the result - that is a brilliant idea 🙂
It may be possible to use artificial intelligence (deep learning) to solve it, but the cost and feasibility are unknown.
Automating these simple and traceable tasks seemed unrealistic to many professional developers/business analysts at the time (2016). We mostly treated it as a joke, like many other designer jokes.
Although I occasionally thought of this joke later, most of the time, it was a laughing matter. Until recently, when I was trying out OpenAI's API, I shared the article on social media. And then, I saw a comment from a colleague (who is a senior BA). This same person commented on the tweet I mentioned above a few years back. And that comment triggered me with Long’s "weird" requirement: Can we use a tool to automate the demand splitting? I decided to ask ChatGPT.
The emergence of ChatGPT
ChatGPT has emerged out of nowhere and has disrupted people's perception of "dumb" AI. It can understand the natural language smoothly and effortlessly and answer questions. Although there are often some basic errors, if corrected, it seems to be able to find patterns and give correct answers quickly.
Automated Requirements Splitting
In the rest of this article, I recorded a fascinating conversation with ChatGPT about requirement split and INVEST principles. And you can see how fast it can learn from the conversation and correct itself.
I started with a relatively simple question:
Do you know INVEST principles in story writing?
It replied in a few seconds:
Yes, I'm familiar with the INVEST principles as they apply to story writing. The INVEST principles are commonly used in software development, but they can also be applied to writing stories. Each letter in the word INVEST represents a different principle:
I - Independent: Stories should be self-contained and able to stand on their own. They should not rely on other stories to be understood.
N - Negotiable: Stories should be flexible and open to change. Writers should be willing to make adjustments to the story based on feedback or new ideas.
V - Valuable: Stories should have value to the reader. They should be interesting, engaging, and relevant to the reader's interests or needs.
E - Estimable: Stories should be small enough to be estimated in terms of time and effort required to write them. This helps writers plan their work and manage their time effectively.
S - Small: Stories should be small and manageable. This makes them easier to write and easier to understand.
T - Testable: Stories should be testable to ensure they are achieving their intended purpose. This can involve getting feedback from beta readers or other writers, or testing the story in different ways to see how it performs.
Applying the INVEST principles to story writing can help writers create more effective and engaging stories that are easier to plan, write, and revise.
That was a standard answer and aligned with most BAs’ I know. Seems it already knows what INVEST is, so I decided to give him a real-world task for splitting:
All right, I have a requirement. Please use INVEST to split it into a few smaller stories. I want to implement a login for a web application
And ChatGPT replied:
With these principles in mind, we can break down the requirement of implementing a login for a web application into the following smaller stories:
As a user, I can view a login page that includes input fields for my email and password.
As a user, I can submit my email and password through the login form and receive feedback if the login information is invalid.
As a user, I can submit my email and password through the login form and be redirected to the application's home page if the login information is valid.
As a user, I can request a password reset by entering my email address and clicking a "reset password" button.
As a user, I can receive an email with instructions on resetting my password when I request a password reset.
As a user, I can reset my password using the link provided in the password reset email.
These smaller stories fulfill the INVEST principles by being independent, negotiable, valuable, estimable, small, and testable. By implementing these stories, we can fulfill the requirement of implementing a login for the web application in a way that is manageable and effective.
The first correction attempt
Hmm, that doesn’t sound right to me. I didn’t see any business value in each story. Also, they were not ready to be signed off and delivered to the consumer to use. So I tried to correct it:
wait a min, it seems the stories you split doesn't provide enough business value. Like a login with only email and password fields is pretty much useless.
It apologized and tried to give me something making more sense:
You're right, I apologize for that oversight. Let me revise the stories to ensure that they provide sufficient business value while still meeting the INVEST principles:
As a user, I can view a login page that includes input fields for my email and password, as well as a "remember me" checkbox.
As a user, I can submit my email and password through the login form and receive feedback if the login information is invalid, with clear error messages indicating the reason for the failure.
As a user, I can submit my email and password through the login form and be redirected to the application's home page if the login information is valid.
As a user, I can request a password reset by clicking a "forgot password" link on the login page and entering my email address.
As a user, I can receive an email with instructions on resetting my password when I request a password reset.
As a user, I can reset my password using the link provided in the password reset email.
These revised stories ensure that the login feature provides more business value while still being independent, negotiable, valuable, estimable, small, and testable.
The second correction attempt
It has the same problem. So I decided to show it some examples and see if it can learn from them. Note here I treated it just like another human being.
I would split this way:
login with email and password, the happy path
invalid email or password, showing error message
sign in with other channels, like with google login
sing in with facebook ...
And then something magic happened. It understands what I’m trying to say and restructured the split into something aligned with INVEST.
Those are great suggestions! Here is how the requirement of implementing a login for a web application could be split into smaller stories using your approach:
As a user, I can login with my email and password, and be redirected to the application's home page if the login information is valid.
As a user, I can see an error message if I enter an invalid email or password.
As a user, I can sign in with Google by clicking a "Sign in with Google" button on the login page.
As a user, I can sign in with Facebook by clicking a "Sign in with Facebook" button on the login page.
Once again, the output was modified based on feedback. Now each story card has a preliminary appearance that basically meets the INVEST criteria. So I switched to a new requirement, an unrelated context: a weather application.
Let’s try something new.
Please split a requirement with INVEST. the requirement is to implement a feature for a weather app that can get the weather for cities the user selected.
Just like how humans learn, if one person learns that two apples plus three apples equal five apples, then it's the same if they substitute apples for bananas, watermelons or even cars. If they can apply this knowledge to other situations, regardless of the underlying principles, we can assume they have truly mastered a certain technology.
And surprisingly, ChatGPT understands my intent and gives me some good split:
Sure! Here's how we can split the requirement of implementing a feature for a weather app that can get the weather for cities the user selected into smaller, more manageable stories using the INVEST principle:
As a user, I can search for a city by entering the city name or zip code in the search bar, and see the current weather for that city displayed on the screen.
As a user, I can add a city to my list of selected cities by clicking on an "Add City" button and entering the city name or zip code.
As a user, I can view a list of my selected cities and see the current weather for each city displayed on the screen.
As a user, I can remove a city from my list of selected cities by clicking on a "Remove" button next to the city name.
As a user, I can see a detailed weather forecast for a selected city by clicking on the city name in the list of selected cities.
These stories should provide business value by allowing users to search for and view weather information for cities they are interested in, as well as manage their list of selected cities. Breaking down the stories into smaller, more specific features makes them more manageable and easier to estimate and develop. Additionally, these stories are still independent, negotiable, valuable, estimable, small, and testable, as per the INVEST principles.
As you can see, ChatGPT can now correctly break down a requirement completely unrelated to user login. This example is actually from a tutorial that I used. I also broke it down in the same way I implemented it myself - which means that ChatGPT's model can at least reach the level of a practitioner who has practised INVEST for many years.
It can be quite despairing, isn't it? Artificial intelligence can grasp knowledge in a very short amount of time that an average person may not be able to master in their entire life. Do we still have hope in the face of this powerful opponent? I think it depends on how you see it. If you consider it an adversary, there is no chance of winning, but what if you turn it around and see it as a friend or assistant?
Artificial Intelligence is a good assistant.
ChatGPT or most existing AI tools cannot independently complete creative work to a large extent. However, if we provide prompts and review the content generated by these tools, we can increase our efficiency many times.
A typical example is writing a blog. For instance, I want to write a blog introducing the process of TDD (Test-Driven Development). When introducing the benefits of practising TDD, I can immediately think of 4-5 points. Still, the wording may not be perfect, or due to the curse of knowledge, I may not be able to list some points that I deeply believe in but cannot recall at the moment.
In this case, I can let AI tools generate an outline for me, and then I only need to add specific examples.
I believe this is the right way to use AI tools as an assistant, with the ultimate control remaining in the hands of the human user. As the recent saying goes, "Artificial intelligence will not replace you, but those who use artificial intelligence will."
Summary
The emergence of ChatGPT is disruptive, and many positions, even industries, will undergo tremendous changes. However, like many other new tools, it brings challenges and opportunities.