Backend Engineering

Microservices architecture, RESTful APIs and more

Microservices using Java Spring Boot, Hibernate, Struts and SAP HANA

Microservices using Java Spring Boot, Hibernate, Struts and SAP HANA

At SAP, working as an Associate Developer straight out of university, I was trained on creating microservices using Java Spring boot and Hibernate.

I worked on projects that involved creating RESTful APIs, integrating with SAP HANA and working on SAP Hybris e-commerce platform.

It was my first experience working in a professional environment and I learned a lot about software development best practices at SAP.

JavaSpring BootHibernateStrutsSAP HANASAP Hybris
Microservices using Scala, Akka, Play Framework

Microservices using Scala, Akka, Play Framework

During my time at New Work, I worked on some microservices that were written in Scala using Akka for actor-based concurrency and Play Framework for RESTful APIs.

Most of the services were deployed on the on-premise kubernetes cluster while some were being migrated to AWS when I left. The backend databases for these services were mostly Elasticsearch (ex. Search related services) and Cassandra (ex. Recommendation services).

ScalaAkkaPlay FrameworkKubernetesAWSElasticsearchCassandra
Recommendation backend using Python, FastAPI

Recommendation backend using Python, FastAPI

At New Work, during one of our hackweeks, I worked on a project that involved creating a recommendation backend service using Python and FastAPI.

It also had a frontend written using React that displayed the recommendations. The service proxied the requests to the recommendation services and aggregated the results before sending them to the frontend. Some recommendations were fetched from the backend Cassandra database.

PythonFastAPIReactCassandra
Vector database service using Rust, Axum, gRPC

Vector database service using Rust, Axum, gRPC

At New Work, I built a service on top of the Qdrant vector database that added some additional functionality like caching, rate limiting and authentication.

The service was written in Rust using the Axum web framework and gRPC for communication with the Qdrant database. The service was deployed on AWS EKS. The service was used by the recommendation backend services to store and retrieve vectors.

RustAxumgRPCAWS EKSQdrant
Event tracking via Outbox messaging pattern

Event tracking via Outbox messaging pattern

At HelloFresh, I worked on a project that involved tracking custom events from our web and mobile clients via one of our backend services.

The clients called the service with the event data and the service would then write the event data to a database table and an outbox table in the same transaction.
An outbox worker would then poll this outbox table and emit the events to a Kafka topic. This pattern ensured that the events were not lost and were processed in the order they were received.

The backend was written in Python using FastAPI and SQLAlchemy and the Kafka schema was managed using a Protobuf schema registry.

PythonFastAPISQLAlchemyKafkaProtobuf