My 10 years coding at Uniplaces

Miguel Loureiro
8 min readJul 3, 2016

If you think that working in a product is boring, you’re (probably) wrong!

Some years ago, I saw myself working in a lot of projects at the same time. While studying Computer Science I had a research grant in INESC and at the same time I was working remotely to a company, doing a lot of projects for small business’s. At that time I was counting about 30+ projects in production since I started working professionally and I felt that was cool to learn a lot of technologies, put things into production, get a feeling of what the real world needs from software.

Nevertheless, I started getting frustrated… as I was gathering more and more knowledge on how everything works and how big one small feature can turn out, I wanted to make things better, but for that, one needs time.

My goal was to work in a big product, with people that really knew about it, with a great team and with time to do things having quality in mind and not only the deadline in mind.

When I decided what I wanted to do, I didn’t even need to search for it. Luckily, some days after, I had this message at LinkedIn from André Albuquerque saying Uniplaces was looking for engineers and asking if I was interested in joining the team. Uniplaces was THE startup in Lisbon, they had the product and they had just raised £700K in Seed Funding from Octopus. So I went to Lisbon to meet the team, visited the office, everything was so amazing, and even better, they were just starting to create the new engineering team to develop the new product, man… I’m a bit crazy, I would work there for free considering the opportunity (career wise) I had in front of me (and I’m not rich!).

The first days

I considered myself already quite experienced despite my age (24 at the time) but as I was expecting, this was a whole new level, and I was super excited as the people around me made me feel inexperienced (best thing you can have in your work from my perspective).

Uniplaces gave me the chance to be working remote for the first three months because I was still finishing college. At the time we were working in maintaining the old product and starting to build the new one.

My first tickets were small ones in the old product, one product with a messy monolithic Symfony2 application that was about to be replaced. I didn’t want to be working at the old one, I wanted to jump into the new one where very high code quality was a must. While getting code reviews in this old product I started developing my skills in writing clean code in a way I never thought it would happen in such a short period. After 1 month doing small tickets, I was writing code in a much cleaner and readable way. Not talking about architectural patterns, but actually, in just writing code. I’ve always been a super hands-on guy, avoiding to learn from reading books, always coding to learn something, but it was here, were I won the joy of reading books to learn techie things, after my CTO recommending me to read Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin , I just looked at the code in a totally different way, and the good thing is, everyone at the team had a clean code spirit.

I also started blogging about this topic here.

The new product

It was time to pack things and move to Lisbon to work closely with the team. At the time I felt the team already trusted me, and I just had the opportunity to start working in the new product.

It was just a… totally different thing !

To give you some context we were passing from a single application with everything, to a product sliced in different projects.

High level picture of our projects, core is where domain logic lives, our frontend projects don’t have any access to databases, they just talk with core through a restful api client.

This new product gave me the possibility to improve my skills immensely. We were developing following an architecture I’ve never used, Domain Driven Design, if you want I recommend you to read the Blue Book from Eric Evans. We followed a lot of patterns, we had it all there. We had almost 100% code coverage on core. Our environments were clearly defined, everyone could develop in their own development environment provisioned with Ansible. You start feeling you’re doing it right when you don’t have coupling anywhere, everything is attachable, you’re able to make your decisions only when they’re needed. The proof of this is that we were able to develop our platforms for months without even choosing the database we wanted to use. This gave us the possibility to use Redis in development and DynamoDB in live-like environments.

One proof that Uniplaces is a tech startup that actually cares about quality, is that the company as a whole outside product/engineering, gave our team the time that an architectural design as DDD requires.

Before even launching the product I was already doing so many cool things, from file system abstraction (you know… our test environment get files from memory, development in disk, production in amazon s3, everything with the same code), to setting up our frontend stack (slides here), and being responsible of so many important things, I could really feel the magnitude of what I was doing, that was when I said to myself that this was exactly where I wanted to be.

I just stopped a bit and thought. I’m in a company that has a clearly defined goal, to be the number one brand for students in the world. Just think about it, we had the momentum, we’re having back up from top notch investors, we’re always on the news and I’m right in the middle of this with the tools in my power to grow this product from the beginning to the global one we want to be, this is a very hard opportunity to find, this. is. priceless.

That click in the button

I’ve ever been a full stack developer, with interest in infrastructure. This made me a good candidate to be responsible for Uniplaces cloud infrastructure. I knew everything about the stack so I was in a very good position to take care of it. My CTO gave me the chance to be responsible for it, presentation about our infrastructure here.

By doing this I saw even more how the company relies on tech. We were just releasing our second platform (operations) and I was fixing bugs to make our first release for ops. We had about 40 persons waiting for that release to start create offers on the new product. 40 ! And you know you’re playing the game when the head of operations says you on HipChat (yeah we use HipChat), “All on you!”.

Some time after it was time to release the student platform. That one everyone sees https://www.uniplaces.com we were working hard to release it. We’ve promised everyone we would release it 7 of March, no one believed it. I actually sent an email to everyone in the company saying that if we weren’t able to release it in time everyone could slap me in the face (we were already a lot in the company, so no easy bet here). But I saw everyone in my team working f*cking hard to get things done and at 7 of March around 7am I pressed the button.

Champaign at 7am always feels good!

Now what? Everyone asked me. I also made this question to my CTO. The product is released, why do we keep hiring? The answer was obvious, we need to improve. New features, clean technical debt, etc… this had just started!

Never stop.

Time was passing, we were reaching high season, our investors loved our product but now we’ve targets to achieve in order to get the next investment round. We could easily see that every single feature was boosting the company in getting bookings, either it was some improvement on the student platform, or some feature on ops that eased the work from operations, or something that the marketing team asked, we were enablers.

At the same time we were being ‘evaluated’ by Atomico, that’s when I saw myself in a room with a tech guru who’s been working with top tech companies like Google, Facebook etc… I was there for about 3 hours speaking with him, he was always making questions, but the good thing is, and this makes me proud, is that I didn’t have any doubt about anything, I knew we were pretty strong in what we were doing, and the things that were not so good we knew how to fix them and they were just not a priority at the time. Here I was head to head, super confident with this. In the end we got very positive feedback from Atomico with highlight on our infrastructure :).

I’m glad I could help in this result

Team picture announcing $24M In Series A Funding From Atomico And Angels @ Google European Head Quarters, Dublin

Today

We’re still in the fight to be number one in the market. We did a lot, I got offers from the big tech companies and I declined. Why?

We’re still not there, there’s so much to do, the experience of growing a company to global success in my perspective is much more enriching than just jump into a big one.

We still need to scale our infrastructure to global accessibility, our architecture needs to improve in order to meet our needs and scale organizationally (let it be MSA or MOA) as we get more developers. We need to get strong in mobile as we are in web.

I’m actually at Uniplaces for only two years, the company is quite new, you may have noticed the title says ten years, and I actually believe so ! I truly believe this environment, opportunities I’ve got and people I’ve worked with for this two years I would take 10 years in another place to grow this much.

Today, I’m Engineering Manager and Software Architect at Uniplaces, I’ve been playing with PHP, Golang, Javascript, Infrastructure, Message Queues, a bit of everything, and as I said we’ve a lot to do. If you like this story and you see you could grow with us, CLICHÊ We’re hiring! :D But don’t worry, everything I said it’s true ;)

--

--

Miguel Loureiro

Product & Technology, entrepreneur, early-stage investor and advisor, occasional blogger