Now
4 years, 7 months

I'm currently working for Coosto as Full-stack Developer, using many different technologies that coexist in a micro-services' environment. I'm usually the Joker card in my team, since I'm able to complete any kind task (Frontend, Backend or DevOps, even iOS sometimes).

The tech stack is quite diverse, but I'm mostly working with NodeJS in the Backend (using NestJS as main framework) and VueJS in the Frontend. The application is quite complex and it's composed by different smaller heterogeneous services, so Docker and Kubernetes are present in our daily work. We use a wide range of different databases:

  • MySQL: As default relational database, useful when we have a complex data structure with meaningful relations (and we want to query based on them).
  • MongoDB: As default no-sql database. Provides better scalability options and performance in some situations. It's also helpful when we don't know if the data schema is going to mutate a lot in the future. We discard it for the services where the entities have strong relationships and we want to query by them.
  • Redis: Our main database to go for cache.
  • Cassandra: Useful in some cases where we have more writes than reads,
  • Elasticsearch: Great indexer, used in different places for different reasons. It's not a vital part in any of the systems that we manage in our team, so I haven't used this that much.

Async communication plays an important role in our landscape, since our architecture consists on multiple micro-services. We use RabbitMQ and Kafka for our message communication.

  • RabbitMQ: Offers better routing capabilities, which is useful in some domains (to get only the messages you are interested in).
  • Kafka: This technology is relatively new in our ecosystem, but looks very promising. Scalability seems better, and offers replay opportunities which is useful in some domains.

I have been working in Coosto for more than 3 years, and I have passed through different phases:

Medior developer.

I started at Coosto as medior full-stack developer. My main focus in the team was to burn points and learn the technologies they were using. It was a lot of fun and I worried only about the stories in the sprint. I was just listening in most of the meetings (refinement, sprint planning, etc.), I was learning how things worked here.

Senior developer.

After some time, I started to get more and more involved in all the discussions, and I started to show my opinion. I had spent about 6 months just learning how things worked, so I felt prepared to start contributing in something else than just burning points. This was quite challenging for me, since soft skills were more important now than coding skills and being involved in so many discussions was a bit new for me. I presented some of my ideas, like GraphQL, in what we call Tech meeting (a meeting were anyone can present new ideas/technologies). Besides, I started to work on a new vision for the company with some colleges, where we would share a set of packages (an ecosystem), instead of reinventing the wheel over and over.

Software architect

My current role in the company is software architect (apart from my normal role in the team as full-stack developer). In this role, we can discuss topics that has impact on multiple teams, and help them to make certain decisions (what language fits best for this problem?, should we use Kafka or RabbitMQ here?, etc.). I'm excited about this role, and now I want to extend it by providing a bit of visibility to all the cool things we do at Coosto (by creating posts in this website :>)

01/05/2017