CC0 1.0
Document Status
Version 1.0



A privacy aware retail company wants to create an online retail system called DeDe (Decentralized Delivery) that preserves the privacy of the customers following the SOLID principles.

In order to do that, the system will not store personal information from customers but will obtain that information from the user’s pods given that the users give the necessary permissions to the shopping system.

High level requirements

  • The system will emulate an online shopping system where end-users can select and order products to buy.
  • Once a user selects the products to buy, the system will calculate the delivery costs by looking up the desired address of the end-users in their pods and calculating the costs according to the distance from the distribution center to that address.
  • The system will show the final costs of the products to buy and once the user decides to buy them, it will record the event simulating that the sale has been done and it can proceed with the delivery.
  • The system will allow the users to visualize the orders done.
  • The application will be implemented using the React framework and Typescript.
  • The application should be accessible and deployed using a continuous integration system. Each team can decide the deployment technology as well as the hosting service used.

Optional features

  • Allow a user to have more than one shipping address in their pods (e.g. Home, work, Gym, School etc.).
  • Add the possibility to include estimation of time people are at a location (e.g. Monday-Thursday work 09.00-18.00) and restrict some of the addresses to be used for delivery at some point in time.
  • Add pick-up locations that the delivery services can use. Based on the delivery address the pick-up location could be calculated (this can either be by one of the addresses in the profile or a pick-up location that's on the route of the receiver (e.g. between home and work).
  • In order to calculate the delivery costs, external APIs from different carriers could be used and selected, so the users can compare and select the carrier.
  • The system can allow some users with administrative roles to visualize statistics about products ordered and monitor the state of orders.
  • Implement both a web application and a mobile application.
  • Implement an emulator of the delivery system which can notify the users when the products have arrived and keep track of the deliveries.
  • Support for different types of actors like customers, managers, administrators, etc. who can do different actions like inventory management, prices changes, items cataloging, etc.
  • Add the possibility that there are several distribution centers or warehouses where the products are stored.
  • Add the possibility that the users can add or update their address information to their pods directly from the app.
  • Add ratings and reviews to products or distribution centers so the users can provide feedback about their experience.
  • Teams can decide to use more than one deployment technology stack.

Assessment criteria

The following criteria will be considered to assess the quality of the solution:

  • Aesthetics and easy to use by non technical people.
  • Security and respect for user's privacy.
  • Responsiveness of the application.
  • Originality of the solution.
  • Quality of technical documentation taking into account architecture decision records.
  • Code quality analyzed both manually and automatically.
  • Tests code coverage and quality of test strategy.
  • Project management aspects like proper use of issues, meeting notes, code reviews, architecture decision records, etc.
  • Continuous integration (CI) and continuous delivery (CD) systems.

Solid challenge

The teams can voluntarily to participate in the SOLID challenge, which has been organized in collaboration with Inrupt and Empathy. Further information will be published about how to participate.