<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://www.danubilla.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://www.danubilla.com/" rel="alternate" type="text/html" /><updated>2026-08-09T02:28:28+00:00</updated><id>https://www.danubilla.com/feed.xml</id><title type="html">Dan Ubilla</title><subtitle>A blog on software engineering, engineering management, and personal growth from Dan Ubilla. He focuses on best leadership practices, Ruby on Rails, JavaScript, team building, web applications, and managing oneself. Dan Ubilla is an Engineering Manager at Asana.</subtitle><entry><title type="html">Agency Is Agency Is Agency</title><link href="https://www.danubilla.com/blog/management/agency-is-agency-is-agency.html" rel="alternate" type="text/html" title="Agency Is Agency Is Agency" /><published>2026-07-26T09:00:00+00:00</published><updated>2026-07-26T09:00:00+00:00</updated><id>https://www.danubilla.com/blog/management/agency-is-agency-is-agency</id><content type="html" xml:base="https://www.danubilla.com/blog/management/agency-is-agency-is-agency.html"><![CDATA[<p>The other day I saw <a href="https://x.com/george__mack/status/2055769353300095320">a tweet from George Mack</a>. It depicts agency as a triangle. At each point, there’s a maxim: “I will figure it out”, “I can fix it if it breaks”, and “I am willing to be misunderstood.”</p>

<p>It’s stuck with me for a couple of reasons. One, for a long time, agency has seemed obvious to me. Agency looks like determination. It looks like action. It looks as clear as the color blue. Two, I had considered agency to be binary. You have it or you don’t. Or maybe more specifically, you’re using your agency or you’re not. But looking at the agency triangle, I realized agency is more of a spectrum — the more of each tenet of agency that is present, the more agentic one can be. The trick then becomes how can we activate in these three ways? And for leaders, how can we activate it in others?</p>

<p>As a leader, one of the most leveraged things we can do is spot agency and nurture it. Our job is to help other leaders achieve growth towards autonomy at their level of impact and then push them to grow to the next level of impact. People are agentic up to a point and then they need support. This support can be a foundation to enable the growth. Or it can be amplification to lift and share the impact with others.</p>

<p>“I will figure it out.” We all need to believe we’re capable of something we have not done before. When we see the pieces that comprise the whole of a skillset, we should be calling it out, authentically. And authentically is the key. To give people false confidence is a sin in and of itself.</p>

<p>“I can fix it if it breaks.” Is this a Type 1 or Type 2 decision? Reminding your team members of the many, many decisions we make that are reversible is a key perspective and challenge you can bring to your discussions. If your team member breaks something, give them space to fix it.</p>

<p>“I am willing to be misunderstood.” Give your team members space to share their mental models. Give them the space to refine them. And when your team member takes a novel idea to the organization, support them in the rooms and forums they are not in.</p>

<p>“I will figure it out.” “I can fix it if it breaks.” “I am willing to be misunderstood.” All facets of the same — agency is agency is agency. Identifying these facets and then nurturing the agency in your org is one of the most leveraged ways to grow your impact over a long horizon. Besides, there’s nothing quite like seeing your team members take on new big things and be successful in the process.</p>]]></content><author><name></name></author><category term="management" /><summary type="html"><![CDATA[Agency isn't binary, it's a spectrum of three maxims. A look at George Mack's agency triangle and how leaders can grow each one in their team.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.danubilla.com/images/social-default.png" /><media:content medium="image" url="https://www.danubilla.com/images/social-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Eval What You Own: Where to Test Multi-Agent LLM Systems</title><link href="https://www.danubilla.com/blog/engineering/eval-what-you-own.html" rel="alternate" type="text/html" title="Eval What You Own: Where to Test Multi-Agent LLM Systems" /><published>2026-05-11T19:08:00+00:00</published><updated>2026-05-11T19:08:00+00:00</updated><id>https://www.danubilla.com/blog/engineering/eval-what-you-own</id><content type="html" xml:base="https://www.danubilla.com/blog/engineering/eval-what-you-own.html"><![CDATA[<p>Recently, I’ve been setting up agents to map reduce my workflows. I’m generally pulling content from a few sources, synthesizing it, and reporting. The shape is pretty consistent. It ends up looking like a few specialist connectors and agents and one synthesizing agent running weekly. This leads to one of the more sinister problems in software development: a mighty long feedback loop. So I looked to evals to speed up iteration.</p>

<p>There were three places I considered investing in evals:</p>
<ol>
  <li>Sub-agent level: deterministic checks on what each connector returns</li>
  <li>Synthesis level: given sub-agent output checks what the synthesizer produces</li>
  <li>End-to-end: run the whole system, and grade the final output</li>
</ol>

<p>In comparing the three, I found a lot of resonance with the testing pyramid. Sub-agent tests look like unit tests, synthesis tests are almost like integration tests, and end-to-end, well, they’re like end-to-end tests. While the pyramid analogy was useful for wrapping my head around the options, the right choice was derived from first principles.</p>

<p>Sub-agent evals are easy to set up. But you end up mostly mocking the wrong things and testing third-party output. End-to-end evals fight the wide disparity of outputs that emerge from non-deterministic systems. The noise from the output would be too much given my multi-level agentic system. That process of elimination led me to the synthesis level.</p>

<p>The synthesis layer is unique in that it’s the layer that I fully own. This means every failure point is something I can steer toward the intended output. Sub-agent evals could actually fail on the third-party output. End-to-end failures add too much noise. Synthesis failure is either in the parsing of the third-party output, the synthesis of it or the output itself. All of this is within my system boundaries.</p>

<p>The trick that makes this work: input canned sub-agent output into the real synthesizer as fixtures. If you have set up JSON contracts between your sub-agent and agent, you are not mocking the LLM, you’re mocking the data the LLM sees. This provides a deterministic input boundary around a non-deterministic one focusing the signal on the synthesis behavior. Now you can start providing fixtures to mock potential failure modes.</p>

<p>The fixture patterns present themselves as you write down failure modes. How might your sub-agents fail? How might the synthesis fail? And what category of failure mode might they hit? I found myself generating a lot of fixtures to test for groundedness across sub-agents and the synthesis agent. I found a smaller subset of failures in privacy which might pass groundedness checks but provide sub-agent data I would not want in my output. Lastly, I put together a happy path test of what the system should look like given everything is wired up well.</p>

<p>Given more time, people, and scope, I can imagine spending more time on tuning holistic evals. But given these evals are for my personal projects, focusing on evaling the layer I own provides a ton of value in tightening my feedback loop.</p>]]></content><author><name></name></author><category term="engineering" /><summary type="html"><![CDATA[Where to invest in evals for a multi-agent LLM pipeline: skip sub-agent and end-to-end checks and test the synthesis layer you own, using canned fixtures.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.danubilla.com/images/social-default.png" /><media:content medium="image" url="https://www.danubilla.com/images/social-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Feeling Behind on AI? You’re Only a Few Months Behind</title><link href="https://www.danubilla.com/blog/management/youre-only-a-few-months-behind.html" rel="alternate" type="text/html" title="Feeling Behind on AI? You’re Only a Few Months Behind" /><published>2026-02-24T18:53:00+00:00</published><updated>2026-02-24T18:53:00+00:00</updated><id>https://www.danubilla.com/blog/management/youre-only-a-few-months-behind</id><content type="html" xml:base="https://www.danubilla.com/blog/management/youre-only-a-few-months-behind.html"><![CDATA[<p>There’s an anxiety that’s creeping into software engineers lately. Models are shipping every other week. The software engineering tool everyone was talking about last month has been deprecated for something new. Engineers who have always maintained a running list of tech are now overwhelmed by the sheer volume of bullet points getting added to that list. Engineering Managers are trying to keep up both to help their teams and also to keep their own skills up-to-date.</p>

<p>I hear it in the hallways. I read it online. The feeling of being left behind by all the latest is nearly tactile.</p>

<p>But in the mess of new technologies and anxious feelings is the good news. You are only a few months behind. This is all only a couple of years old. The technology is uniquely nascent. And whatever was state-of-the-art a year ago has since been wiped away by something newer. The latest and greatest is building on itself. And the ground you feel slipping under your feet is actually slipping under everyone’s feet.</p>

<p>You’re only a few months behind. And when was the last time in your career you were only a few months behind?</p>]]></content><author><name></name></author><category term="management" /><summary type="html"><![CDATA[For engineers anxious about keeping up with AI tools: the technology is so new that no one is far ahead. The ground is shifting under everyone's feet.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.danubilla.com/images/social-default.png" /><media:content medium="image" url="https://www.danubilla.com/images/social-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Separating Task from Context When Prompting LLMs</title><link href="https://www.danubilla.com/blog/management/everything-else-is-a-task.html" rel="alternate" type="text/html" title="Separating Task from Context When Prompting LLMs" /><published>2026-01-14T20:29:00+00:00</published><updated>2026-01-14T20:29:00+00:00</updated><id>https://www.danubilla.com/blog/management/everything-else-is-a-task</id><content type="html" xml:base="https://www.danubilla.com/blog/management/everything-else-is-a-task.html"><![CDATA[<p>I’ve been talking to my LLMs a lot. I spin up an agent, we collaborate, and generally come out the other side with something useful. Over the course of hundreds — thousands? — of these conversations, my practices have oscillated. Sometimes I’m very precise, and I cut to the core. I know what I need, and I’m able to ask for it. Other times, I’m all over the place, and I prompt like a stream of consciousness. While the stream of consciousness can be helpful to root out the core, I ultimately get something faster when I’m precise. And I tend to be most precise when I know what’s the context and what’s the task.</p>

<p>The other day, I was working on a personal project. I found myself fully uncertain of what I wanted to build next. I mean, I knew what I wanted, only, when I went to write it out, my mental model was loose and rickety. As sentence piled onto sentence, I found myself asking: what is my ask? Do I know what I want to be built? Or am I asking for help to figure out what to build? I was quickly able to cut to the core and pivot to that ask.</p>

<p>Magically, when you focus on the ask, it becomes clear that everything else is context. By starting with my ask, I can draw the line between the context my LLM already has and what remains. And my immediate goal becomes to close that gap. “Ok, so here are some important things to keep in mind” is a great signal for my own mind on what else needs to be shared. The beauty of separating task from context: by writing the context you strengthen your own mental model, sharpen your ask, and get to the outcome faster.</p>

<p>When I last explored this a few weeks ago, I had my trio of markdown files: AGENTS, PRD, and BACKLOG. Those have exploded recently, but luckily, in a fairly organized manner. My AGENTS describes the how, the PRD describes the high-level what, and my newly-branded BACKLOG becomes the delta between the product today and the design in the PRD. On top of that, the commands and skills I’ve defined provide further context into how my agents and I should work with a lot of meta guidance on how to write to the PRD and BACKLOG as well as updating AGENTS, agents, skills, and commands. Again, it’s the clear separation of context and task.</p>

<p>So what have you written lately for your collaborators? Are you sharing context or scoping work? The distinction should drive the writing.</p>]]></content><author><name></name></author><category term="management" /><summary type="html"><![CDATA[Precise prompts start with a clear ask. How separating the task from its context sharpens your mental model and gets better results from LLM agents, faster.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.danubilla.com/images/social-default.png" /><media:content medium="image" url="https://www.danubilla.com/images/social-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Loops: Learning to Use LLMs Through Iteration</title><link href="https://www.danubilla.com/blog/management/loops.html" rel="alternate" type="text/html" title="Loops: Learning to Use LLMs Through Iteration" /><published>2025-12-22T20:08:00+00:00</published><updated>2025-12-22T20:08:00+00:00</updated><id>https://www.danubilla.com/blog/management/loops</id><content type="html" xml:base="https://www.danubilla.com/blog/management/loops.html"><![CDATA[<p>Lately, I’ve been thinking a lot about one of my first programming lessons. I must have been 8 or 9, and I had picked up a VisualBasic textbook that was wedged firmly in the family bookshelf. The first exercise was programming a dot to move one space on a board on the screen. It was fascinating and wildly rewarding, but as you know, this story isn’t about moving that dot one space. This story is about the next lesson — how to move that dot again and again and again in just a couple more lines of code.</p>

<p>About a year ago, I spent a lot of time thinking about how to use LLMs. What are they good at? Where do I need that? It was a pretty daunting exercise to examine everything you’re doing and try to find the right job to be done. And while I did find a few use cases here and there, the models kept getting better. And I kept wondering what else I could be using them for.</p>

<p>It was only recently that I realized I’d fallen into a habit of creating loops for myself. In these loops, I’d use LLMs, learn something about them, then return to the beginning: use LLMs, learn something more. Each discovery pulled me back for another rep. Each time, I would push the boundary on what I did the last time. And after a number of reps, the broader system started to become more clear. This clarity then presented more opportunities to pull in and try LLMs in new workflows. The system became self-propelling.</p>

<p>I fell into two principles I adhere to:</p>
<ol>
  <li>When you’re uncertain, make moves that collect information.</li>
  <li>Where possible, compound knowledge.</li>
</ol>

<p>Create loops. If you’re a software engineer, solve a problem you see often. Push it to production where you can gather feedback. Then iterate, iterate, iterate. Start simple. Repeat. The old lessons prevail. Happy looping!</p>]]></content><author><name></name></author><category term="management" /><summary type="html"><![CDATA[How creating feedback loops — use LLMs, learn something, repeat — compounds knowledge faster than searching for the perfect AI use case up front.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.danubilla.com/images/social-default.png" /><media:content medium="image" url="https://www.danubilla.com/images/social-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Everything Is Text: Managing LLM Context with Markdown</title><link href="https://www.danubilla.com/blog/management/everything-is-text.html" rel="alternate" type="text/html" title="Everything Is Text: Managing LLM Context with Markdown" /><published>2025-09-10T21:13:00+00:00</published><updated>2025-09-10T21:13:00+00:00</updated><id>https://www.danubilla.com/blog/management/everything-is-text</id><content type="html" xml:base="https://www.danubilla.com/blog/management/everything-is-text.html"><![CDATA[<p>I’ve been writing code with LLMs for nearly two years. I’ve tried all sorts of tools, pushed tools through every workflow. But the breakthrough wasn’t a new app or model or even a better prompt — it was the humble markdown file. Plain, portable markdown text. With LLMs, the game is in how you get your context to the model. And the more you treat as text, the more you unlock.</p>

<p>For all the slick features offered to get context to the LLM tool, the crux of it is: how do we canonize our mental model for the agents to act as precisely as we desire. And we canonize in markdown files. These markdown files — best practices, PRDs, todos — are all the lifeblood for agents. What’s the shape these files should take so I can integrate seamlessly with the LLM tools? And how could I decentralize and democratize the todos to be accessible from more devices?</p>

<p>And I landed on: what if it’s all text? What if it’s all markdown? What would it be like to fully bend to the form factor for which LLMs optimize?</p>

<p>So I settled on three files: AGENTS.md, PRD.md, and a TODO.md. Agents to describe the how. A PRD to describe the vision. These two are more stable. But Todo describes what’s happening next. It’s the most malleable and receives the most reads and writes. It needs to follow me.</p>

<p>While the markdown files were portable between LLM tools, they were stuck on my machine. This wasn’t so bad for the first two files, but the Todo was my workhorse. Then I had my a-ha moment. I use Obsidian as my notes app. It syncs markdown files across devices and to the cloud. So I took all of my side projects’ Todo files, moved them to Obsidian, and created symlinks from their original directory. Now I can update my coding agents’ next todos from my phone. And when I’m at my machine, they’re ready to be picked up. The context follows me, not the other way around.</p>

<p>When more of your work is text, the LLMs and the device syncing flow seamlessly. The dream of the always-on agent doesn’t have to be driven by tools or models. It’s about context. It’s always been about context. And that context is just text. We just need to move it where it needs to be.</p>]]></content><author><name></name></author><category term="management" /><summary type="html"><![CDATA[Why plain markdown files are the key to working with LLM coding agents — canonizing context in AGENTS.md, PRDs, and todo files that sync across devices.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.danubilla.com/images/social-default.png" /><media:content medium="image" url="https://www.danubilla.com/images/social-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">You Are a Prism: A Manager’s Role in Filtering Culture</title><link href="https://www.danubilla.com/blog/management/you-are-a-prism.html" rel="alternate" type="text/html" title="You Are a Prism: A Manager’s Role in Filtering Culture" /><published>2025-08-13T20:35:00+00:00</published><updated>2025-08-13T20:35:00+00:00</updated><id>https://www.danubilla.com/blog/management/you-are-a-prism</id><content type="html" xml:base="https://www.danubilla.com/blog/management/you-are-a-prism.html"><![CDATA[<p>In his seminal <em>High Output Management</em>, Andy Grove captures a key management role: filtering information. Managers do this in two directions. As a manager, you take in organizational context and distill it down to the key pieces your team needs to be successful. Similarly, you take all the information your team is creating and distill it for leadership, your manager, and your peers. You filter information, sharpen it, and pass it along.</p>

<p>But information isn’t your only medium. You also deal in culture. Because you are a prism.</p>

<p>One of the strange parts of leadership is that you both lead the team and are on it. When someone asks you, “How is the team doing?”, they’re generally asking about your reports. But imagine two outsiders talking and one asks about your team. At that point, the team includes you. You’re Schrödinger’s manager — sometimes you’re on the team, and sometimes you’re not.</p>

<p>Most of the time this is inconsequential. But two failure modes occur in two distinct scenarios: you’re highly positive while your team is highly negative, or you’re highly negative while your team is highly positive. Let’s look at each.</p>

<h2 id="when-youre-high-and-the-team-is-low">When You’re High and the Team Is Low</h2>
<p>First, imagine an org-wide process change: for every pull request created, the author must record a short video describing the change. “That can’t be so bad,” you think. “Besides, this will be good public-speaking practice.” But your team is seething. “This will slow us down!” “Who’s going to watch these anyway?” Your optimism is too far removed from your team members’ reality. If you present your rose-colored view, your teammates will not only reject it but also begin to lose trust in you.</p>

<h2 id="when-youre-low-and-the-team-is-high">When You’re Low and the Team Is High</h2>
<p>Second, the inverse: you’re low; the team is high. From your vantage point, you see rocks they haven’t spotted yet. Your team members, now energized, are able to think beyond themselves. They’re observant. And they notice your distress. When they’re flying high and you’re in it, they attune quickly. Your distress becomes theirs, and your gloom about those rocks becomes a self-fulfilling prophecy.</p>

<p>So how do you manage these disparities? Remember: you are a prism. Reflect the energy that’s necessary, and absorb the energy that’s necessary, for your team to be successful. You also reflect your team’s energy back to the rest of the organization.</p>

<p>When you’re out of sync with your team, the goal is to triangulate where you are, where they are, and where you need the team to go. Then walk them there. Genuinely. Your team and your peers will spot inauthenticity quickly. Get there yourself first. Then you can show the way.</p>

<p>You are a prism. Reflect the light for your team.</p>]]></content><author><name></name></author><category term="management" /><summary type="html"><![CDATA[Managers filter more than information — they filter culture. How to lead when your energy and your team's diverge, drawing on Andy Grove's High Output Management.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.danubilla.com/images/social-default.png" /><media:content medium="image" url="https://www.danubilla.com/images/social-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Start with Your Feet: Advice for New Engineering Managers</title><link href="https://www.danubilla.com/blog/management/start-with-your-feet-and-look-to-the-horizon.html" rel="alternate" type="text/html" title="Start with Your Feet: Advice for New Engineering Managers" /><published>2024-10-03T17:35:00+00:00</published><updated>2024-10-03T17:35:00+00:00</updated><id>https://www.danubilla.com/blog/management/start-with-your-feet-and-look-to-the-horizon</id><content type="html" xml:base="https://www.danubilla.com/blog/management/start-with-your-feet-and-look-to-the-horizon.html"><![CDATA[<p>Having mentored and managed numerous Engineering Managers, I’ve often seen them navigating new, sometimes overwhelming, leadership challenges. Whether they’re onboarding onto an unfamiliar team, building a new team from scratch, or leading through significant changes like a shift in scope or a key team member leaving, the uncertainty can be daunting.</p>

<p>In all these cases, I share the same advice: <strong>Start with your feet, then look to the horizon.</strong></p>
<h3 id="step-1-start-with-your-feet-now">Step 1: Start with Your Feet (Now)</h3>

<p>As a new EM, you’re faced with a series of immediate challenges. A team is looking to you for direction, asking questions like:</p>
<ul>
  <li>What are we working on?</li>
  <li>Why is it important?</li>
  <li>What are we building toward?</li>
</ul>

<p>In these moments, I encourage EMs to start with their feet. Mentally picture yourself focusing in on the ground at your feet. Everything else washes away. What are the things the team needs today?</p>

<p>Tactically, I recommend EMs start with the backlog. When your team comes in on Monday, do they know what they should be working on? If the answer is anything less than a confident yes, start here. Your goal is to ensure there’s a well-defined, actionable sprint’s worth of work ready to go. Creating a backlog is the first step in establishing clarity and momentum.</p>
<h3 id="step-2-lift-your-gaze-the-next-sprint">Step 2: Lift Your Gaze (The Next Sprint)</h3>

<p>Once you have the a sprint of backlog set, picture yourself slowly lifting your head just a little. You’ve handled the immediate, but what about the next sprint? If it takes you a sprint to prepare a sprint’s worth of work, your next step is creating the space for you to think further ahead. Begin by asking: what can I delegate from my sprint-to-sprint activities to that will free up my time for longer-term thinking?</p>

<p>Start small. Hand off certain responsibilities — backlog grooming or sprint planning — to a tech lead or senior engineer. Then look bigger. Can you delegate building a domain-focused chunk of the backlog to a team member? At tha point, you’ree starting to create some self-sustaining momentum.</p>
<h3 id="step-3-look-to-the-horizon-quarterly--beyond">Step 3: Look to the Horizon (Quarterly &amp; Beyond)</h3>
<p>As the team puts together sprints without your direct interaction, you can start looking further out. It’s time to think in quarters or even longer.</p>

<p>Start by asking:</p>
<ul>
  <li>Can the team set and work toward quarterly goals?</li>
  <li>What major projects or initiatives are likely six months out?</li>
</ul>

<p>The key here is that fidelity of the planning doesn’t need to be high — after all, you’re looking at the horizon, not examining every step. This longer-horizoned thinking is essential, but it’s a gradual process, one that only becomes possible once the immediate sprint work is stabilized.</p>

<p>By following this stepwise approach—starting with the immediate needs and gradually lifting your focus—you’ll build both confidence and clarity for yourself and your team. In times of transition, keeping this framework in mind ensures you’re able to balance short-term tactical execution with long-term strategic vision.</p>

<p>Remember: start with your feet, then slowly look to the horizon.</p>]]></content><author><name></name></author><category term="management" /><summary type="html"><![CDATA[A stepwise framework for new engineering managers: stabilize the sprint backlog first, delegate, then gradually extend planning to quarters and beyond.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.danubilla.com/images/social-default.png" /><media:content medium="image" url="https://www.danubilla.com/images/social-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Push vs. Pull Learning for Engineer Onboarding</title><link href="https://www.danubilla.com/blog/management/push-vs-pull-learning.html" rel="alternate" type="text/html" title="Push vs. Pull Learning for Engineer Onboarding" /><published>2024-08-14T07:35:00+00:00</published><updated>2024-08-14T07:35:00+00:00</updated><id>https://www.danubilla.com/blog/management/push-vs-pull-learning</id><content type="html" xml:base="https://www.danubilla.com/blog/management/push-vs-pull-learning.html"><![CDATA[<p>As a software engineer, you’re always in learning mode—whether it’s a new tech stack, a fresh codebase, or an unfamiliar domain. When someone on my team is onboarding to something new, they often ask me, “What’s the best way to get up to speed?” The answer varies, but I find it helpful to discuss two key approaches to learning: push learning and pull learning.</p>

<p><strong>Push learning</strong> is when you’re fed material to learn. Imagine picking up a textbook, starting at chapter one, and steadily making your way through the book. Or maybe you’re watching a lecture series on YouTube, moving through each video in sequence. Here, you’re absorbing what’s being given to you, which is great for gaining broad knowledge and understanding theoretical concepts.</p>

<p><strong>Pull learning</strong>, on the other hand, is more targeted. Picture a problem set in front of you—pull learning involves diving into resources as needed to solve the issue at hand. At work, this might mean watching a specific lecture to tackle a particular problem. Pull learning is all about learning by doing, which tends to make the material stick.</p>

<p>When you’re onboarding, blending both styles can be incredibly effective. The ratio depends on your siituation. One common consideration is how quickly start contributing. You may choose more push learning to optimize for a longer time horizon. If quick wins are crucial, more pull learning might be in order.</p>

<p>Another important consideration is the risk of not being fully ramped up. If you overindex on pull learning, you will only encounter things that are immediately relevant, which could leave you unprepared for rare but critical challenges. In other words, if a critical piece of your infrastructure rarely goes down, you won’t know much about it until it’s too late. That’s where push learning comes in —  it helps you cover the unknowns.</p>

<p>By default, I encourage people to begin by applying pull learning and introducing some level of push learning to start. A great question to check your investment levels: “If I push learn at this rate, how long will it take to learn the material? And “Is that rate acceptable given the criticality of the key pieces of onboarding?” This reality check usually nudges people a bit more toward push learning</p>

<p>Keep in mind, push learning can and should be adjusted. If there are certain parts of the material that are more critical, you can and should get to them first as a part of your push learning. This form of push learning when the push learning is prioritized without being just-in time can be referred to as spread learning, and its inverse is referred to as scatter learning.</p>

<p>Bring this mental model to your next onboarding conversation. Happy learning!</p>]]></content><author><name></name></author><category term="management" /><summary type="html"><![CDATA[Two approaches to getting up to speed on a new codebase or domain: push learning for broad coverage, pull learning for learning by doing — and how to blend them.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.danubilla.com/images/social-default.png" /><media:content medium="image" url="https://www.danubilla.com/images/social-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Managing a Portfolio of Work as an Engineering Leader</title><link href="https://www.danubilla.com/blog/management/a-portfolio-of-work.html" rel="alternate" type="text/html" title="Managing a Portfolio of Work as an Engineering Leader" /><published>2024-08-06T08:28:00+00:00</published><updated>2024-08-06T08:28:00+00:00</updated><id>https://www.danubilla.com/blog/management/a-portfolio-of-work</id><content type="html" xml:base="https://www.danubilla.com/blog/management/a-portfolio-of-work.html"><![CDATA[<p>At any level of engineering, you are responsible for some work. Early in your career, it’s a ticket, a task. The work is narrow but likely deep. As you grow  in your engineering leadership career, your purview becomes broader. And at some point, you’re no longer responsible for one thing. You become responsible for a collection of work. We call this a portfolio of work. Your portfolio of work and how you manage it constitute the impact you can make. And the further along you get in your career, the more nuance exists in how you can manage it.</p>

<p>Progressing from being responsible for one thing to many starts at the large project level. If you lead a project, break down the work into parallel pieces, and have teammates contributing, congrats — you have a portfolio of work. This is your first real experience managing a portfolio for the outcomes you desire. Initially, your project might be tightly scoped, but as the scope grows, so will the unknowns. You’ll begin to manage risk in how you approach the project and allocate work. This is your first real taste of managing a portfolio of work.</p>

<p>If you are a tech lead or engineering manager, you are responsible for the team’s outcomes. You’re now managing a portfolio of work across a team. At its most basic, you can manage each project separately to success. But as you gain experience, you can begin to manage the whole as a portfolio. Here are some important questions to ask: Which of the team’s projects do I expect to deliver the majority of expected impact? If a project was at risk, which project would I deprioritize to increase the chances of success? What does the curve of success for each project look like: is it binary or is it linear? Having these mental models can allow you to manage your work for greater impact.</p>

<p>As you grow comfort in managing your portfolio, the next step is to build in an intentional amount of risk. If your team has the capacity, you can begin to organize your portfolio to take on a moonshot: book 60% to “sure thing” work, 30% to “somewhat risky but linear impact” work, and push the remaining 10% toward that home run shot.</p>

<p>Once you manage your quarterly and half year planning well enough, you can intentionally manage your portfolio with time as an added dimension. Set your team up to deliver for a couple quarters in a row, and take the big home run swing once you’ve banked some gains. Or, if you took a swing and it didn’t come through, plan for more “sure thing” work the following quarter. Your portfolio of work exists in a given quarter or half year as your work-in-progress. It exists in hindsight as your team’s reputation. Build up your team’s social capital and spend some of it.</p>

<p>Finally, there’s breadth. As you work across teams, you begin to manage portfolios of portfolios. To do this with intentionality, you need to work with your team counterpart. Encouraging people and teams to take on or off risk becomes a part of your calculus. Two failure modes to consider. In one, teams are continually risk-averse and you need to push one toward risk. In the other, all of your teams are too bold, and you risk little delivery across them. As you manage your teams, manage them to produce the portfolio of work you intend across their breadth.</p>

<p>How’s your portfolio of work performing? What can you do this week to build some more intentionality into it?</p>]]></content><author><name></name></author><category term="management" /><summary type="html"><![CDATA[How engineering leaders manage a portfolio of work: balancing sure things, calculated risks, and moonshots across projects, quarters, and teams.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.danubilla.com/images/social-default.png" /><media:content medium="image" url="https://www.danubilla.com/images/social-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>