Farmstead is a farm-to-fridge grocery delivery startup with a vision to reduce food wastage through AI solutions, for optimized inventory and last-mile logistics.
The team at Farmstead approached us to restructure their front-end and back-end codebase for improved performance, a more immersive and intuitive user experience, and for optimizing their complete backend operations.
Farmstead was a rapidly growing startup, so our primary challenge was to iterate the product development at a much faster pace.
Our team was prepared to Identify bottlenecks and refactor problem areas, while driving feature additions at the same time.
We devised an agile plan to accommodate minor and time-sensitive refactorings, while creating a project structure that allowed all developers to adapt and optimize the app during feature development through opportunistic refactoring (the boy scout rule).
Our primary focus was to establish flexible standards to deliver key features, while ensuring that the changes accommodated different styles and standards in the same codebase.
Since our plan for Farmstead was comprehensive, we adopted a strategic approach that would help us refactor the code in parts, while continuing to build, test and deliver new and improved features.
We began by streamlining the unit and end-to-end tests. This was done by setting up factories and helper methods that could be used for new features.
Our team started with re-organizing the front-end codebase into a robust React application, and set standards for the codebase. We reimagined and streamlined the end-to-end shopping experience for the user.
After initial research, we also integrated Redux into the React app and designed it to be functional, independent and separable from the monolith that it was under.
During the front-end rehaul, we organized all CSS styles into comprehensive stylesheets and enabled consistent CX across the application.
Our consultants initiated back-end refactoring by separating JSON-serving endpoints and HTML-serving endpoints.
We optimized and reduced the overall response time by moving and monitoring all JSON serving endpoints, and studying the responses they were serving.
Building a modular system and refactoring the codebase into separate modules across the application helped us reduce duplication.
We developed and deployed some critical features for the application: