- Scope Backend, Frontend & Mobile development, QA, C&S
- Timeframes January – June 2022
- Technologies .NET, React, Flutter
- Business sector Transport & Construction
- Model of collaboration Time & Material
- iteo Team 3 Backend developers
3 Frontend developers
1 Flutter developer
1 QA engineer
1 Scrum Master
analysis & solution architecture design phase
setting up infrastructure in Azure
development of a mobile app for transport order management and tracking
development of mobile app communicating with the admin’s panel & manual tests
Securing the production environment
testing on PROD & modifications and adjustments based on client’s feedback
We created a new channel of communication and information exchange to enhance the inner processes within the company.
Developed solutions, allowed the client to increase the number of customers served and save money by controlling and monitoring the entire process.
Business needs & goals
The company’s goal was to digitize the ordering and transportation planning process.
To do so, we needed to build a web admin panel and a mobile application that communicate with each other easily and in real time.
Admin panel (web)
After logging in, the admin sees the list of orders with transport statuses:
unscheduled, scheduled, started, deviation overview or completed.
When creating an order, the planner:
selects a customer from the database, or adds a new one
selects the type of order and the delivery date
selects the type of transport (appropriate truck tonnage)
selects the billing model (km or weight)
uses the well-developed map module to enter the exact address details of the delivery
selects the type of article and the quantity, etc.
The board contains the information about hourly schedule, list of drivers, and list of orders.
Using the drag & drop function, the scheduler assigns the relevant order to the driver available at the time, who instantaneously gets a notification in the mobile app that there is a new order for him to execute.
The driver indicates that he is starting the received order in the mobile app.
The app displays all the relevant details of the order, including a map with directions to the specific point, estimated time of arrival, loading and unloading, as well as the forwarder’s comment, if any.
The driver ticks off the various stages of order completion in the application, which is at the same time displayed on the administrator’s panel, informing him about the progress of the order. In addition, if any unexpected incident on the way comes up, the application has a function to report such things and save them in the form of a note, photo or video recording.
Challenges & solutions
One of the challenges in this project was modeling the domains in a stage, when our idea about it was still quite misty, and was still being analyzed by the product owner and the UX designer.
The modeling result was really good and let us go on with implementation and eventually deliver the MVP. However, at some point near the end of that phase, one aggregate turned out to be really difficult to maintain. It always changed together with another aggregate that existed in yet another bounded context. Because of that, a lot of data had to be passed back and forth between the two contexts. At the end, we made a team decision to refactor the contexts to place both the aggregates in the same context, and remodel both of them.
Because the extensive ordering process could not be broken down into individual steps as its options overlap, one large form had to be used. In order to ensure the proper performance of a solution in which a huge amount of data is collected and analyzed it was necessary to resign from ready-made libraries and develop own solutions.
The challenge was to develop a solution enabling communication at the driver-logistics level. Using technologies such as GraphQL and WebSockets, live connectivity between our application for drivers and the web administration panel has been enabled
For real time communication between the admin panel and the driver mobile app we used GraphQl Subscription technology with a custom client implementation for added security.
The implementation using a custom client was causing an error underneath the library as the internet was disappearing (probably this is not well handled in the library), the solution to this problem was to add internet state management, and depending on the state, we managed the connection.
When the application was in backgroup for a long time it was breaking the connection with GraphQl Subscription and the application was not getting any callback that the connection is not established.
The solution to this was to listen to the application if it is in background mode and, depending on the state, to operate on the connection.
Cloud & Security
The main challenge from the Cloud&Security perspective was related to securing the already existing infrastructure with an application already running in the late stage of its development.
Implementing security features, like closing selected resources from the unauthorized access attempts, required extra carefulness and adherence to existing application workflows.
The additional challenge was related to creating as much infrastructure as code as possible. Some of the resources like Azure B2C are not very IaaC friendly, so our approach demanded extra effort in this area.
manual web application tests
mobile application tests
smoke tests, retests
The testing process went smoothly, with no delays, with releases between sprints. Tests were planned, analyzed, implemented and executed.
Implemented digital solutions streamlined the company’s processes of orders and transport management.
Now, the communication between the employees is smooth and the transport status is comprehensible for both sides. As a result, the company can serve more customers and be ahead of every obstacle that may occur during the order completion.