Back with a bang — 20 PRs in four days
First week back after Easter and it felt like someone flipped a switch. Four days, 20+ PRs merged, 16+ Linear issues resolved. The kind of week that reminds me why I love this job.
📊 Insights feature blitz — shipped metric explanation popovers, chart export to composer, All Channels legend redesign, Takeaways decoupled from date filtering, and a proper empty state for when there's no data. Insights is getting really close to ready.
🔐 SSM migration — migrated secrets from legacy parameter store to SSM as part of our infrastructure modernization effort. Two PRs, clean handoff.
🐛 Bug fixes — resolved a tag report date range issue that had been reported before the holiday, and two security fixes in our customer.io webhook service.
📖 Docs overhaul — rewrote channel analytics documentation from scratch: +336 lines added, 425 removed. Future Carlos (and Bruno) will thank me.
Insights
Infrastructure
Bug Fixes
Security
Taking a breather — Easter week in Barcelona
Fully offline this week for Easter. Took the family to Barcelona — good food, good weather, and a much-needed reset after an intense few months of shipping.
🇪🇸 Sometimes the most productive thing you can do is step away. Coming back refreshed and ready to close out the Insights release.
Time Off
Pre-release bug blitz and a TikTok incident
The week before Easter was all about clearing the runway for Insights — fixing the last batch of pre-release bugs while handling an unexpected TikTok production issue.
🐛 Insights pre-release fixes — resolved five bugs across the date picker and post-actions routing. The kind of polish work that makes the difference between "it works" and "it feels right."
🚨 TikTok incident — led response for a publishing rate drop we spotted in production. Traced it to error_code: 0 responses being incorrectly classified as failures. Diagnosed, fixed, and handed off to the west coast team before EOD.
🤝 Bruno's 30-day mark — completed the role buddy reflection for Bruno's onboarding. He's ramped up fast and already contributing independently.
Insights
Incident Response
Bug Fixes
On-call training, channel fixes, and a proactive DB alert
A week of broad impact — ran on-call training for Bruno, fixed a string of channel analytics auth errors, and caught a MongoDB connection issue before it became a problem.
📟 On-call crash course — walked Bruno through PagerDuty, incident.io, and Kubernetes debugging. Covering the real stuff: how to read alerts, triage incidents, and stay calm under pressure.
🔧 Channel analytics fixes — resolved auth errors across Pinterest, YouTube, and Bluesky workers; enabled Mastodon metrics and backfilling; completed Pinterest cron backfill. Seven Linear issues closed in a single day.
🚨 LinkedIn incident — API timeouts were crashing workers. Merged a fix and bumped backfill worker memory from 300MB to 500MB to handle the load.
🗄️ Proactive DB alert — noticed MongoDB connection counts creeping up, raised the alert before it became an incident, and opened CORE-4419 to refactor DB initialization for selective connections.
On-call
Channel Analytics
Incident Response
Infrastructure
Insights nearing the finish line
A week of focus and depth — the single-page Insights view is almost done, the trends analysis is in development, and I had a chance to reflect on how the tech lead role has evolved since the start of the year.
📈 Insights progress — the single channel post performance page is nearly ready (just the feedback UI left), trend analysis in development, and the old channels page close to done. Starting to see the finish line.
🤖 AI-assisted development — I've been acting as a tech lead managing a set of AI junior developers (Claude Code), completing tasks 10x faster but dealing with much higher context switching. Interesting new way to work.
🎙️ Technical interview — conducted a backend engineering interview. Strong candidate technically, but I leaned "no" — their philosophy on AI tools didn't fit with how Buffer's engineering team experiments and ships.
Insights
Leadership
Hiring
Crystallizing the Insights roadmap
A strategy-heavy week — spent time turning months of exploration into a clear four-track roadmap for Insights, and went deep on benchmarks architecture with the data team.
🗺️ Insights roadmap — structured the initiative into four parallel workstreams: Ingestion Pipeline, Single Channel Post Performance, All Channels Overview, and Engagement Creator Score. Clarity feels good after months of building in parallel.
📊 Benchmarks deep dive — met with Julian, Brandon, and Eduardo on using native MongoDB aggregations for percentile models. A monthly cadence with 2+ years of backfill data is on the table. Exciting potential for showing customers how they compare to peers.
🎉 Company milestone — Buffer hit $2M MRR and $24M ARR. Early Insights data is showing a 14% lift in new users creating their first post within a week. That number makes all the pipeline work feel worth it.
Insights
Strategy
Analytics
Customer feedback, adaptive scheduling architecture
A week of thinking more than coding — customer office hours, an external advisory session, and deep architecture discussions shaped the next phase of the Insights infrastructure.
💬 Customer office hours — ran a session demoing the Insights "Trends" AI prototype. Feedback was positive overall, though we caught some tone issues in the AI-generated copy ("Despite" as a framing word came across as harsh). Small details matter.
🏗️ Adaptive scheduling — solidified a hot/warm/cold channel priority model for how we schedule analytics ingestion, inspired by healthcare appointment triage systems. Debated MongoDB vs SQS as the backing store with Dinos and Eduardo.
🔍 HighCharts audit — confirmed our license expired back in 2014. Renewal is $829/seat/year. Time to evaluate alternatives.
Insights
Architecture
Customer Feedback
Onboarding Bruno and deploying 8 channel workers to production
Two big wins this week: Bruno's first day went smoothly despite a Helm v4 breaking change, and we finished deploying channel analytics workers for all eight supported platforms.
👋 Bruno joins the team — gave him a full infrastructure overview: Hermes, Orbstack, AWS CLI, Rush monorepo. Hit a snag with a Helm v4 breaking change during setup — downgraded to v3 and kept moving.
🚀 Eight workers deployed — Facebook, Instagram, Twitter, LinkedIn, Bluesky, TikTok, Mastodon, and YouTube analytics workers are now running in production. Scaled Facebook workers from 3 → 40 to clear the message backlog.
🤖 Feature flag automation — built a GitHub Actions workflow that scans for 100%-released flags older than two months and auto-marks them for removal. One less thing to do manually.
📐 Facebook analytics enhancement — added multi-metric support with month-boundary chunking so we handle the API's date range limits gracefully.
Onboarding
Channel Analytics
Infrastructure
Automation
SNS infrastructure, channel analytics in production
A week of heavy infrastructure work — SNS event routing live, channel analytics pipelines rolling out to production, and an expanded tech lead scope after some team changes.
📡 SNS event subscriptions — shipped automatic routing of channel events to backfill queues. This unlocks a cleaner architecture for keeping analytics data fresh without manual triggers.
🚢 Pinterest deployment complete — finished deploying Pinterest workers and opened the channel analytics backfill mutation UI PR. The rollout is scoped to visual refresh users first, starting with Facebook, Instagram, and LinkedIn.
📋 Expanded responsibilities — took on broader Insights project ownership after a team departure, including mentoring Bruno through onboarding. More context switching, but good visibility into the full picture.
Infrastructure
Channel Analytics
Leadership
Seven ingestion pipelines shipped and covering for a teammate
The most prolific shipping week of the year so far — built ingestion pipelines for all seven social networks, handled an incident, and covered on-call for a teammate going through a tough time.
🏭 All seven pipelines shipped — Twitter, Facebook, Pinterest, LinkedIn, YouTube, Mastodon, and TikTok follower count ingestion pipelines are done. Four shipped in a single day on Tuesday, the remaining three by Thursday. Every network now has a pipeline.
🛠️ LocalStack SQS Dashboard — built a dev tooling improvement in Hermes that makes it much easier to inspect SQS queues locally. Small investment, big quality-of-life improvement for the team.
🚨 Incident response — Start Pages went down due to a build issue. Coordinated an ArgoCD rollback and got things stable quickly.
🤝 Covered on-call for Rathes while he dealt with a family situation. That's what teammates are for.
Channel Analytics
Infrastructure
Incident Response
Pivoting to GraphQL and kicking off Insights
A pivotal week — we made a significant architectural decision for Post Insights, launched the initiative cross-functionally, and I found an unexpected outlet for AI tooling at our Hack Day.
🔄 GraphQL pivot — moved away from Analyze RPC toward GraphQL backed by existing Publish data. This unlocks analytics support for all channels including the free plan. Built and shared the first Post Insights Summary prototype wired via GraphQL.
🚀 Insights initiative kickoff — cross-functional meeting with Brandon, Sofia, Simon, Kateryna, Adam, and Hailley. Aligned on a three-tier analytics strategy and set the Q2 deprecation timeline for legacy Analyze.
🤖 AI Hack Day — built a feature flag cleanse tool using Claude Code that scans for fully-released flags and opens removal PRs automatically. Shipped 12+ PRs in one day. Great example of what's possible when you pair AI tools with deep codebase knowledge.
🚨 Incident — analytics collectors crashed due to an assertCanAccessChannels regression. Identified, reverted, and resolved same day.
Insights
GraphQL
AI Tools
Incident Response
Building the analytics module and rolling out Instagram scopes
A week of infrastructure investment — created the shared analytics module that will power all future analytics work, while rolling out the Instagram Login analytics scope to 100% of users.
📦 New analytics module — created domains/analytics-modules in our Rush monorepo as the shared home for analytics code. Built the package from scratch (+627 lines) and refactored Analyze to use it immediately (-310 lines of duplication removed).
📱 Instagram scope rollout — rolled out the instagram_business_manage_insights scope from 25% → 100% over the course of the week. Also added follows metric ingestion and removed freemium limitations on post metrics across all services.
🐛 Schedule bug fix — fixed an issue where posting schedules couldn't be copied between X and Threads due to unnecessary authorization checks blocking the operation.
📰 Changelog API — exposed changelog entries on the free-tools-api, giving us a public endpoint for surfacing product updates.
Analytics
Instagram
Infrastructure
Instagram analytics deep-dive and incident response
A week split between exciting discovery work on Instagram analytics and an unexpected incident that needed quick resolution.
📊 Instagram Login insights — tested the IG Login Insights endpoint via Graph Explorer and confirmed metrics parity with Facebook Login. Recorded a walkthrough video and aligned with Brandon on scope. The data is there — now it's about building the pipeline.
🚨 Incident INC-313 — Analyze disappeared from the navigation for paid customers. Traced it to a premature feature flag removal. Reverted, stabilized, and documented the root cause. A good reminder that feature flag removals need careful sequencing.
👋 New team member — Bruno joined as my role buddy on the Core UX team. Good to have someone to think through problems with.
Instagram Analytics
Incident Response
Team
Strong start — GA release and analytics pipeline kickoff
First week of the year and we came out swinging. A major GA release, security fixes, and the kickoff of what will become the channel analytics initiative.
🎉 Post Details goes GA — renamed from "View Post," removed the Alpha badge, and released to all customers. Merged 7 PRs on day one covering the release, security fixes, and UX polish. Felt great to start the year by getting something out the door.
🔒 Security — fixed S3 bucket validation for avatar uploads to prevent potential misuse. The kind of fix that's small in code but meaningful in impact.
📡 Analytics pipeline kickoff — met with Brandon, Dinos, and Amanda to plan the Instagram Login API integration. Early technical constraints mapped out: the API gives us likes and comments, but not reach or engagement directly. Good to know early.
Six Linear issues completed, 7 PRs merged. A good start.
GA Release
Security
Analytics
Clearing the decks before CX Week
This week was all about clearing the decks and getting ready for next week's company-wide CX Week—four days dedicated to polishing the product before Buffer's busy January.
📋 CX Week is officially kicking off — announced project teams and finalized scope for our December 15-18 focus on reducing customer friction points
🐛 Continued our bug-squashing streak — tackled several customer-reported issues across dark mode accessibility and content scheduling
🔒 Security maintenance — patched vulnerabilities across multiple repositories to keep our infrastructure healthy
Heading into CX Week with momentum. There's something energizing about cross-functional teams coming together to tackle friction points before the new year rush.
CX Week
Bug Fixes
Security
Experiment ready and zero bugs on the backlog
Wrapped up a focused week getting everything ready to test how surfacing recommended times as posting schedules impacts user activation.
📅 Recommended times now visible in Queue and Calendar views — setting up the treatment group experience for our upcoming experiment
🏠 Prepping for Customer Experience Week (Dec 15-18) — curating ideas and forming cross-functional teams to polish the product before the end of the year. Like cleaning house before the guests arrive!
🧹 Continued infrastructure cleanup — removed deprecated SQS queues and cleaned up legacy environment variables from AWS Parameter Store
🐛 Team hit zero bugs on our backlog — feels good heading into December with a clean slate
Excited to kick off the month with a big test ready to launch and the whole team rallying around customer experience!
Experiments
Infrastructure
Customer Experience
Smarter Posting Times and prepping for Customer Experience Week
After a few weeks focusing on refactors, this week we have been working on improvements to our Posting Times experience while squashing some sneaky bugs along the way.
✨ New feature: Smarter Posting Times editor - Built several improvements to help users set up their posting schedules faster, i.e: copying the posting schedule from another channel, and be able to preview schedule changes. Getting this ready for an upcoming release.
💡 Keeping the Lights On - I was able to spend some time to fix three bugs and work on removing the unused queues for the legacy web workers recently removed. Keeping things clean while saving some money.
🎯 Prepping for Customer Experience Week - December 15–18 the whole company focuses on low-risk, high-impact improvements before our busiest month in January. We've asked team members to submit their ideas and getting ready to collaborate cross-functionally on polishing the customer experience.
Posting Times
Bug Fixes
Customer Experience
Another week of refactor, cleanup and shipping bug fixes
⚡ Contributed to the team-wide Node 22 upgrade across all services - great collaborative effort from the whole engineering team to keep our infrastructure modern and secure.
🚀 Worked on a new welcome banner to improve first-time user experience.
🗑️ Continued infrastructure cleanup: removed deprecated SendGrid integration, and old crons and workers - making the codebase leaner and easier to maintain.
💬 Had some great conversations with teammates to define scope for our next project - exciting things ahead!
🐛 Squashed a few bugs: prevented duplicate native posts from showing empty content, and posts getting stuck in "Sending" - no more confused users wondering why their posts won't show or publish.
Some weeks are about flashy new features. This one was about making Buffer more reliable and removing tech debt that's been hanging around. The kind of work that users don't see directly, but definitely feel when things just work.
Infrastructure
Node 22
Bug Fixes
Tech Debt
Week of shipping, learning, and reflecting
This week was packed with meaningful progress building for a new experiment, continue with infrastructure cleanup, and celebrating the launch of Buffer's AI Assistant. So proud of what the team built 👏
🧪 Prepared a new experiment launching Monday: Built new upgrade modal and repositioned CTAs across one area of the product. Excited to see how new users respond to this next week.
✨ Small wins that matter: Fixed a bug in the collapsible sidebar, added a loading skeleton for the app menu.
💭 Monthly reflections: Had my monthly check-in with my manager. These sessions always help me zoom out and see the bigger picture beyond the code.
🏗️ Infrastructure cleanup continues: After last week's refactor, we're slowly removing the unnecessary complexity from our stack. Less moving parts = easier maintenance.
🔥 Caused a major incident: My SQS queue refactor took down password reset emails. One revert later, we're stable. Lesson learned: canary releases > big bang changes. The team's quick response was incredible.
Infrastructure
Experiments
Incident Response
Wrapping up a shorter (but productive!) week
Despite it being a shorter week with Monday's bank holiday and juggling work while one of my kids was home sick 🤒, I'm grateful for the meaningful progress we made.
🏗️ Infrastructure modernization: Led a major cleanup effort removing legacy webworkers across our platform, reducing technical debt and simplifying our architecture for better maintainability.
🔒 Security & code quality: Addressed the last bits of a security vulnerability in our dependencies, refined error handling, and removed redundant code paths—making our platform more secure, stable, and easier to maintain.
✨ Smarter scheduling: Enhanced our Best Time to Post algorithm to avoiding conflicts with already scheduled content, giving users better recommendations.
🚀 Collaborative QA: Worked with the team to thoroughly test a new feature that's launching next week—excited to see it in our users' hands!
Beyond code, I also spent time giving peer feedback to teammates: this is an important part of building a strong engineering culture at Buffer 🤗
Infrastructure
Security
Scheduling
I'm kicking off an experiment 🧪
Every week I'll be sharing what I'm building at Buffer. The wins, the bugs, the security patches nobody sees. Real engineering work, unfiltered.
🌚 Dark Mode: Mission Accomplished 🎃 This week was all about the polish—fixed those pesky images and elements that weren't playing nice in dark mode, cleaned up some styling rough edges, and is finally here: Dark mode is officially "just mode" now.
🎨 Making Buffer prettier, one illustration at a time: Rolled out custom illustrations across login, empty states, and upgrade paths. Out with the generic stock art, in with designs that actually feel like Buffer. Bonus: they look great in both light AND dark mode.
⬆️⬇️ The Queue is getting smarter: Ever wanted to instantly move a post to the top or bottom of your queue? We're testing this internally right now! Added a reorder menu and can't wait to test this out more broadly.
📟 This week I'm On-call 🚨: So between shipping features, I'm also troubleshooting a few production hiccups. It's all part of the job—you learn the system deeply when you're the one keeping it running.
🔒 The not-so-glamorous (but important): Patched an Axios vulnerability. Added PostHog integration for Session Replays. We are going to be trialing this out.
Building in public means sharing the whole picture—the flashy features AND the security patches that nobody sees but everyone needs.
Dark Mode
Design
Security
On-call