From research to building AI systems, teams and products.
I started close to the models. Over time, I kept moving closer to the intersection of engineering, product, people and business.
The job titles changed. The direction was more consistent.
INESC TEC
Undergraduate Researcher
Where I learned that I wanted to build things.
Read the full chapterHide the full chapter
I joined INESC TEC while I was still at university, initially to understand what engineering looked like outside the classroom.
Phase 01
From physiological signals to a system I could hold
My first group worked on physiological monitoring for firefighter safety: how could we detect risk while someone was working in a physically demanding and dangerous environment?
The first problem I worked on was estimating core body temperature from signals that could be measured externally, using methods such as Kalman filtering. At that point, I was mostly learning how research and applied engineering actually worked. I was definitely learning more than I was contributing.
Then the work became much more end to end.
The group built a prototype to monitor firefighters’ exposure to carbon monoxide: a physical sensor carried with their equipment, measuring CO in the surrounding air, with a system around it to capture, transmit, store and analyze those measurements.
I ended up working across almost the whole chain:
- the electronics, designed with support from more experienced electronics researchers, and the components, which I selected and sourced;
- assembling and soldering the prototype boards, and helping create a custom enclosure;
- Bluetooth Low Energy communication and the Android app that received the measurements, stored them locally and uploaded them to a server;
- the data analysis, including a physiological formula to estimate blood CO exposure from environmental concentration and time exposed.
The embedded firmware that controlled the device itself was written by a colleague who specialized in it.
Building the whole system helped me understand which part of engineering I wanted to stay closest to.
I liked experimenting with hardware, but this project made something pretty clear: software, data and building systems were where I wanted to go deeper.
It was also one of the first times I realised how much I enjoyed owning something end to end instead of disappearing into one tiny part of it.
Phase 02
Then I deliberately moved closer to Machine Learning
For the final part of university, I changed research groups inside INESC TEC.
That move was intentional. I wanted to explore Machine Learning properly and figure out whether it was the field I wanted to work in.
My MSc thesis focused on fingerprint presentation attack detection. Many anti-spoofing models worked well once they had already seen examples of the attack materials during training. The harder question was whether a model could detect a spoofed fingerprint made from a material it had never seen before.
Basically: could it spot an attack without having studied that exact trick already?
The work moved through the field step by step:
- Handcrafted image features, turned into tabular datasets
- Classical Machine Learning: SVM, Random Forest, Naive Bayes
- Multilayer perceptrons
- CNNs trained directly on the images
- Pretrained CNNs and transfer learning
- Adversarial training
- Domain adaptationThe direction that worked
- Experiments with GAN-based approaches
The approach that worked best used adversarial techniques for domain adaptation, helping the model generalize beyond the spoof materials it had seen during training.
That research became my first publication and also confirmed that Machine Learning was something I wanted to keep pursuing, just preferably close enough to real systems that the work did not end at the experiment.
- Publication
- BIOSIG 2020. Main author; presented as a poster.
- Thesis
- Graded 20/20.
- Recognition
- Best MSc thesis in its research area at INESC TEC.
- Location
- Porto
- Stage
- Research
ANOVA
Junior Data Scientist
Making data science run without someone pressing the button.
Read the full chapterHide the full chapter
ANOVA had recently been formed from several established companies. I joined a very small product effort where, in practice, I worked closely with one lead based in the United States. It was autonomous and international from the start.
anova.com (ANOVA website, opens in a new tab)
ANOVA provides hardware monitoring for industrial tanks, but not every tank has a sensor. The product I worked on estimated the levels of unmonitored tanks from monitored tanks that behaved like them.
Historical refill and level patterns were used to identify which tanks were similar, and at runtime the monitored ones helped infer the current state of the ones without sensors. The goal was simple: anticipate refills and reduce the risk of stockouts.
Taking the person out of the loop
The statistical process already existed when I joined. The problem was that every day, someone still had to make it happen, manually.
The project lead would open some FTP servers, download the new sensor files, run the process manually and upload the outputs somewhere else so the downstream systems could pick them up.
My main job was to remove that person from the loop.
I built the pipeline end to end: automated FTP ingestion, the processing flow and automated delivery of the outputs. With the help from the DevOps team, I also set up an Azure VM that started on a schedule, ran the process, handled completion and shut itself down again.
Once the pipeline was stable, I built an internal control center in Python with Tkinter: part dashboard, part backoffice, showing the data, product metrics, errors, logs and operational status.
It also made it much easier to show leadership how the product was performing instead of asking them to trust a process running somewhere in the background.
Later, I started representing the product in conversations with teams in Portugal and elsewhere in Europe about where Machine Learning could improve it. The existing approach was mostly statistical, and those conversations made me realise I wanted more direct exposure to Machine Learning itself.
The role was also quite isolated: most of the work happened one to one, with my closest collaborator in another timezone. So when a contact suggested I apply for a Data Scientist role at iLoF, I did it.
- Location
- Remote
- Stage
- Systems
iLoF
Data Scientist
I joined to do data science and started becoming interested in everything around it.
Read the full chapterHide the full chapter
iLoF was little more than a year old when I joined, and still small. The Data Science team was two people and I became the third, working closely with the Data Science lead and directly with the CTO.
ilof.tech (iLoF website, opens in a new tab)
iLoF was developing proprietary technology that combines photonics and AI. Optical signals were collected from biological samples and turned into optical fingerprints: markers associated with properties of those samples. The long-term potential was in detecting and characterizing disease-related and other biological signals.
At the laboratory, photonics and hardware teams collected the signals. My team picked things up from there: taking raw, high-dimensional optical data, turning it into statistical representations and building models on top.
Working directly on the modelling
The work covered signal analysis, statistical feature extraction, classical Machine Learning and deep learning, usually on relatively small datasets.
A lot of the projects were exploratory by design: could we detect a certain biological signal at all? That meant trying different representations, models and validation approaches, often in collaborations with hospitals and other organizations. It was pure research and development, not clinical work.
Stop rebuilding the same workflow
Running lots of small experimental projects meant repeating the same work again and again. So instead of rebuilding the training and evaluation flow every time, I created a shared Python package that standardized the recurring Data Science work across projects, and I became its main maintainer.
It was one of the first times I noticed a pattern that has followed me ever since: if I have to solve the same annoying problem enough times, eventually I will build something so I never have to do it again.
That same instinct produced two other tools.
One was an internal monitoring application for the laboratory hardware. It used statistical behavior in the optical signal to help indicate when certain components were degrading or might need replacing. I wrote the analysis, the monitoring logic and a simple interface that the laboratory team could actually use.
The other, built with the team lead, was an end-to-end demonstration pipeline: incoming data was processed automatically, sent to a model behind an Azure ML endpoint, and the results and system state were stored in a database and exposed through a simple interface. It ran during real demonstrations in the laboratory, which was a nice step up from “here is a notebook, please imagine the rest”.
Everything around the model
Over time, I started getting increasingly interested in the work surrounding the modelling itself.
Outside technical work, I got involved in planning and longer-term technical discussions, presentations, conversations with doctors and technical partners, external events and company pitches. I also supervised internships and an MSc thesis with a meaningful deep learning research component.
I was also part of a multidisciplinary group focused on company culture, where we discussed internal norms, practices and events. That brought me into more regular contact with the CEO and gave me much more exposure to how the company was actually being built: marketing, organization, communication, strategy and how the technology connected to the business around it.
I was not running those areas, but I was becoming increasingly curious about them.
That was probably the biggest thing iLoF gave me.
I joined because I wanted to do more Machine Learning, and I did. But somewhere along the way I found out that I also really enjoyed mentoring people, explaining technical work, thinking about strategy, shaping how teams operate and understanding why we were building something in the first place.
None of that was in the job description, but it all pointed pretty clearly to what came next.
- Location
- Porto
- Stage
- Product
Enlitia
ML Team Lead, later Data & ML Team Lead
I joined to build an ML Engineering team. The scope kept growing.
Read the full chapterHide the full chapter
I was hired to create a new function, ML Engineering, between the existing Data Science team, software engineering and the product. By the end, I was leading 8 engineers across two teams.
enlitia.com (Enlitia website, opens in a new tab)
An unexpected start
It started at the World Data League. During the final, I was in a group discussion where one person kept asking particularly interesting questions. I later found out she was the Head of Marketing at what was then Smartwatt, and a few months later I got the opportunity to join the company. I went through the process and accepted.
See the World Data League story
I joined while the company was still Smartwatt, and a few months later part of the organization became Enlitia, a product-focused spin-off. That shift mattered: a lot of the earlier work had been built around tailored consulting projects, while the new ambition was to take years of domain experience and algorithms and turn them into a more standardized product that could scale internationally.
Which is also how I ended up being hired to create something that did not really exist yet.
Creating the ML Engineering layer
The new ML Engineering team sat between Data Science, software engineering and the product. At the beginning, it was me and one junior engineer, and the work was extremely hands-on: I was coding and building 99% of the time while defining what the team should own, how the ML architecture should work, what the product needed and where the boundaries with the other teams should sit.
I worked closely with the CEO on the AI and ML side of the product, and for a long period a lot of the product definition in that area came out of that collaboration. A subcontracted international team handled much of the infrastructure, cloud and DevOps work. I was not the specialist there, but I coordinated closely with them and became one of the main points of contact between product needs, ML and data requirements, and the infrastructure supporting all of it.
A lot of the role became translation between worlds that all used slightly different language for the same problem.
From two people to a product team
The small ML team started delivering, and the company decided to invest further. I became responsible for hiring the next engineers and helped shape the team around clearer specialization across Backend Engineering, Data Science and ML Engineering. That was the point where it stopped feeling like “two people figuring things out” and started becoming an actual product team.
At one stage, we were given an aggressive objective: develop and implement four new algorithms in the platform within the required period. The team shipped five.
- Target
- 4 New algorithms
- Delivered
- 5 Shipped by the team
A target of four would probably have been enough, but apparently we were as competitive with that as we were when playing table tennis at the office.
The scope kept growing
After broader organizational changes, product and services work were brought closer together, and my scope grew with them. First, I took responsibility for Data Engineering alongside ML Engineering. The team needed restructuring and a better way for work to flow, so for roughly the following six months I focused heavily on organization, delivery flow, ownership and working practices. Later, Data Science came under my leadership too.
I did not lead every team in the same way:
- ML Engineering / Data Science
- Still strongly hands-on.
- Data Engineering
- Mostly leadership, organization, strategy and facilitation. The team had strong senior engineers who owned much of the detailed technical leadership.
That difference was deliberate. Data Engineering already had senior people who could own the technical detail, so my job there was much more about direction, prioritization, alignment and making sure the team had what it needed to work well.
Across the teams, the technical range became pretty wide:
- Time series
- Forecasting
- Predictive maintenance
- Anomaly detection
- Databases
- APIs
- Infrastructure
- ...
The hard part was no longer the model
Leadership became much more real once the decisions started affecting people’s work, growth and sometimes whether they stayed on the team. Some of it was the good part: hiring, developing people, keeping them motivated, deciding who should own what and giving people projects they could genuinely grow through.
Some of it was much less fun: difficult feedback, formal warnings when they were necessary, and dismissals. That was probably where leadership stopped feeling like a title and started feeling like responsibility.
The technical decisions still mattered, of course, but getting a model wrong is usually easier than getting a people decision wrong.
Bringing engineering into the project earlier
One of the changes I cared most about was how technical projects were run. I wanted technology, business and project management much closer together. Engineers should not just receive a project after the important decisions have already been made and then be asked to “implement it”; technical reality should help shape the project from the beginning.
Toward the end of my time there, I pushed the projects I was responsible for toward a more visible and technically involved operating model: clearer ownership, project state that everyone could see, technical teams involved earlier, and execution choices made explicit instead of quietly becoming assumptions.
Leading, and still building
Over time, my role moved further toward management, coordination and organizational responsibility. I found out that I genuinely enjoy leadership: developing people, shaping teams, aligning technical and business decisions, and creating the conditions for good work to happen.
But I was also getting further and further away from building. Still relatively early in my career, that started to bother me. I did not want to become a stronger manager while slowly becoming a weaker builder.
I wanted to keep building, keep learning technically and make sure the skills underneath my leadership stayed strong enough to support where I wanted to go next. Those thoughts made me much more open to the right opportunity, even though I was not actively trying to leave.
Around that time, a close friend referred me to Loka. When they reached out, I decided to enter the process, and that became the next chapter!
- Location
- Porto
- Stage
- Teams
Loka
Senior Machine Learning Engineer
Back closer to the code, without giving up leadership.
Read the full chapterHide the full chapter
I am leading projects and building AI end to end solutions across different domains, with a strong focus on agents and LLMs while still using conventional ML when it is the right tool. Most of the work is about turning problems into real working systems, so I tend to sit between product, architecture and implementation.
loka.com (Loka website, opens in a new tab)
A big reason for moving to Loka was getting closer to the technical work again, and that has definitely happened. I have gone much deeper into GenAI, LLM systems and agentic AI, but also into everything required to make those systems real: architecture, cloud, infrastructure, evaluation, testing and production delivery.
Conventional Machine Learning is still part of the work when it makes sense. Not every problem needs an LLM, despite what the internet occasionally suggests.
Fast, and still production
One of the projects I worked on involved a client moving at a very fast pace, which meant we needed to work with them extremely closely. We built a GenAI pipeline end to end in a short period of time, but with production concerns there from the beginning: infrastructure, evaluation, testing, robustness, implementation and delivery coordination.
The speed was nice for most of the time, I like speed. But the more interesting part was proving that moving quickly did not have to mean pretending evaluation and testing were problems for future us.
Some engineering decisions happen before the project starts
Loka also made client-facing technical work a much more explicit part of my role. I already had client exposure at Enlitia, but here I work directly with international clients across technical conversations, project scoping, expectation management, difficult project situations and the usual exercise of translating “what we need” into “what can actually be built”.
Sales engineering became another fun part of the job. I take part in sales calls, sometimes lead them, and work on technical discovery, solution design, scoping, architecture and writing and presenting proposals.
- Understand the potential client's problem
- Translate it into a technical approach
- Define the likely solution, often on AWS
- Scope the work
- Write the technical proposal
- Explain it clearly
I like this part of the role more than I expected. There is something interesting about making technical decisions before there is even a project yet, when the problem is still ambiguous and half the job is figuring out what the client actually needs instead of simply implementing what was first requested.
Ownership without a reporting line
One thing Loka has reinforced for me is that leadership does not necessarily need a reporting line.
I’ve started and currently drive an internal aerospace AI initiative that connects technical exploration with Sales, Marketing and Operations. It is informal rather than a business unit, but we have explored areas including edge computing, predictive maintenance and remote sensing. I am the main connection point between the initiative and those teams, and I also supervise an internship within it.
I have represented Loka at external events too, presenting what the company does, discussing technical capabilities and taking part in commercial conversations. That thread actually goes back quite a long way, from technical presentations at iLoF to pitches and fairs in completely different contexts later on.
Apparently I keep finding ways to end up explaining what we are building to people!
Technical leadership without leaving the technical work
The move has been useful because it gave me exactly the tension I was looking for: I am much closer to the code again, but I’ve not had to give up ownership, mentoring, client trust or technical leadership to get there.
I still want to grow as a leader, but with a much more deliberate focus on keeping the technical foundation underneath that leadership strong. For me, that means continuing to build, staying close to architecture and implementation, but also staying close to the product and the business around it. I really enjoy understanding why something should exist, how it creates value and how the technical decisions connect back to that.
That balance is probably the most important thing I am learning here!
- Location
- Remote / International
- Stage
- Technical leadership
What stayed consistent
The scope changed a lot, but the pattern did not: I like being close to the problem, close enough to the technology to build it, close enough to the product and business to understand why we are doing it, and close enough to the people involved to actually move things forward.
I also like thinking of myself as a generalist. I enjoy learning new domains, understanding how different systems work, and looking for the intersections between them. A lot of the most interesting work, at least for me, happens when something from one world turns out to be useful in another.
That is still the kind of work I look for.