New on Jon Portella's Blog: Latest Vibes and more
I just published some new posts. You can read them here:
Latest Vibes (2026-04-10)
Off work and still gotta burn those tokens!
Read on the site: https://jonportella.com/blog/latest-vibes
Had some off-work days so decided to vibe some ideas I had in the back of my mind. Mostly used Claude Code, also ChatGPT just to generate app icons.
Bogotá crime heatmap webapp
I was interested to see which areas of Bogotá (Colombia) were more sketchy and at which times. The city publishes a bunch of interesting datasets including reported crimes, so I consumed that API and plotted results on a map.

Fun part was building a Cloudflare KV worker to cache the dataset API responses (historic data, it doesn't change) so we get faster interactions and a more reliable service.
Amazon sponsored products blocker Safari extension
I was annoyed by the number of sponsored products on Amazon, like I want to see products by relevance not by how much the seller paid to promote them. Probably some adblock does this but preferred to build my own since I figured would be a quick CSS injection.

What I learned is building Apple stuff (even if only for yourself) means either paying the 99$/year for the developer subscription or jumping through many hoops to use your tools outside of a simulator.
To use the extension, I need to enable developer mode in Safari, enable the setting for installing unsigned extensions and load the package as a temporary extension, which needs to be repeated each time the app relaunches.
Personal Finance macOS app
Instead of tracking my moneys on a spreadsheet like it's 2024, I wanted an app on my mac tailored to my particular needs.

I'm not sharing this one for obvious reasons, but I vibed it to feature investment and bank accounts tracker, multi currency support, credit card, budgeting, net worth... It was surprisingly easy to vibe. Are off-the-shelf personal finance apps cooked?
Stock price tracker iOS app
I just needed a tool on my phone for swing trading, to keep track of ticker prices regarding my entry point, so I can get notified to update my limit orders accordingly.

Another example of a niche use case which I wouldn't spend the time to build manually but it's basically free to do with a coding agent.
Soundboard watchOS app
I just wanted to build something for my Apple watch, nothing interesting came to mind, so I just downloaded some meme sounds and vibed an app with some buttons to play those sounds.

My Software Engineering Principles (2026-03-05)
None of these are original, but these are the ideas I keep coming back to
Read on the site: https://jonportella.com/blog/my-software-engineering-principles
I learned these through my career, from a 20 people startup to a big tech company. None of these are original, but these are the ideas I keep coming back to.
On systems
Systems > features
If a feature solves a problem, a system prevents the problem from needing to be solved again. The highest impact individual is not the one shipping the largest number of features, but the one designing systems that make shipping features faster and safer. When designing systems, I prioritize composability, extendability and clear ownership.
Scalability is also about people
A great system where a documentation update flow is an afterthought is a fragile system. No good docs means as more users onboard, they will extend the system in ways that are not supported, and the system becomes unmaintainable. It's important to set guardrails and invest in developer experience early.
On impact
Leverage > activity
The higher the scope, the more important it is to choose wisely what to focus on. Reducing future ambiguity, unblocking teams, increasing project velocity or reliability are high leverage activities that have a compounding effect. Doing a lot of feature work is not necessarily the best use of your time.
Getting signals fast
Before starting any project, it's important to think not only about what metrics we're trying to move, but how fast we can get a signal. It's common to spend too much time gathering data for a running experiment instead of focusing on other work that would move the needle faster.
On building
Ship fast, fail fast
Since the early days of my career, I set a rule for myself: create at least one pull request per day. This forced me to get things done fast and ship incrementally. Later, I set the goal of shipping a feature per week, including A/B experiment, analysis, live stakeholder presentation / critique and actual experiment rollout. I believe the sooner you put something out there, the earlier you get feedback and the faster you can iterate on it. And iteration is the key to building great products.
A great UX is the whole point
Every morning, I check new user feedback on my products. It's easy to forget about UX when you are deep in technical problems, but if users don't like/understand the experience, they won't use it. That's why thinking about performance, accessibility and smooth interactions is decisive when designing and building. When I was working on Pinterest's PinPeek feature, the hard part wasn't the actual algorithm but getting the right UX to be useful while delighting the user without getting in their way.
Developers are also users (of your code)
Establishing a culture of writing clear and predictable code is a behavior that compounds over time. "Clever" code is a tradeoff between fewer lines of code and more time spent trying to debug it for other people (or yourself after 6 months). It's important to think about the UX of your code: naming, organization, tests, etc.
On working with people
Uplevel yourself by upleveling others (to uplevel the organization)
I've taught at the coding bootcamp I attended. I've mentored juniors in my team and engineers in other teams. I've driven a company-wide mentorship program at Pinterest. Teaching others is a way to actually understand what you think you know and realize what you don't know. And there's a compounding effect: great mentor's mentees become great mentors themselves. The goal is to foster an organization culture where learning scales.
An image is worth a thousand words
Visual communication is underrated. It's easier to get stakeholder buy-in of a project by getting a quick AI-generated image of the feature than by explaining it in a block of text. Code review is sped up if authors add a before/after screenshot to the PR. I advise engineers to record manual testing screen recordings and add them to their PRs as a video attachment, it's a great way to communicate intent to reviewers and forces authors to actually test their changes, uncovering issues earlier in the SDLC.
Distill conversations into docs
In an async work environment, a lot of context gets lost in threads and meetings. I always maintain a live document that captures the status of each project. It starts with a one pager capturing problem, reason to address and proposed approach, which is key for easy onboarding. As the project progresses, more tabs are added to this document, such as a technical design document, bug bash, experiment results, decision journal. This is even more important nowadays for easy indexing by language models.
On career stuff
Do what's interesting to you
This seems obvious but it's easy to follow the crowd and forget what you actually want to do. I've built side projects and pursued ideas in my 20% time that ended up being some of my favorite works, and led to interesting outcomes. Like joining another team to help ship something (got me promoted), or picking up iOS when the team needed it, or building internal tools nobody asked for but ended up having great adoption.
Weird backgrounds are underrated
From time to time I meet another fellow engineer with a non-traditional background. These folks are always interesting, it's really hard to switch careers! Myself, before learning to code, I made videos, produced music and worked as an AV technician in live events. I believe this gave me a feel for the user and the product that I wouldn't trade for a CS degree.
Put yourself out there
I build things and write about them. Sharing your work with the world is really an act of vulnerability since folks will judge it (and judge you!), but it's a great way to improve. I keep a blog and timeline of my projects, mostly to remember what I've done and clarify what I've learned. I'm not necessarily proud of every single thing I've done, but I'm proud of the process and the learning I've done.
The last 15 years (2025-12-17)
Reflecting on all the stuff I’ve put out there
Read on the site: https://jonportella.com/blog/the-last-15-years
I was recently putting together a résumé-style page with everything I’ve done: studies, jobs, side projects. I tried to be exhaustive, so I went all the way back to university, before my pivot to software, and included a lot of half-cooked things too.
What surprised me is how much I’ve actually put out there over the years. Even when things weren’t fully formed.
In my teens, I wanted to be a musician. I had a band, recorded music, and that’s what pushed me to study audiovisuals at university. While most people in my class were into filmmaking or being on camera, I naturally gravitated toward sound. I did some gigs as a mic operator and was basically “the sound guy” of the group.
At some point during university, I realized I wasn’t going as deep into sound as I wanted, so I took an extra course at Sonopro, a sound engineering academy. That’s where things became more technical: sound recording, processing, signal flow. It helped a lot with my creative work - band recordings, some music production, and composition on the side.
When I graduated, I had this idea of building my own audiovisual events company. But first, I needed money. So I started taking more and more gigs as an audiovisual engineer. I still did creative work - corporate videos, OSTs - but live events paid the bills. Especially in Barcelona, where conferences and congresses generate a lot of AV work.
Eventually, I wanted a change. I left Barcelona and moved to Vancouver, where I worked as a live events audiovisual engineer at FMAV. After a few months, I realized I didn’t enjoy the immigration experience as much as I expected. I was nostalgic for my life back home, so I returned to Barcelona.
Back there, I stopped freelancing and focused on a company called Eikonos. I grew a lot and worked on big projects with major clients. But the long hours, travel, and constant pressure started to affect my mental health and personal life. After about a year, I quit.
I didn’t have a plan. I just knew I needed something different. That’s when I decided to try software.
I did a coding bootcamp at Codeworks Barcelona and got really into it. Turns out I really like building things. The bootcamp experience was very uneven - some of my peers got a lot out of it, others didn’t, and some couldn’t find jobs afterward. I was lucky. I went in knowing almost nothing and came out able to land a job pretty quickly.
A few weeks after graduating, I joined Curelator, a healthcare company, as a web developer. It was a small startup, around 20 people, semi-remote. The “office” in Barcelona was literally the CEO’s apartment. The engineering team was spread across Barcelona, other parts of Europe, and Canada.
I was surprised to learn people only went to the office two days a week. I actually wanted to go every day - I had just graduated and felt I needed maximum input. In hindsight, that setup forced me to become more independent. I learned ownership, accountability, and how to figure things out on my own.
One of my tasks was maintaining the company website, which was built with WordPress. I had never touched WordPress or PHP before. The main product was a single-page web app used by clinicians to see patient data synced from a mobile app. It had been built by previous engineers, and I was basically on my own maintaining and extending it.
I learned a lot, fast.
Because I only had to be in the office a couple of days a week, I started working remotely while traveling. Flights around Europe were cheap, so I’d spend a week in Stockholm, Munich, Amsterdam, Milan... It wasn’t full-time nomad life, but it gave me a taste of it.
Over time, I got promoted and my scope expanded. I moved beyond product work into more web platform projects: switching testing frameworks, changing client-side state management, things like that. After a couple of years, I had built a pretty wide base.
Later, I moved to Bogotá, Colombia, and kept working remotely. That period came with a lot of personal growth. I also started writing more: tutorials, technical posts, mostly on Medium. I thought I might make some money from it. I didn’t - maybe $10 per post.
I didn’t love how Medium worked either. Submitting posts to publications, waiting for approval, randomness. Some friends did extremely well - one was basically paying rent with Medium - but I eventually got tired of it and moved everything to my own blog. No monetization, just putting things out there.
At some point, I realized I was missing engineering fundamentals. The bootcamp taught me how to be productive and ship things, but I lacked deeper engineering foundations. I only knew JavaScript and some data structures, algorithms,etc but knew no low-level languages, no memory management, no real understanding of what was happening under the hood.
So I took Harvard’s CS50. That filled a lot of gaps: C, memory, pointers, file systems, binary. Things JavaScript hides from you. It cleared a lot of fog in my understanding of computer science.
After about three years at Curelator, I felt too comfortable. I wasn’t learning as much anymore. I started looking elsewhere, especially at products I actually used. Until then, I’d been working on healthcare tools for migraines - useful, but not something I personally used. That made it harder, for me at least, to feel connected to what I was building.
I applied to Pinterest. The interview process went really well, and I was happy with the offer. The only condition was that I had to move to Toronto.
So I did.
I joined Pinterest in 2021. It was a completely different world: larger company, more structure, more processes, more politics. Pinterest had gone public in 2017, so by the time I joined, a lot of things were already in place. I had to learn how to operate in that environment - including what an engineering manager actually does. In my previous job, my “manager” had been the CTO.
Despite that, it was great. Smart people, interesting problems, and working on a product I actually used. Seeing your changes shipped to millions of users is stressful at first, then motivating. The perks didn’t hurt either - Silicon Valley companies take pretty good care of their employees.
I was hired into the Shopping team and worked on the “Your Shop” page in 2021. Later, I moved into Search, building modules on the search surface. After a couple of years, I went through the promotion process to senior, which was intense. I took on extra responsibilities, worked across teams, and led larger projects.
One of them was making the Pinterest grid support modules that span two columns - something that wasn’t possible before. Another was working on the Pin Builder, the surface where users publish pins. New codebase, new team. It went well, and I got promoted.
I’ve been at Pinterest for four years now. These days, I work on core grid representation - a pretty critical part of the product. Still a lot to learn, still interesting.
Looking back at the last 15 years, there’s a clear pattern: I like making things. Music, video, software - it changes with the phase of my life, but the impulse is the same. I’ve always done side projects, side studies, experiments.
A lot of people are worried about AI replacing their jobs. I’m not that worried. I like building. Even if the tools change - even if most of the code is written with LLMs - the act of shaping something, guiding it, deciding what to build still excites me. Acting as a product manager for an LLM feels natural to me.
So yeah. Let’s see what the next 15 years look like.
(See all the projects in the timeline)
Thanks for reading!
- Jon Portella