Founded in 2012, Tannico is the online wine shop with the largest and most careful selection of Italian wines in the world. Currently the site is active in eighteen countries and in 2020 allowed the sale of 2,500,000 bottles worldwide. The catalog counts more than 15,000 labels, 80% of which are Italian and come from 2,500 wineries. Supplying a warehouse which such numbers is complex, so Tannico contacted us to create a solution that would simplify order management and relations with suppliers and logistics. We accepted the challenge and began surfing through the complexities of this domain.
Discovery: define priorities and a quick plan to meet them
As usual, our activity began with a discovery. One of our cross-functional teams met virtually with the people at Tannico who are familiar with the orders management process, so that their goals, along with user expectations, emerged.
Reducing the time spent to manage orders to suppliers clearly emerged as a top priority, along with some secondary goals, such as reducing the number of anomalies reported by logistics and centralizing supplier information, allocated across multiple platforms.
Using the Stakeholder Map, we delved into who the stakeholders are in the new project, who has decision-making responsibilities and who is involved.
In addition, we explored the constraints of the project and brought out the priorities to be considered during the development of the platform.
Given the complex domain, we had an Eventstorming session to explore it. This activity revealed the events that occur during the order management flow, the various actors, the software systems that exchange data, and the criticalities of the process. We also defined a shared vocabulary (Ubiquitous Language) in order to reduce ambiguities in conversations.
Finally, we mapped the flows that emerged from Eventstorming onto user stories, descriptions of the platform’s functionality as seen from the users’ perspective. This activity allowed us to define a project roadmap with incremental releases. The goal of the first milestone, ambitiously set after seven weeks, is to enable buyers – the Tannico operators who maintain supplier relationships – to centralize supplier information on the new platform and send orders to suppliers via automated emails, all while interchanging data with the e-commerce and sales forecasting systems.
After exploring the domain and clarifying goals and metrics, we reshaped the cross-functional team so as to field the right skills for this project. The materials produced during discovery enabled new members to join the team, allowing them to bring value to the project right away. So, iteration after iteration, we deployed all the necessary skills, dealing with interface and user experience design, frontend, backend and cloud infrastructure development.
We decided, in consultation with Tannico, to develop the backend of the application in PHP. Specifically, we made use of Symfony and ApiPlatform to build REST APIs that are consumed by a frontend based on React and Next.js. The technology stack was chosen in order to allow the internal development team of Tannico to take charge of any future evolutions of the platform with minimal effort. In the choice of architecture and frameworks we also took into account the reasoning made during discovery on software quality, technical debt and the impact they have in combination with other levers, such as scope, budget and deadline. In this case, we accepted some compromises in order to reduce costs, release value early and get immediate feedback from users, knowing that refactoring may be needed in the future.
As for the cloud infrastructure, which resides on AWS, it was built with an incremental approach: this allowed us to bring the first features online right from the first iteration. The services used for this purpose are multiple, given the complexity of the project. In the frontend part we used CloudFront and S3 for the type of Framework present. As far as APIs are concerned, instead, we created an ECS cluster with Fargate compute engine, which ensures the deployment on different availability zones to guarantee high reliability. To complete the use of ECS we have configured the Step Functions service for the execution of periodic tasks.
We immediately established a daily, direct and effective communication with the people at Tannico: we created a shared Slack channel with them to talk and collaborate all together for the success of the project. We also established a meeting that we hold weekly, the so-called iteration meeting, during which we review the user stories completed in the previous iteration and define the scope of the next iteration.
“Working software is the primary measure of progress“, so says one of the principles of the Agile Manifesto: that’s why at each iteration meeting we present the new features and ask users to try them right away, so they can take note of the progress and give us timely feedback. This moment was fundamental for the team because it allowed people to have clear priorities and scope of each iteration, and then to discuss and calibrate the implementation details of the various user stories in order to maintain an adequate velocity to achieve the goals set in the roadmap.
Our Money back contract has acted as a tutor to this process, driving us to continually seek timely feedback from the customer and ensuring that the customer consistently delivers value to users.
Another of the principles of the Agile Manifesto calls for teams to reflect at regular intervals on how to become more effective. As such, already after a couple of iterations we took time to do a retrospective, in order to reflect on the team’s performance and figure out how to do better in subsequent iterations. A lot of positives came out of the retrospective, including healthy communication between the people at Flowing and Tannico, and the fact that the process and organization of the work as a whole was satisfactory. However, a motivated group always finds room for improvement, so there were also a few areas to act on to further improve the process. One of these points required an increase in the amount of time spent on interface design. Thanks to our internal planning process, we were able to find a solution that allowed us to re-focus on what the project required from the very next iteration.
We are currently in our tenth iteration. Buyers have already begun using the new platform to manage their orders and organize supplier information. The road to reach the project goals is still long and every week new ideas and needs emerge. We have collected the first feedback and based on it we have reshaped the priorities on the next functionalities. In the coming weeks we will release a new version that will allow suppliers to access the platform as well, in order to further automate the process.
Flowing is helping us to optimize internal processes by developing a software that suits our needs, which – being very specific – need a high degree of knowledge of internal mechanisms.
Flowing uses various working methodologies, thanks to which it has been easy and fast to share knowledge and start talking a common language immediately.
This, together with a very precise and orderly work organization and a linear and pragmatic communication, allowed us to have value since the first iterations.
The technologies to be used were decided together in order to allow us to be independent on the developments and eventually be able to work four-handed.
Cristiano Pellegrino, CTO Tannico