Senior Full Stack Developer

Eiya

Apr 19 - Oct 21

Table of contents

Role

As a remote full time developer I work along with the dev team for internal Eiya products under SCRUM framework. We have daily/bi-weekly meetings with the team. We use Google Docs + Asana + Miro for project management. We use Slack for team communication and Git (Gitlab) for version control (following git flow branching model).

Projects

Eiya is a shipping company committed to the environment and focused on e-commerce clients. Eiya uses 2 products for internal operation: Dispatch System and Messengers Mobile App. There are 3 client products: Client Dashboard, Shopify integration and a a Public API for developers .

All of these projects are designed as services to communicate with each other internally and externally with end-users.

Dispatching System

Internal operation product to manage orders lifecycle and real-time, geolocalized route assignment to messengers. I was in charge of the whole project since the beginning.

This project also includes a RESTful API that allows Messengers App actions.

  • Order lifecycle management required a finite state machine approach.
  • Developed my own implementation of Organizer-Interactor pattern based on this RoR gem to manage order state change.
  • Frontend and mobile app are notified via push notifications and websocket messages respectively.
  • Scheduled tasks are required to generate reports.
  • UI performance was key to speed up order assignment, so I worked along with frontend developer to deliver the most performant experience to internal users.

Backend

  • Docker-compose for local development
  • Postgresql for database
  • Django + REST Framework for API
  • Postman for API documentation
  • Django-channels + Redis for realtime messaging
  • Gunicorn + Uvicorn as ASGI server
  • Celery + Celery-beat for scheduled tasks
  • JWT based authentication
  • PDF and Excel reporting
  • Django-storages to manage static files over AWS S3
  • Django-push-notifications to notify mobile app users
  • Sendgrid for email delivery
  • Google Maps API for reverse geolocation
  • Sentry for exceptions capture
  • Unittest and API Client (DRF) for testing
  • Pytest for async testing (channels)
  • Pylint + Autopep8 + Pre-commit for code quality

Messengers App

Multiplatform mobile app to manage orders assigned to messengers. Worked along with another React developer.

  • This was my first experience with React Native and the first feature was ready in a couple of weeks for both platforms: Android and iOS.
  • Background geolocation was a key feature (and it's not well supported by react native), so after testing many public libraries without success I decided to developed our own native module to provide a non-stop background android service compatible with headless js.

Mobile app

  • React Native initially targeting both platforms (now only available for android)
  • Followed Figma mockups
  • Yarn for package management
  • Axios for http requests
  • Redux + redux-thunk + redux-offline for persistent state management
  • Firebase for push notifications
  • Custom non-stop background android service compatible with headless js
  • React-native-navigations for screens navigation
  • Sentry for exceptions capture
  • Detox for e2e testing
  • Eslint + husky + lint-staged for code quality
  • Published to Play Store (still on beta channel)

This project also makes use of many third-party libraries to access native APIs such as camera, location, maps, image and files providers, permissions, among others.

Public API

Public API for developers that allows them to schedule Pick up and Drop off orders to ship their products.

  • App needed a really good documentation built with Postman.
  • App needed excellent performance to generate up to 50 tasks per request.
  • App needed to be real-time connected to Dispatching System in order to speed up Messenger assignments.

I was in charge of the whole project since the beginning.

Backend

  • Docker-compose for local development
  • Postgresql for database
  • Django + REST Framework for API
  • Postman for API documentation
  • Django-channels + Redis for realtime
  • Api-Key based authentication
  • Sentry for exceptions capture
  • Unittest and API Client (DRF) for testing
  • Pylint + Autopep8 + Pre-commit for code quality

Clients Dashboard

RESTful API for clients dashboard frontend that allows order management actions. Worked along with other backend developers.

Backend

  • Docker-compose for local development
  • Postgresql for database
  • Django + REST Framework for API
  • Postman for API documentation
  • JWT based authentication
  • Sendgrid for email delivery
  • Sentry for exceptions capture
  • Unittest and API Client (DRF) for testing
  • Pylint + Autopep8 + Pre-commit for code quality

Eiya-django

Internal Python package created to provide shared apps, modules and logic between Eiya services.