# Michael Bastos - LLMs.txt ## Blog Posts ### How Vibe Coding Changes the Sales Culture ID: how-vibe-coding-changes-sales-culture Published: 2026-01-09 Read time: 7 min read Tags: Vibe Coding, Engineering Culture, Sales, Product Management, Forward Deployed Engineer Domain: Engineering Leadership, Product Strategy Role: Engineering Manager, Technical Lead OG Image: /images/blog/how-vibe-coding-changes-sales-culture.png Excerpt: In a world where anyone can generate a demo, what’s the new minimum bar for something being “sellable”? Vibe coding is bridging the empathy gap between Sales and Engineering. Content: There’s always been tension between Sales and Engineering. As long as I’ve been building software, that tug of war has been there. When I was a younger developer, I chalked it up to incentives. Sales is rewarded for closing the deal, even if the deal is a little… optimistic. Engineering is rewarded for delivering what was promised, even when the promise was made in a vacuum. So you end up with the classic dynamic: Sales overpromises because they’re trying to win. Engineering underpromises because they’re trying to survive. What’s interesting is what “vibe coding” just did to that equation. For the first time, a purely sales, non-developer type can pick up tools and try to build the thing they’ve been selling. And when you see someone complain that their vibe-coded project cost them thousands in prospects, I don’t see that as some new tragedy. I see it as a new form of empathy. They’re feeling the same pain engineering has felt forever: The gap between “that sounds simple” and “that works in production” is where dreams go to die. Because the real work isn’t the demo. It’s auth, edge cases, permissions, data integrity, UX states, performance, integrations, deployment, monitoring, compliance. All the unsexy parts that don’t show up in a pitch deck, but absolutely show up in the customer’s experience. The other side of this is the message vibe coding sends to engineers. It’s not enough to be frontend or backend anymore. It’s not even enough to call yourself “full stack” and stop there. The bar is shifting toward outcome ownership. That’s why the rise of concepts like Forward Deployed Engineer matters. Not because it’s a cool title, but because it’s an organizational admission that the translation layer is the real bottleneck: Customer reality → technical reality → delivered outcome. FDEs shrink the distance between what customers mean and what gets built, in real time, with real tradeoffs. But of course, it brings new problems too. You can accidentally create two classes of engineers: the ones closest to “impact” and the ones quietly holding the platform together. This often turns FDEs into human glue that everything depends on. It can also convince sales that “engineering closer to the customer” means “engineering will say yes more often,” when the real value is saying no faster, with better alternatives. Still, I think this is a net positive shift. Vibe coding is forcing the business side to touch the stove. And it’s forcing the technical side to step up from code ownership to outcome ownership. So here’s the real question: In a world where anyone can generate a demo, what’s the new minimum bar for something being “sellable”? ### Bridging the Gap in Practice In the real world, the tension between sales and engineering rarely evaporates overnight. Sales teams will still feel the pressure of quotas, and engineers will still feel the weight of technical debt. However, vibe coding offers a shared language that can de-escalate these conflicts. When a salesperson builds a prototype, they aren't just making a demo; they are stepping into the complexity they usually gloss over. #### Watch for the pendulum swing There is a risk of overcorrection. You don't want your sales team spending their days debugging React components instead of closing deals, nor do you want engineers relinquishing all product sense to the commercial side. The goal is empathy, not role reversal. If you see account executives missing calls because they are tweaking CSS, pull back. Conversely, if engineering dismisses every vibe-coded prototype as "trash code" without looking at the user intent it captures, they are missing the point. #### A practical first step Encourage a "demo-first" spec process. Instead of a text-based requirements document, ask the commercial stakeholder to bring a rough, vibe-coded implementation of what they sold. It doesn't have to work well, but it should function enough to show the workflow. This shifts the conversation from abstract promises to concrete behaviors, forcing alignment before a single line of production code is written. #### Signs of success You know this cultural shift is working when the question from sales changes from "Can we build this by Friday?" to "I tried building this, and I hit a wall with the data model—how hard is that to fix?" That nuance—the understanding of structural blockers—is the signal that your organization is moving from two warring tribes to a single product team. ### Risking the Brig to the Boardroom ID: risking-the-brig-to-the-boardroom Published: 2025-11-13 Read time: 7 min read Tags: Leadership, Organizational Culture, Data Integrity, Communication, Decision-Making, Accountability Domain: Government/Defense OG Image: /images/blog/risking-the-brig-to-the-boardroom.png Excerpt: A Marine Corps lesson in disciplined honesty, shaped by the risk of the brig, that became a career advantage in civilian leadership. Content: In my last year as a Sergeant in the Marines, I learned a lesson that followed me into every job after. Not about spreadsheets or maintenance cycles, but about the cost of truth—and the discipline required to deliver it in a way that keeps the mission moving. I never actually spent time in the brig, but telling the truth carried a real risk of ending up there. I spent 2008 analyzing maintenance data and finding discrepancies that were, in practice, a kind of lying on official reports. Nobody thought of themselves as “lying.” It started small. A vehicle “basically good” when it wasn’t. A deferred fault written as “pending parts” when no parts were ordered. A readiness number rounded up because the unit “needed” it. But small distortions don’t stay small. As they go up the chain, they compound. And eventually, the numbers that senior leaders use to plan operations become fiction. That was the environment: high consequence, high hierarchy, and very little tolerance for being right in the wrong way. ## The problem wasn’t the data. It was the incentives. Readiness reporting creates a natural tension: The institution needs the truth to allocate resources and make real decisions, but units want to look capable because capability drives reputation, leverage, and opportunity. Meanwhile, individuals want to avoid blame and keep friction low. When those pressures converge, “optimistic reporting” becomes cultural. No single person feels responsible for the overall distortion because each change seems minor. But the mission doesn’t care how the distortion happened. The mission only cares that the output is wrong. ## Being the lowest ranking person in the room I would sit in commanding general meetings as the lowest-ranking person in the room, in the back. My job wasn’t to speak. My job was to know. When the general asked a question, I’d race up to my boss—Master Gunnery Sergeant or Chief Warrant Officer 5—and flip my report to the exact page with the answer. I understood the data better than the officers making decisions from it. But I wasn’t allowed to talk. Not because I didn’t know what I was doing, but because the delivery itself carried risk. In that environment, the truth had a chain of command. ## “The right thing” could still land you in trouble Here’s the part people outside the military don’t always understand: Even when you are correct, you can still be wrong. Not wrong on facts. Wrong on posture. Wrong on respect. Wrong on what you implied about someone above you. Even answering questions one-on-one with majors and colonels over the phone could be dangerous. Because when my data contradicted their understanding, it sounded like I was accusing them of incompetence. So I’d have a chaperone. Someone to oversee what I said and how I said it, to ensure I didn’t cross a line that would turn “helpful” into “insubordinate.” That sounds extreme until you realize what the organization was protecting: This protects authority so decisions can be made quickly, cohesion so units can operate under stress, and respect so leadership structures don’t collapse. The military isn’t built to be a debate club. It’s built to execute. But it still needs truth. So it rewards a specific skill: delivering hard truth without destabilizing the people responsible for acting on it. ## The pivot after leaving the Corps Fast forward into civilian life. I realized something liberating: If I was willing to risk jail time to tell officers the truth, the worst-case scenario in corporate America was I might get fired. A CEO or VP couldn’t throw me in the brig. They couldn’t take my freedom. And that reframed everything. I decided I never wanted a job so badly that I wouldn’t tell leadership: I would point out when their idea wouldn’t work, when the plan had holes, when the assumptions were wrong, or when the tradeoffs were unacceptable. Not to be a contrarian. Not to be “the smart guy.” But because truth is a force multiplier. ## Why this is unusually valuable in civilian organizations In many companies, especially as compensation rises, honesty becomes expensive. People have mortgages. People have private school tuition. People have lifestyle commitments that require steady income. So the default becomes: So the default becomes avoiding conflict, saying what the room wants to hear, giving feedback in vague language, and letting bad ideas drift forward until they fail “on their own.” That creates a leadership vacuum. Executives do not suffer from a lack of opinions. They suffer from a lack of truth from people who actually understand the work. When everyone optimizes for job safety, the organization loses its internal early-warning system. ## The difference between “telling the truth” and “being effective” One of the best lessons the Marines taught me is that bluntness is not the same thing as honesty. If your goal is to protect your ego by “saying it straight,” you’re not serving the mission. You’re serving yourself. Effective truth-telling has constraints: Effective truth-telling must be accurate, timely, actionable, and arguably most importantly, it must preserve trust. If any of those fail, the truth won’t land. And if it doesn’t land, it doesn’t matter how right you are. ## A practical playbook for telling leaders they’re wrong Here is a pattern that works in both hierarchical and modern orgs. ### 1) Start with shared intent Anchor the conversation in mission alignment, not personal criticism. For example, "I think we want the same outcome here: X." or "My goal is to reduce risk before we commit." and "I’m trying to protect timeline, budget, and credibility." ### 2) Name the assumption, not the person Avoid “you’re wrong.” Prefer “this assumption is wrong.” Instead of saying someone is wrong, point out where the assumption falters: "This plan assumes vendor delivery in 2 weeks. Our last three deliveries were 6–10 weeks." or "This forecast assumes no integration work. Integration is the work." ### 3) Bring evidence, not vibes Leaders can handle bad news. They struggle with unsupported bad news. Use prior incidents, metrics, customer feedback, or failure modes observed in similar systems to support your case. ### 4) Offer options with tradeoffs Don’t just block. Provide paths. Frame your suggestions as choices: Option A is faster but higher risk, whereas Option B is slower but lower risk. Option C might offer partial scope but preserves the deadline. Leaders are paid to choose tradeoffs. Help them see the menu clearly. ### 5) Be explicit about the risk envelope Translate engineering reality into business impact. Clarify the consequences: "If we ship like this, we’ll likely see X% incident rate." or "This will create on-call burden and slow feature velocity." Alternatively, "We can do it, but we’ll need to accept a 30–60 day stabilization window." ### 6) Keep your tone calm and your language clean Intensity makes people defend their identity instead of evaluating facts. Calm delivery increases the chance your message is treated as analysis, not attack. ## A sample script you can adapt If you need a concrete structure, use this: > “I see what we’re trying to do, and I agree with the objective. I think the current approach has a high > probability of failing because it assumes A, B, and C. In practice, we’re seeing D and E, and that changes > the risk profile. I recommend we choose between Option 1 and Option 2. If we keep the current path, the > most likely outcome is X, and the mitigation would be Y. What constraint matters most to you: time, cost, > or reliability?” That script does three things: This approach keeps alignment front and center, moves the conversation from ego to assumptions, and converts disagreement into decision-making. ## The deeper lesson: courage is cheaper than you think In the Marines, the cost of truth could be severe if you delivered it poorly. That environment forced discipline. In civilian life, the cost is usually lower than people fear. Yes, you can get fired. But being unwilling to speak honestly has a long-term cost too: By staying silent, you become complicit in predictable failures, you lose respect for leadership and for yourself, and you stop building the reputation that actually creates career security. The irony is that the people who tell the truth well often become more valuable, not less. Because leaders learn quickly who is protecting the mission versus protecting their paycheck. I learned early that truth without discipline is dangerous, and discipline without truth is useless. The skill is not “being blunt.” The skill is being honest, respectfully, and in a way that makes decisions better. When you internalize that the worst-case consequence is usually professional—not personal freedom—you gain a kind of clarity. And in a world where many people won’t risk discomfort to protect reality, disciplined honesty becomes a competitive advantage. ### The Art of Professional Dissent In the corporate sphere, the "brig" is metaphorically the performance improvement plan (PIP) or the "not a culture fit" conversation. Leaders often solicit feedback they have no intention of using, which makes speaking up feel like a trap. The key to surviving this is to treat dissent as a service, not a grievance. #### Navigating the politics The biggest risk isn't that you're wrong; it's that you're right at the wrong time or in front of the wrong audience. If you challenge a VP’s pet project in an all-hands meeting, you aren't being brave; you're being suicidal. The "chaperone" concept from the military—having a trusted senior peer vest your message before you deliver it—is just as valid in a tech company. Find a sponsor who understands the political landscape better than you do and test your "truth" on them first. #### The "Yes, and..." approach to risk When you need to deliver bad news, avoid the "No" button. Instead, use the "Yes, and..." structure. "Yes, we can hit that date, and the trade-off will be dropping the reporting feature." This forces the leader to own the trade-off rather than fighting your refusal. You remain a partner in the solution, even while highlighting the problem. #### Signs you are being heard You know your dissent is effective when leaders start asking for your opinion *before* the decision is made, rather than defending against it after. When a VP pauses a meeting to say, "I want to hear the contrarian view on this," you have successfully transitioned from a blocker to a strategic asset. That is the moment you have escaped the brig and entered the boardroom. ### Plan for Emergencies Without Defaulting to 996 ID: stop-treating-996-as-your-emergency-plan Published: 2025-09-18 Read time: 7 min read Tags: Engineering Culture, Agile Planning, Project Management, Sustainable Pace, Roadmapping, Team Leadership Domain: Full-Stack Development, DevSecOps Role: Engineering Manager, Technical Lead OG Image: /images/blog/stop-treating-996-as-your-emergency-plan.png Excerpt: Define real emergencies, add guardrails, and plan with data so overtime stays rare and sustainable delivery stays intact. Content: ## The seductive logic and its trap Instituting a 9-9-6 schedule for a sprint or hotfix can feel pragmatic: customers are waiting, a milestone is slipping, leadership is anxious. But crisis hours are like antibiotics. Used sparingly and for the right diagnosis, they can help. Overused, they breed resistance and leave the team weaker. Once 996 appears even for a justified emergency, the organization learns a shortcut. It becomes the fallback for every hard planning conversation that should have happened earlier. > Emergencies reveal planning gaps; they are not a plan. ## Crisis practices ossify into culture Short-term heroics, repeated, harden into norms: Be wary of how repetition turns the exceptional into the expected, as new hires model what they observe rather than what is written. Reciprocity pressures also emerge; if one person stays late this week, others feel compelled to do so next week. Soon, planning drift follows, with roadmaps assuming unpaid overtime that masks scope and dependency risk. Ultimately, retention suffers, and the people most able to say no and ship predictably are often the first to leave. ## Planning is hard (and that is the job) Planning is harder than most admit. It means turning uncertainty into staged bets, making tradeoffs visible, and being explicit about risk. It also means saying no. That work often gets skipped because it feels slow or political. The result: emergencies. Effective planning does a few unglamorous things well: Effective planning sequences work to reduce dependency risk early, and it sizes scope into thin slices that can ship independently. It relies on historical throughput rather than optimism, and crucially, it reserves time for unknowns and integration, not just feature coding. ## Why PMs struggle to estimate Many project managers are placed without prior shipping experience or apprenticeship. They learn process from training, not from closing real gnarly gaps. Common failure modes: Limited hands-on shipping reduces intuition for integration and testing time, while little shadowing means the first project is the first time they do the job. Often, weak historical data forces guesswork where optimism fills the void. When incentives reward ambition over delivery, aggressive dates get praise while realistic dates get pushback. ## How first-team bias warps future roadmaps A PM who starts with a rockstar tech lead forms a baseline of delivery that will not generalize. When that lead leaves or the team changes, the mental model stays. Future plans silently assume prior velocity, tool mastery, and system context that no longer exist. Countermeasure: calibrate to the team you have, not the team you remember. Reset expectations whenever the roster, code surface, or integration points change. ## A sustainable alternative to 996 Sustainable pace is a nonfunctional requirement, not a luxury. Treat it the same way you treat security or reliability. The plan should assume normal working hours and still meet its goals. If it cannot, the plan must change, not the hours. Principles to adopt: Adopt principles such as making fewer promises with a higher hit rate, and working in smaller batches with more frequent integration. Establish clear definitions of emergency with explicit limits on response, ensuring compensatory rest and follow-through after any truly exceptional push. ## Make emergencies rare, not routine Define what qualifies, in writing. Examples: True emergencies include production outages with revenue impact, P1 security issues with an exploit in the wild, or regulatory deadlines with legal exposure if missed. Conversely, internal demos, aspirational OKRs, uncontracted sales promises, and scope creep do not qualify. If you would be embarrassed to explain the emergency to a customer or auditor, it is not one. ## Planning mechanics that actually work Anchor forecasts in data and protect scope first, not hours. Capacity basics Use recent throughput, not wishful thinking. Start with a conservative focus factor and adjust with history. # 2-week example # focus time is 70% of 8 hours across 5 days focus_time_per_dev_hours = 5 * 8 * 0.7 team_capacity_hours = devs * focus_time_per_dev_hours * 2 velocity_factor = last_3_sprints_throughput / planned_throughput forecast_capacity = team_capacity_hours * velocity_factor Scope first, hours last Commit to outcomes and slices, not to hero hours. When the plan slips, cut scope, stage features, or move the date. Do not pad with overtime. Buffers and risk Budget explicit integration time and a risk buffer. Protect it. If you never use it, pull work forward. If you always use it, increase it or reduce scope. Dependency mapping List upstream and downstream constraints. Bring owners into planning. Time spent here prevents late surprises. Thin slices Prefer feature flags and incremental release. Ship value in steps so feedback comes early and fixes are small. Definition of done Done includes tests, monitoring, docs, and runbooks. Work is not done if it cannot be supported calmly. ## Role design: experienced dev as PM? Promoting an experienced developer into a planning role can work well, but it is expensive and fragile if the role collapses into status collection. If you do it, set guardrails: Ensure the PM leads trade-offs and sequencing rather than just meeting logistics. Assign coordination to a project ops partner so the PM can focus on decisions, and protect focus time to avoid turning the PM into an always-on router. Finally, write a RACI that clarifies who decides what. Typically, the Tech Lead is Responsible for implementation, while Product/PM is Accountable for scope and priority. QA, Security, and Design are Consulted, with Execs and Sales Informed. ## A practical operating model Weekly cadence On Mondays, limit WIP and reorder the backlog to reflect real constraints and the newest info. Midweek, conduct a risk review to tackle the scariest dependency or integration first. By Friday, hold a demo and retro, updating forecasts with facts, not feelings. Quarterly cadence Set two to four outcome goals, tying each to a measurable customer or reliability metric. Stage large bets into monthly increments with integration points. Daily discipline Swarm on blockers and do not start new work while old work is stuck. Keep PRs small, integrate often, and deploy behind flags. ## Metrics to guard the culture Pick a small set and review weekly. Track plan accuracy by comparing delivered scope to committed scope each month. Monitor the after-hours rate, setting an SLO (e.g., under 5%) for weeks with any after-hours work. Watch emergency frequency per quarter to ensuring the trend declines. Use lead time and throughput to forecast instead of story points alone, and keep aging WIP low by limiting work in progress. plan_accuracy = delivered_scope / committed_scope after_hours_rate = weeks_with_overtime / total_weeks Using 996 for crises is a cultural decision disguised as a scheduling tweak. It trades short-term movement for long-term fragility. Treat sustainable pace as a requirement, define emergencies tightly, plan with data, and design roles so experienced leaders make trade-offs rather than take notes. Do that consistently and you will ship more, lose less sleep, and keep your best people longer. ### Operationalizing Sustainable Pace Moving away from a 996 culture requires more than just a policy change; it requires an operational shift. You cannot simply tell people "go home at 5 PM" if the roadmap still assumes they are working until 9 PM. That gap between policy and reality breeds cynicism faster than almost anything else. #### The "Red Alert" Protocol To break the cycle, you need a formal mechanism for declaring an emergency. Create a specific "Red Alert" status that leadership must explicitly trigger. When active, overtime is authorized, food is paid for, and—crucially—compensatory time off is accrued at a premium rate. Having to sign a physical or digital form to trigger this friction makes managers think twice about whether a feature delay is truly a crisis. #### Watch the "Quiet Hours" The most dangerous form of 996 is the one that doesn't look like it. It's the Slack message sent at 8 PM that doesn't *demand* a reply but *implies* one. Leaders must model the disconnection. If you work late, schedule your messages to send at 9 AM the next day. If the boss is online, the team feels they must be too. #### Signs of Recovery You see the culture healing when a team member feels safe enough to say, "I can't get that done by Friday unless we cut scope," and the manager replies, "Okay, let's look at the scope." When the answer to a deadline pressure is a conversation about trade-offs rather than a silent commitment to overtime, you have effectively operationalized sustainable pace. ### Compete Anyway When Giants Loom ID: compete-anyway-when-giants-loom Published: 2025-11-13 Read time: 7 min read Tags: LLMOps, AI Startups, Strategy, Competition, Product Execution, Go-to-Market Domain: LLMOps, AI/ML, Code Generation Role: Founder, Technical Lead OG Image: /images/blog/compete-anyway-when-giants-loom.png Excerpt: Incumbents don’t mean a market is captured; they prove demand—so build the wedge, own the workflow, and compete anyway. Content: Three years ago, an investor passed on ElevenLabs at a $100M valuation. Today, that decision reads like a case study in how founders and funds can talk themselves out of the obvious: when a market is big enough that the giants “could do it too,” that’s not a reason to run. That’s the signal flare that the opportunity is real. We keep treating big players like a “market captured” sign. Most of the time, it’s the opposite. If OpenAI, Gemini, Anthropic, Grok, or any other heavyweight might build what you’re building, that doesn’t mean you’re dead on arrival. It means demand is loud enough that everyone can hear it. The question isn’t “will they build it?” The question is “will they build it the way customers actually want, with the focus and speed you can bring?” I once met with an old friend, a startup CEO, who told me it’s basically impossible to compete with the Big 4 in AI. His take was simple: they’ll throw so much money at the problem that everyone else gets crushed, and if you start on their APIs they’ll eventually fold your feature into the platform anyway. I understood what he meant. And then he said the quieter part out loud: building anything technically hard is hard, and maybe I wasn’t smart enough to compete in a market like that even with capital. That one landed. Because it exposed something I think we all bump into, especially when we ask for advice: sometimes people answer from a place of safety. Not malice. Just self-protection. A way of saying, “I can’t see a path, so there must not be one.” But founders don’t win by collecting “why nots.” They win by finding “why yes,” then choosing combat. ElevenLabs chose combat. They didn’t win by pretending big competition didn’t exist. They won by out-executing, out-focusing, and building a product that people actually loved. The giants being able to do it didn’t invalidate the opportunity. It validated it. So here’s my call to arms: stop letting fear of theoretical future competition decide what you build. Compete anyway. And if you’re building something that could threaten the big investment-backed incumbents, good. That doesn’t mean the market is locked up. It means the market is still hungry. One more thing I’m convinced of: if the people warning you “don’t do it” believed they had an edge for even a second, they’d do the exact thing they’re advising you not to do. Immediately. ### Navigating the Land of Giants When you decide to compete with an incumbent, the hardest battle isn't usually the technical one—it's the psychological one. You will face a chorus of "no" from investors who want safety and friends who want you to be realistic. The reality is that "safe" bets in startups are usually the most dangerous because they are crowded with people who are also playing it safe. #### Define your "Anti-Feature" Big companies are defined by what they must do: serve everyone, maintain legacy compatibility, and move slowly to avoid breaking things. Your advantage lies in what you *refuse* to do. If the giant has to support enterprise legacy protocols, you win by being purely modern. If they have to be general-purpose, you win by being ruthlessly specific. Define the feature or customer segment you will actively ignore. That constraint is your speed. #### The trap of "Feature Parity" Do not try to catch up. If you chase feature parity with a product that has been in development for ten years, you have already lost. Instead, find the "wedge"—the single workflow that users hate in the incumbent product—and make it magical. ElevenLabs didn't try to build a full voice assistant; they just made the voice sound human. That single wedge cracked the market open. #### Signs of traction You know you are winning when customers start switching *despite* the feature gaps. When a user tells you, "I know you don't have SSO yet, but your core workflow saves me two hours a day, so we'll deal with it," you have found blood. That is the signal to double down, not to panic about what you're missing. ### A Phase Transition in Human Leverage ID: phase-transition-in-human-leverage Published: 2025-09-15 Read time: 7 min read Tags: AI, Systems Thinking, Leverage, Leadership, Career Development Domain: Full-Stack Development, LLMOps Role: Technical Lead, Engineering Manager OG Image: /images/blog/phase-transition-in-human-leverage.png Excerpt: The center of professional value has shifted from direct authorship to orchestrating intelligent systems and leverage. Content: A discontinuity is unfolding in how professional leverage is produced. The unease many experienced technologists feel today is not about missing a framework release. It is about a deeper shift in where agency lives and how value is created. For decades, progress in technical fields followed a familiar pattern: leverage came from writing better instructions faster than others. Skill meant mastering abstractions, internalizing systems, and shaping deterministic behavior through direct authorship. Output scaled roughly linearly with effort and experience. That model no longer holds. ## From Authorship to Conditioning In the previous regime, professionals authored behavior. They could trace outcomes from intent to implementation to execution. Control was assumed. Systems were legible. When something failed, it could be inspected, debugged, and corrected with confidence. That assumption is breaking. Modern intelligent systems do not behave deterministically. They respond probabilistically. Their internal reasoning is not fully inspectable, reproducible, or stable. You no longer define behavior directly—you condition it. Outcomes are shaped indirectly through: - Goals and intent - Constraints and boundaries - Context and memory - Feedback and correction loops - Tool access and permissions Mastery now means learning how to steer systems that never become fully knowable. Control is replaced by influence. Precision is replaced by calibration. This loss of control is not a temporary inconvenience—it is structural. ## Effort No Longer Maps Cleanly to Output Another destabilizing reality is that effort has decoupled from results. In the old model, sustained effort reliably produced progress. Today, two equally capable individuals can diverge dramatically in impact. One may achieve an order-of-magnitude increase in output by composing systems effectively. The other may work harder than ever and still fall behind. The difference is not intelligence or discipline. It is leverage. Leverage now comes from how well someone can compose systems, specify intent, evaluate outcomes, and correct failures without overfitting. Working harder at the wrong layer only produces diminishing returns. ## The Inversion of the Abstraction Stack Historically, high-level reasoning collapsed downward into implementation. Abstract ideas were translated into concrete instructions. That flow has inverted. Low-level implementation is increasingly generated upward from intent. The human role shifts away from construction and toward supervision. The work moves from building artifacts to designing processes that produce, evaluate, and refine artifacts. This inversion challenges deeply held professional instincts: - Craftsmanship matters less than judgment - Implementation detail matters less than evaluation quality - Speed of execution matters less than clarity of intent Those who cling exclusively to the old model will feel increasingly misaligned with reality. ## A Fracturing, Not a Flattening Despite optimistic narratives, this transition is not evenly redistributing opportunity. A small group will learn to wield these systems fluently and compound leverage rapidly. Others—despite being capable, experienced, and hardworking—will see their relative value erode because the basis of differentiation has shifted faster than professional identity. The transition is not gradual. It is discontinuous. ## No Stable Equilibrium Yet Part of what makes this moment psychologically exhausting is the absence of stability. Tools evolve weekly. Mental models decay quickly. Best practices expire before they are widely adopted. There is no settled playbook because the systems themselves are changing as they are being used. You are not learning a static toolset. You are co-adapting with systems that are also adapting to you. This produces persistent uncertainty—even for experts. ## Beyond a Single Profession The shift is not confined to programming. Any domain where intent can be specified and outcomes can be evaluated is vulnerable to automation through intelligent systems. The emerging hierarchy will not reward who knows the most, who works the hardest, or who executes the fastest. It will reward those who can frame the right problems, decompose intent cleanly, detect failure modes early, build durable feedback loops, and decide when to trust automation versus override it. This is a different kind of competence—closer to command than craftsmanship. ## The Core Reality The discomfort many feel is not a personal failing. It is the signal of a profession whose center of gravity has moved. Those who navigate this transition successfully will stop defining themselves by what they personally produce. They will define themselves by what they can direct, evaluate, and amplify through systems of intelligence. Those who do not will continue refining skills the world is quietly de-emphasizing. That is the hard truth beneath the moment we are in. ### There Is Nothing More Permanent Than a Temporary Solution ID: permanence-of-temporary-solutions Published: 2025-09-10 Read time: 7 min read Tags: Technical Debt, Engineering Practices, Software Architecture, Leadership, Code Quality Domain: Full-Stack Development, DevSecOps Role: Technical Lead OG Image: /images/blog/permanence-of-temporary-solutions.png Excerpt: Quick fixes often become lasting constraints and you have to manage them before they harden into technical debt. Content: Every engineer has watched a scrappy patch graduate into a mission-critical dependency. The quick shim that was supposed to buy a sprint becomes sacred. New work tiptoes around it. Documentation morphs to explain it. Before you know it, the hack is the architecture, and nobody remembers the moment it shifted from disposable to default. ### The Moment a Patch Gains Power Temporary fixes usually happen under real pressure, mitigating an outage, unblocking a release, or protecting a customer commitment. In those moments, pragmatism is a superpower. The danger arrives later, when the team treats a temporary scaffold like a load-bearing wall. Once it works, people assume it will always work. Monitoring rarely improves. Ownership gets fuzzy. Dependencies accumulate until the exit costs feel unbearable. I have seen a shell script meant to run for a weekend orchestrate production releases for years. The smart choice was the patch. The failure was never assigning the work to replace it. ### Why Temporary Hardens into Permanent There are three forces that quietly cement short-term fixes: 1. **Legitimacy through reliability.** If the workaround survives a few incidents, teammates and stakeholders start trusting it. Trust breeds more usage, which entrenches the workaround further. 2. **Expensive context switching.** Replacing a stopgap requires rediscovering problem context, aligning across teams, and actually scheduling time. Competing priorities always feel more urgent. 3. **Invisible cost accounting.** Teams rarely log temporary debt as a liability. Without tracking, the payback work never made it onto the roadmap, so it is never prioritized. Over time the workaround stops feeling risky precisely because everyone has learned to operate inside its constraints. That familiarity masks the fragility underneath. ### Guardrails That Keep Temporary from Fossilizing Short-term choices will always exist, but you can keep them from metastasizing with a few habits: - **Mark it loudly.** Add comments, feature flags, runbook notes, or even logging that makes its temporary nature obvious. I want future you to trip over the warnings. - **Document intent and expiry conditions.** Capture why the decision was made, what constraints it carried, and what signals should trigger replacement. If you cannot name the retirement criteria, you are already planning to keep it forever. - **Schedule its removal like real work.** Put a story on the roadmap with an explicit owner and target date. Attach the paydown to the same planning cadence that funded the original shortcut. If leadership accepted the risk to ship fast, they should also accept the cost to close it out. - **Instrument and review it.** Treat the workaround as a monitored experiment. Dashboards, alerts, and post-incident reviews keep its risks visible so they do not blend into the background noise. ### Lead the Cleanup, Not Just the Crisis Temporary fixes reveal character. The best engineers and leaders do not just show up for the emergency, they show up for the cleanup. They treat the follow-through as part of the same work, not a nice-to-have. The lesson is not to avoid temporary solutions. It is to stay disciplined after shipping them. Call them what they are, track them like debt, and retire them on purpose. Otherwise your systems will be defined by whatever you duct-taped together last year. And the longer you wait, the more permanent that “temporary” decision becomes. Kill your temporary solutions before they harden, or they will define the next generation of work without asking permission. ### Honest Capacity Beats Hidden Overtime ID: honest-capacity-vs-hidden-overtime Published: 2025-07-20 Read time: 7 min read Tags: Engineering Culture, Sustainable Delivery, Trust, Work-Life Balance, Team Management Domain: Full-Stack Development, DevSecOps Role: Engineering Manager, Technical Lead OG Image: /images/blog/honest-capacity-vs-hidden-overtime.png Excerpt: True credibility comes from realistic estimates and sustainable delivery, not late-night heroics. Content: ## The Myth of Heroic Effort We’ve all seen the stories of late-night heroes who pulled off the impossible. The ones who stayed up until 2 AM polishing slides, squashing bugs, or pushing a final commit just in time. It looks impressive from the outside. But if we’re honest, it creates a dangerous illusion. Heroics can make it seem like competence. But more often, it’s just hidden overtime. The work gets done, but at the expense of health, honesty, and long-term trust. ## Why I Tell My Engineers Not to Work Nights I often remind my team: don’t work evenings or weekends. It’s not because I don’t value hard work. It’s because I value honesty more. If I promise delivery on Monday but only hit it by secretly planning to grind through Saturday and Sunday, then I’m lying, to myself, to my team, and to stakeholders. That’s not true ability. That’s just burning personal time as a buffer. ## Trust Built on Real Capacity True trust is earned by knowing your actual capacity and working within it. When estimates are based on reality, not hidden overtime, others can plan and roadmap with confidence. Reliability comes not from occasional bursts of heroics, but from consistent, sustainable delivery. A team that delivers what it promises without depending on all-nighters is a team you can actually build around. ## The Trap of Overpromising Overpromising and scrambling to cover it up may look like commitment in the short term, but it creates long-term instability. It erodes credibility. People start planning based on what they think you’ll "pull off" rather than what they can truly count on. That’s not a foundation for trust—it’s a gamble. ## Consistency Over Heroics The real goal isn’t to magically pull it off at 2 AM. The real goal is credibility. And credibility comes from: - Giving estimates that reflect real capacity. - Delivering consistently without hidden sacrifices. - Building a culture where sustainability is valued as much as effort. When delivery is honest and predictable, planning becomes accurate, stress decreases, and trust compounds over time. Late-night heroics might earn applause once or twice. But lasting respect is built on sustainable delivery. The leaders and teams who thrive aren’t the ones who burn themselves out in secret. They’re the ones who are honest about what they can do, and then do it, reliably, week after week. That’s how you build credibility. Not with magic at 2 AM, but with trust at 2 PM, every day. ### Three decades of Execution Over Dogma ID: execution-over-dogma-three-decades-in-code Published: 2025-07-07 Read time: 7 min read Tags: Software Engineering, Developer Productivity, Career Advice, LLMs, Self-Taught, Formal Education Stack: GitLab CI, Jenkins Domain: Full-Stack Development Role: Technical Lead OG Image: /images/blog/execution-over-dogma-three-decades-in-code.png Excerpt: Thirty years of shipping software prove that the only metric that matters is whether you can deliver. Content: ## Opinions Come and Go I entered tech in the dial-up era and have watched countless "one true way" crusades rise and fade. IDEs versus plain editors, Vim against Emacs, Linux versus macOS, the battleground shifts, but the fervor stays the same. Most of it is noise generated by insecurity or the assumption that what worked for me must work for everyone. "No one went back to encyclopedias after Google arrived." was a lesson for me in irreversible progress. I had a Self-Taught Start, Then Formal Studies. For my first decade I learned to code on my own, writing Perl on *nix while a kid and took a break to go blow stuff up in Iraq as a Marine. Mid-career I earned a CS degree at night. The credential opened some doors, but the bigger gain was a structured mental model of concepts I already hacked together. Each path had value; neither guarantees mastery. I survived the Tool Wars, moved from Perl to Ruby and then I built back-end systems in Node.js in 2013-2014 and caught flak from "serious" Java shops. Today TypeScript runs everywhere from cloud functions to spacecraft. I spent ten years a proud Linux die-hard, then swapped to macOS for iOS development only to watch the industry swing back toward Linux containers on Apple Silicon. The lesson: tools are transient; your ability to adapt is permanent. ## The Only Metric That Matters Projects live or die on execution. Can you take an idea, turn it into running code, and ship it to users? Whether you do that with GPT-4o, a vintage Emacs config, or hand-optimized assembly is secondary. Deliver value consistently and the argument about how dissolves. LLMs Are the New Normal and to some though it may feel like cheating, much like Stack Overflow once did. I've shipped production services with model assistance since before tools like Cursor existed. Juniors who pair curiosity with LLMs will learn faster than any previous generation. Treat them as accelerators, not crutches. ## So what are the Practical Takeaways - Measure output, not method. Shipping beats stylistic purity. - Stay tool-agnostic. Master fundamentals so you can swap parts guilt-free. - Invest in learning loops. Degrees, bootcamps, self-study—pick what closes your gaps fastest. - Use automation aggressively. From CI pipelines to AI coding aids, free your brain for higher-level design. The industry will keep debating what makes a "real" engineer. Ignore the clamor and focus on results. Thirty years in, my scorecard is simple: Did we ship? If the answer is yes, you're winning. ### From Vibe Coding to Testing for Juniors ID: from-vibe-coding-to-verified-juniors-start-with-tests Published: 2025-07-08 Read time: 7 min read Tags: Vibe Coding, LLMs, Test-Driven Development, Software Testing, Junior Developers Stack: TypeScript, React, Jenkins Domain: Full-Stack Development, Code Generation, LLMOps Role: Technical Lead OG Image: /images/blog/from-vibe-coding-to-verified-juniors-start-with-tests.png Excerpt: Senior engineers anchor every LLM‑assisted change with tests, you can too, by writing them first. Content: ## Vibe coding, the rocket fuel with no seat belt LLMs can draft functions, refactor files, and solve edge‑case bugs in seconds. The temptation is to keep hitting "regenerate" until the code looks right and ship it. That improvisational style, often called vibe coding, works only when you can feel something is off. Seniors can have that feeling sooner because they have broken production code enough times to sense the danger. ### How seniors keep chaos contained Experienced engineers rarely lean on intuition alone. They keep a tight feedback loop: 1. Write or update a test capturing the next behavior they want. 2. Run the suite to watch one failure turn green. 3. Commit before moving on. The loop is so quick it feels invisible, but it is always there, guarding against unintentional regressions. ### Why juniors feel the trap harder Without that guardrail, juniors fix one bug and secretly re‑introduce three. The damage surfaces days later during code review or worse after deployment. Because each LLM suggestion rewrites more code than you can review line by line, the blast radius is larger than with manual edits. Tests turn vibes into evidence, A failing test forces you to spell out the exact behavior you expect. When it turns green you have evidence not a vibe that the feature works. Future changes rerun the same evidence automatically, so yesterday’s confidence does not evaporate tomorrow. ## Testing is the engineering version of seat belts. You hope you never need them, but you click them every time. ### Habits you can adopt today #### 1. Write a failing test first Pick the smallest slice of behavior: an input and the output you want. When this fails you have a clear target. #### 2. Keep the loop under two minutes Run the whole suite if it is quick; otherwise run the focused test with a watcher. The shorter the loop, the less likely you are to wander. #### 3. Automate regression checks Add a CI workflow so every pull request executes the suite. Broken tests then block merges instead of breaking prod. #### 4. Let the LLM help write tests, too Prompt the model with "write tests for the new slugify function". Review what it generates, tweak, and commit. The machine can draft the boilerplate; you supply the intent. #### 5. Treat working code as fragile Before you refactor with an LLM, lock in current behavior with snapshot tests or golden file outputs. Now you can accept or reject model suggestions with confidence. ### Common pitfalls and how to dodge them | Pitfall | Prevention | |---|---| | "I’ll add tests later" | Set up a tests/ folder and CI on day one. | | Long‑running suites | Mark slow integration tests separately and run them nightly. | | Flaky AI‑generated tests | Read every assertion; delete ones you don’t understand. | Finally slow down to speed up, LLMs are jet engines for productivity, but even jets need checklists. Tests are your pre‑flight inspection. The sooner you anchor your vibe coding with evidence, the faster you will move, because you will move forward instead of in circles. ### Survivor Bias and the Myth of Shipping Without Tests ID: survivor-bias-and-the-myth-of-shipping-without-tests Published: 2025-07-09 Read time: 7 min read Tags: Survivor Bias, Best Practices, CI/CD, Testing, Software Discipline Domain: Full-Stack Development, DevSecOps Role: Technical Lead OG Image: /images/blog/survivor-bias-and-the-myth-of-shipping-without-tests.png Excerpt: Skipping tests and CI may work for unicorns, but for most teams disciplined guardrails beat chaotic heroics every time. Content: ## Why This Story Keeps Resurfacing In conference talks, tweets, and podcasts, someone inevitably tells the tale: they hacked a product together, pushed directly to production six times a day, and boom millions of users. The punch-line is clear: "See? You don’t really need tests, CI/CD, or staging." Those anecdotes feel good because they promise shortcuts. But they also leave out the denominator: the thousands of equally scrappy teams whose untested hotfixes quietly wiped customer data and whose unrecoverable outages never made TechCrunch. The Numbers We Never See: Survivor bias is the logical fallacy of focusing on the winners that are still visible while ignoring the losers that disappeared. During World War II the Allies nearly reinforced the wrong parts of returning aircraft because they only counted bullet holes on the planes that made it home. Start-up folklore makes the same mistake by counting the Airbnbs and Instagrams that survived chaotic engineering without counting the wreckage hidden in GitHub graveyards. ## Best Practices Are Not Dogma, They Are Risk Controls Automated tests, CI pipelines, and staging environments do not guarantee success, but they sharply reduce two classes of risk: 1. Regression risk: The chance that today’s change breaks yesterday’s promise. 2. Reputational risk: The cost of eroding user trust through outages or data loss. Skipping those guardrails is a bet that heroics and intuition will save the day every time. Plausible on a two-person prototype, expensive after you have paying customers. ## Discipline Beats Heroics You absolutely can fix a bug without writing a test. The hidden cost shows up six months later when the same bug slips back in and nobody remembers the edge case. Disciplined teams pay the smaller cost up-front, writing the test once, so that future changes become cheaper, safer, and faster. Discipline is not bureaucracy. A lean but reliable pipeline can be implemented in an afternoon. The point is not maximal process; the point is consistent process. ## Pragmatic Checkpoints - Write one failing test for every production bug you fix. - Automate the happy path first; expand coverage when regressions reappear. - Deploy through a pipeline, even if it only runs npm test and docker push. - Gate production on a health check that fails fast. - Review code with a checklist no longer than an index card. These habits cost hours, not weeks, and compound like interest. Best practices are not magical paperwork, nor are they optional flair. They are guardrails against the silent majority of failures we never hear about. Success stories that skipped them are outliers, useful inspiration, but terrible statistics. Choose discipline over chaos, and future, you (and your users) will thank you. ### Insurance against the Unknown Think of your testing suite not as a "quality gate" but as an insurance policy. You pay premiums (engineering time) in the hopes that you never have to make a claim (revert a production outage). But when that claim comes—when a junior dev accidentally drops a table or a third-party API changes its schema—you will be incredibly grateful for the payout. #### The "Friday Deploy" Test The ultimate litmus test for your testing culture is simple: Are you afraid to deploy on Friday at 4 PM? If the answer is "yes," your tests aren't good enough. A team with high survivor bias thinks "we're smart, we'll be careful." A team with high maturity thinks "we're human, the system will catch us." #### Automating the mundane Survivor bias thrives in manual processes because it relies on the "heroic memory" of key individuals. "Oh, Bob knows how to restart the kafka consumer." Automated tests and pipelines democratize that knowledge. They turn "Bob's wisdom" into "git's wisdom." #### Signs of Resilience You know you have moved past survivor bias when an outage happens and the team reaction isn't "who broke it?" but "why didn't the test suite catch it?" When the post-mortem focuses on improving the safety net rather than blaming the acrobat, you have built a culture that can survive the long haul. ### Automating Dependabot PR Merges with CI/CD ID: automating-dependabot-pr-merges-with-cicd Published: 2022-10-15 Read time: 7 min read Tags: automation, github, dependabot Stack: TypeScript, GitHub Actions Domain: DevOps, Automation Role: Technical Lead OG Image: /images/blog/automating-dependabot-pr-merges-with-cicd.png Excerpt: Automatically merge Dependabot pull requests after your CI workflow succeeds. Content: In the ever-evolving world of software engineering, automating repetitive and mundane tasks can help us focus on more important things. One such task that can be automated is merging Dependabot pull requests (PRs) once your Continuous Integration/Continuous Deployment (CI/CD) process has run successfully. However, to get there, you need to have a strong foundation of proper CI/CD processes. That means having linting, building, and testing functions set up to ensure that your code is always functioning as expected. For those who have already put in the work to set up proper CI/CD processes, automating Dependabot PR merges can save time and increase efficiency. By setting up this automation, you can avoid the tedious and time-consuming task of manually merging these PRs while ensuring that the new dependencies added won't cause any issues with your codebase. The example below is primarily for npm but can be applied to yarn, or I even use it in differing languages such as ruby and others. The first thing you'll need to ensure is that you have the proper `dependabot.yml` file configuration in place to include what package ecosystems you want to maintain. ```yaml version: 2 updates: - package-ecosystem: 'npm' directory: '/' open-pull-requests-limit: 25 schedule: interval: 'daily' - package-ecosystem: 'github-actions' directory: '/' open-pull-requests-limit: 25 schedule: interval: 'daily' ``` Once you have outlined what package ecosystem you want to turn Dependabot on for, you'll then need to create a `.github/workflows/ci.yml` file or include this to whatever Github Actions task you use for pull request PR's to start the automation. Ensure to include the necessary permissions options to grant it rights to pull-requests and contents related rights access. Then you'll want to create a job that tests your build, linting and or even testing when possible to ensure the dependabot fails when it generates the PR. ```yaml name: Continous Integration on: pull_request: permissions: pull-requests: write contents: write jobs: build: name: 'Build 📦' runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Cache uses: actions/cache@v3 with: path: | **/public **/.cache key: cache - name: Use Node.js uses: actions/setup-node@v3 with: node-version: 16.x cache: 'npm' - run: npm ci - run: npm run lint - run: npm run build --if-present - run: npm run test dependabot: name: 'Dependabot' needs: [build] runs-on: ubuntu-latest if: ${{ github.actor == 'dependabot[bot]' && github.event_name == 'pull_request'}} steps: - name: Dependabot metadata id: metadata uses: dependabot/fetch-metadata@v1.3.6 with: github-token: '${{ secrets.GITHUB_TOKEN }}' - name: Enable auto-merge for Dependabot PRs run: gh pr merge --auto --merge "$PR_URL" env: PR_URL: ${{github.event.pull_request.html_url}} GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} ``` Finally what makes all of this work is having a dependabot Github Actions job that is dependent on your build job and checks to make sure your github.actor is the dependabot bot itself before finally deciding to merge the PR automagically. The dependency on build in the above example ensures that the merge check only occurs after your build and tests pass prior to auto merging dependencies. For a cleaner version of what the above yaml files should look like, I'm including a link to a **[public gist](https://gist.github.com/bastosmichael/fdd6bb1d177098cb1ecc7b70cf9cccfa)** that shows the proper if statement and environment variables in Github Actions. As engineers, we must remember that our job is to eventually make our jobs obsolete. Automating tasks like this allows us to focus on more complex tasks and continuously improve our codebase. The goal is to streamline our development process to the point where we can focus on more innovative tasks that drive our projects forward. In conclusion, automating the merging of Dependabot PRs can be a useful tool for those with the proper CI/CD processes in place. But we must also remember to continue to push ourselves to improve and automate other aspects of our development process, ultimately freeing ourselves to focus on the more challenging and rewarding aspects of software engineering. ### Non-Technical Executives Try To Replace Software Engineers ID: why-non-technical-executives-try-to-replace-engineers Published: 2024-09-12 Read time: 7 min read Tags: Engineering Leadership, AI, Executive Mindset, Hiring, Software Industry Stack: Python, AWS, Jenkins Domain: Full-Stack Development, AI/ML Role: Technical Lead OG Image: /images/blog/why-non-technical-executives-try-to-replace-engineers.png Excerpt: Many corporate leaders try to swap out software engineers for AI or cheap labor not just to cut costs but to avoid roles they don’t understand. Content: ## The flawed assumption Software professionals often assume every company wants more technical leadership. Reality is murkier. Executives double down on roles they know, finance hires more analysts, sales chiefs expand head count, while engineering feels foreign, making it a cost center ripe for “optimization.” Executives hire what they know. Hiring mirrors comfort zones. A CFO can gauge an analyst’s spreadsheet, a CRO can shadow a sales call, but reviewing a pull request or tuning microservice latency is outside many leaders’ skill sets. When they can’t directly assess value, they either delegate blindly, or minimize the unknown by cutting it altogether. Discomfort breeds replacement, not investment. Engineers command high salaries, question assumptions, and surface tech risk that can derail timelines. For decision makers who built careers outside R&D, that feels threatening. Replacing engineers with cheaper offshore labor or, increasingly, with AI assistants, promises fewer objections and cleaner spreadsheets. ## Leaders build what they understand and replace what they don’t. AI as a seductive shortcut, LLM copilots appear to write code faster than juniors, cost a fixed subscription, and never renegotiate salaries. For non-technical execs, that checks every box: lower payroll, fewer head count approvals, and the comforting illusion that complexity is handled by a vendor. The narrative shifts from “engineering is expensive” to “engineering is automated.” The data point that breaks the narrative, AI first firms like GitHub and OpenAI grow their engineering teams because they understand software creation. Tools augment, not replace, expertise. They hire more builders because pairing talent with automation multiplies output. ## Lessons for technical leaders 1. Expose executives to the build process. Short demos of pipelines or incident drills demystify engineering. 2. Use AI to elevate, not eliminate, talent. Show how copilots remove boilerplate so seniors solve higher order problems. 3. Advocate balanced hiring. Grow engineering alongside roles leaders know, finance, product, marketing, to show symmetry, not competition. ## Takeaways for developers - Upskill continuously; the easiest roles to automate are the least specialized. - Help non-technical peers grasp why small technical choices create large financial impacts. Code is still written by humans; the best tools merely push the mundane aside. Companies that grasp this invest in more, not fewer, engineers. Those that don’t will chase shortcuts and stall innovation. Developers who translate craft into business impact will thrive, no matter the trend. ### Technical Debt vs Technical Assets: What's the Difference? ID: technical-debt-vs-assets Published: 2022-05-25 Read time: 7 min read Tags: Technical Debt, Technical Assets, Software Practices Stack: Go, TypeScript, Python Domain: Full-Stack Development, DevSecOps Role: Technical Lead, Architect OG Image: /images/blog/technical-debt-vs-assets.png Excerpt: Understanding how paying down debt and investing in assets shapes long-term software health. Content: ## What is Technical Debt? Some people see technical debt as a list of missing features, but it should be a list of the problems that you know you have to vs want to solve. The list can vary but should include known bugs and errors in your code. It should also include how readable your code is and any bloat you might carry. Slowness in build and execution time needs consideration as well. The point of figuring out your technical debt ahead of time is that you need to be honest with yourself. The more problems we have to solve, the less we get to work on problems we want to solve. So we treat technical debt the same as financial debt, by paying it down while avoiding more. The rule of thumb should always be to pay off your debts first, then start accumulating assets because you don't want to try to pay for assets when you have debts holding you down. ## Why do we get into Technical Debt? What is Debt? We tend to think of financial debt more than other kinds of debts, like social or technical. Debt is a tool that's used to leverage your ability to do more in less time, it's not a bad thing unless it's abused. It can have destructive consequences if ignored as it compounds on itself over time. Too much leverage can be a bad thing. All debt must get paid off by someone in time, when you accumulate technical debt, it may be the developer that comes after you who must pay it off. This perverse incentive is why debt can be dangerous in any setting. As the old Levantine Proverb says "The Debtor is slave to the Lender" which means you will lose power over your code. The mantra "Move fast and break things" is a popular saying in our industry because it helps us move forward. It's more akin to "Put it on the credit card" if you think of it in technical terms because what you're saying is fix it later. In the meantime, every break has a cost that needs payment and so the more you break it the more you pay for it so to speak. "Procrastination is the souls attempt to rebel against entrapment" - Nassim Taleb Wanting to have something done now vs waiting until later is a big reason people get into debt. They ignore what they know they need to do in place of what they want, or they procrastinate to feel good. They don't want to feel trapped by their responsibilities. Humans also have a tendency to overestimate their own abilities, we are not good at estimating risk. The reason we underestimate risks is that otherwise, indecision would paralyze us. So putting off problems we know we need to solve for later makes us assume that we can solve those problems later. Worse, it makes us assume we can solve those problems in a much more limited timeframe than if we had done it sooner. So as developers we are always adding technical debt to make it easier on ourselves now. We don't realize we are punishing either our future selves or those that come into the project after us. ## What is a Technical Asset? A Technical Asset does not mean future-proofing or building a feature early, but rather an early problem solved. It's an investment into a known problem that from experience you know that you, or those that come after you, will have. The only way to know if it's not future-proofing is through experience, if you've had the problem then it's an asset. In the same way experience will tell you whether a financial asset will make you money. It's a bet. Not every investment into an asset will pay off in the way you want it to, or for your own personal benefit. The point is not to stop investing in assets, but rather to teach people how to spot good from bad investments. The accumulation of financial assets gives you freedom in life. In much the same way technical assets give you the freedom to code without the fear of regression. You get to choose what problems you want to solve when you invest in technical assets upfront. "A society grows great when old men plant trees in whose shade they shall never sit" - Greek Proverb You're building technical assets for others more than for yourself and this is why it's hard to do. In software development, we like to get to the root of the answer quickly and so we make life easier for ourselves now. We tend to not think about our future selves or others who will take over the project after us. Yet many of the greatest stories in technology development come from the opposite. Amazon AWS was an asset that came at the very end of an expensive mono codebase debt payoff. Facebook made investments in React and Open Compute to fix scalability. Google Instant reinvented caching as an investment into what seemed impossible. They had to first pay off their technical debt before they could build assets. These were not core products or features, but they prioritized a known problem ahead of time. ## How to find other Technical Assets to Invest in? Much like picking any investment asset, you have to plan and discuss it like investors. Present a prospectus about what the investment would look like and the tradeoffs. In the software world, we would write a Request for Comment or RFC to break down the idea in a way that can be peer reviewed. You want to instill a process that creates forcing functions that limit the scope of work. Don't let your investment go off the rails without first enforcing tests and coverage. The earlier you are at enforcing linting for code readability the more proactive you will be. Building out automated CI/CD and managed deploys ensure less pain for your company long term. Avoid survivor bias in determining a good investment by remembering the Lindy Effect: "If a book has been in print for forty years, I can expect it to be in print another forty years. But, and that is the main difference, if it survives another decade, then it will be expected to be in print another fifty years. This, simply, as a rule, tells you why things that have been around for a long time are not 'aging' like persons, but 'aging' in reverse. Every year that passes without extinction doubles the additional life expectancy. This is an indicator of some robustness. The robustness of an item is proportional to its life!" Just like any bad real world investment might force companies and organizations out of the market entirely, a bad technical investment might do the same for tech companies. So although it may be counter intuitive in the software industry to choose stuff that's been around for a while, the best approach might be to invest in implementations that have proven themselves sturdy over time. In conclusion, you have to pick the processes that have been proven effective over time and across companies. Adopting those successful processes as technical assets allows you to accrue them for yourselves but not at the expense of paying off your technical debts beforehand. Paying your debts off early will give you the freedoms you need to work on code you want to work on instead of stuff you know you have to. This discipline helps you avoid the "put it on the credit card" mindset earlier in your process. ### Tech Debt vs Tech Asset Metaphor Still Holds ID: why-the-debt-vs-asset-metaphor-holds Published: 2025-05-26 Read time: 7 min read Tags: Technical Debt, Technical Assets, Stakeholders, Software Management Domain: Full-Stack Development Role: Technical Lead OG Image: /images/blog/why-the-debt-vs-asset-metaphor-holds.png Excerpt: Responding to the objections, I describe stakeholders as creditors and why repaying technical debt fuels innovation. Content: In the [first installment](/blog/technical-debt-vs-assets), we laid out how distinguishing technical debt from technical assets can guide your team’s roadmap. But many readers challenged whether “debt” is a useful metaphor or just jargon, and whether “assets” aren’t themselves liabilities in disguise. Let’s tackle those objections head-on and show why the metaphor actually nails the incentives and responsibilities developers, and stakeholders, face. ### 1. “There’s No Creditor or Loan Terms” True, but Stakeholders Are Your Bank **Objection:** “Real debt has lenders, contracts, and repossession. Tech debt has none of that.” In software, the creditor isn’t a bank branch, it’s everyone with stake in the product’s future. * **Future Developers:** They “lend” you their time and sanity, assuming you’ll write maintainable code. * **Business Owners & Customers:** They trust you’ll deliver features when promised, and still be able to evolve the product later. * **Your Future Self:** Six months from now, when you revisit that module, you’re both creditor *and* debtor. Like any loan, you implicitly agree: “Ship now, fix later.” That promise lives in issue trackers, sprint plans, and roadmaps. Miss those repayments and the “interest” shows up as bugs, stalled features, and burnt-out engineers. ### 2. “Metaphors Obscure Specifics”—But They Spark Shared Urgency **Objection:** “Talking about roaches in the kitchen distracts from concrete redesigns.” Concrete plans *need* shared context. So Metaphors are benefitial because they: 1. **Create a Common Language.** If every engineer thinks “debt” means something different, define it once, “debt = code we know we must improve.” 2. **Trigger Emotional Response.** Saying “we have roaches” forces action more than “our code is complex.” 3. **Frame Trade-offs Quickly.** Executives grasp “debt” vs “assets” faster than “we need better abstractions.” Once urgency is aligned, dive into specifics: code smells need a refactor, modules can't become obsolete, and new libraries may or may not be worth investing in. ### 3. “Technical Assets Can Become Debt”, Exactly the Point **Objection:** “You call something an asset today; tomorrow it might be a liability.” Real-world assets carry upkeep costs, buildings need maintenance, machinery needs calibration. So in software: * A shared utility library *is* a technical asset when it simplifies ten future features. * Over time, if it accrues deprecated dependencies or lacks tests, it morphs into debt. This dynamic nature underscores why we track debt and assets on the same ledger. Investing in an asset demands ongoing governance: version bumps, security audits, and documentation updates. If you ignore that, you’re just accumulating new debt under an appealing name. For a solution to the outdated dependency problem checkout this article on [automating dependabot](/blog/automating-dependabot-pr-merges-with-cicd) with build and test checks. ### 4. Aligning Incentives of Who Pays and When To keep debt manageable and assets thriving, tie repayment and ROI must be made to real stakeholders: * **Sprint Planning:** Allocate capacity (e.g., 20% of each sprint) explicitly for debt repayment, not “if there’s time.” * **Business OKRs:** Include metrics like mean time to change (MTTC) or codebase health scores as part of leadership goals. * **Roadmap Transparency:** Label backlog items as “debt” or “asset” with clear acceptance criteria and projected payoff timelines. By making debt visible to product owners and execs, you transform vague obligations into real tickets, and real budgets. ### 5. Some Practical Steps to Leverage the Metaphor 1. **Debt Register:** You'll need to maintain a lightweight issue list of known shortcuts, tech-obsolescence risks, and untested code paths. 2. **Asset Prospectus:** For investment ideas (e.g., adopting a new framework or internal tool), you want to write a short RFC outlining expected long-term gains and maintenance costs. 3. **Interest Tracking:** You need to measure “interest” by tallying frequency of hotfixes or rollback rates in high-debt areas. Share those charts in demos. 4. **Stakeholder Education:** Be ready to present a half-day workshop contrasting two scenarios, “never refactor” vs. “invest now”, with timelines showing feature velocity differences. Calling it “technical debt” isn’t laziness, and framing “technical assets” isn’t vanity. The metaphor captures the human and financial stakes behind every pull request. When we recognize *who* the debtor really is, our future selves, new team members, and business sponsors, we then can make more disciplined trade-offs. Rather than ignoring debt until it cripples us, we repay it consciously, freeing up capacity to build genuine assets that drive product innovation for years to come. ### The Myth of Endless Dev Jobs ID: the-myth-of-endless-dev-jobs Published: 2025-02-10 Read time: 7 min read Tags: Job Market, Software Engineering, Career Advice, Economic Cycles Domain: Full-Stack Development Role: Individual Contributor, Technical Lead OG Image: /images/blog/the-myth-of-endless-dev-jobs.png Excerpt: Tech never promised limitless roles only fierce competition. Here’s how to navigate the ebb and flow of software careers. Content: ## A narrative that never matched reality For more than a decade, coding bootcamps, universities, and even governments marketed the idea that software jobs were boundless. The loudest voices came from tech giants who benefited from a surplus of résumés: a bigger pool meant lower salaries and faster hiring. But the industry’s demand has always been finite, and the competition—local and global—was baked in from day one. #### The hidden competitors you’re up against * Global talent markets: Remote and contract platforms put you head-to-head with developers billing in currencies far cheaper than yours. * Citizen developers: No-code tools and the founder’s niece who dabbles in WordPress can deliver “good enough” solutions for many small projects. * Budget whiplash: One quarter brings hyper-growth hiring; the next freezes every req. It’s less a meritocracy than a timing game. ### Coding is table stakes, your full toolkit matters Writing clean functions keeps the lights on. Thriving requires skills most job descriptions soft-pedal: 1. Self-marketing: Your online presence and network often outweigh a new framework on your résumé. 2. Influence without authority: Convincing PMs and execs to ship features that balance risk with value, before bad code reaches prod. 3. Calm triage: Debugging in crisis mode without melting down or blaming the nearest teammate. 4. Organizational resilience: Reorgs, pivots, and leadership churn are constants; adapt faster than the org chart changes. ## Great engineers debug products; great careers debug politics. Contraction headlines miss the bigger picture, Layoffs and hiring slowdowns are often blamed on the newest scapegoat, today that’s large language models (LLMs). In reality, cuts correlate more strongly with risk appetite and capital cost than with any single technological leap. When credit loosens and demand rebounds, companies will staff up again. AI will reshape roles, but it won’t erase the need for people who can turn ambiguous ideas into reliable systems. ## So what do I do now? * Diversify expertise: Pair a core language with a business-domain skill (e.g., payments, healthcare compliance). Domain fluency makes you harder to replace. * Contribute visibly: OSS commits, conference talks, and thoughtful blog posts prove value beyond a two-page résumé. * Practice economic literacy: Read earnings calls; learn how macro trends steer headcount decisions so you can pick resilient sectors. * Sharpen collaboration with AI: Treat LLMs as accelerators, code review, scaffolding, documentation, not as threats. The software job market has never been an unlimited buffet, it’s a cyclical arena where the prepared outperform the merely proficient. Master the broader skill set, track economic tides, and you’ll ride the inevitable rebounds ahead. ### Beware the Strategic Turtles: Why Gartner Risks Nothing ID: beware-the-strategic-turtles Published: 2024-10-05 Read time: 7 min read Tags: Vendor Risk, Gartner, Skin in the Game, Enterprise IT, Cloud Architecture Domain: Cloud Architecture, DevSecOps Role: Architect OG Image: /images/blog/beware-the-strategic-turtles.png Excerpt: Consultancies thrive on advice they never have to implement, here’s how to spot the risk‑free pitch and demand real skin in the game. Content: ### The Polished Pitch, the Empty Plate Glossy slide decks, magic quadrants, and "actionable insights" feel impressive, until you ask for examples that survived real production heat. Too often the answer is another deck, another buzzword layer. When vendors risk nothing, your organization shoulders 100% of the fallout. A Greek Warning We Forgot, In one lesser‑known myth, sailors offered sea turtles they themselves wouldn't eat to Hermes the god of commerce. He refused because he knew the turtles tasted disgusting and the gift cost them nothing. Value without sacrifice, he implied, is no value at all. Modern advisory firms still trade in those strategic turtles: recommendations detached from consequence. #### Why Zero‑Risk Advice Persists 1. Asymmetry of information – execs are distanced from trenches where failures sting. 2. Cost center fog – consulting spend hides inside big budgets; post‑mortems rarely trace back to slide decks. 3. Industry FOMO – nobody wants to be the lone CIO skipping the quadrant leader. #### The Hidden Costs You Inherit * Delayed projects when "visionary" tools misalign with existing pipelines. * Soaring cloud spend from over‑scoped reference architectures. * Burnout in ops teams forced to stabilize half‑baked rollouts. ### The further a decision maker is from pager duty, the more seductive a glossy PDF becomes. #### Five Questions To Ask Your Consultants 1. Where have you personally deployed this under similar constraints? 2. May we speak with that customer’s ops lead, not just the sponsor? 3. What KPIs moved after six months in production, and which regressed? 4. How does your pricing model change if outcomes are missed? 5. What post‑implementation skin do you keep in the game? Bring these to every vendor meeting; watch how quickly marketing polish gives way to substance, or silence. #### Actionable Safeguards - Tie a portion of consulting fees to measurable post‑go‑live metrics. - Pilot in a sandbox that mirrors prod load; demand vendor on‑call during tests. - Log vendor assumptions in your risk register; revisit them at each retrospective. - Promote engineers who kill buzzwords early, not late heroes who patch chaos. Make sure they earn their skin in the game, only take advice worth heeding when it carries a visible cost to the giver, when it costs them time on the call instead of you, when their revenue is at risk because of your failed performance, when their reputation is on the line as much as yours. Reject strategic turtles and require offerings that cost them something. ### Automating Weekly Releases with GitHub Actions ID: automating-weekly-releases-with-github-actions Published: 2025-07-10 Read time: 7 min read Tags: GitHub Actions, CI/CD, Automation, Release Management, DevOps Domain: DevSecOps Role: Technical Lead OG Image: /images/blog/automating-weekly-releases-with-github-actions.png Excerpt: Set up a workflow that tags and publishes releases every week, regardless of your stack. Content: ### Why automate weekly releases? Manual release processes are fragile, time-consuming, and easy to postpone. By letting a bot cut a release every Sunday at 00:00 UTC you guarantee predictable delivery cadences, faster feedback loops, and happier consumers. ### Understanding the workflow file ```yaml name: Weekly Release on: schedule: - cron: '0 0 * * 0' workflow_dispatch: permissions: contents: write jobs: create-release: runs-on: ubuntu-latest steps: - name: Create weekly release uses: actions/github-script@v7 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | const { repo, owner } = context.repo; let lastReleaseDate = new Date(0); try { const latestRelease = await github.rest.repos.getLatestRelease({ owner, repo }); lastReleaseDate = new Date(latestRelease.data.created_at); } catch (error) { core.info('No previous release found'); } const lastWeek = new Date(); lastWeek.setDate(lastWeek.getDate() - 7); const sinceDate = lastReleaseDate > lastWeek ? lastReleaseDate : lastWeek; const commits = await github.paginate( github.rest.repos.listCommits, { owner, repo, since: sinceDate.toISOString(), sha: 'main' } ); if (commits.length === 0) { core.info('No new commits since last release'); return; } const tag = `${new Date().toISOString().slice(0, 10)}`; await github.rest.repos.createRelease({ owner, repo, tag_name: tag, name: `Release ${tag}`, target_commitish: 'main', generate_release_notes: true }); ``` The heavy lifting is done by `actions/github-script`: it gives you a fully-authenticated Octokit instance so you can call the REST API directly. ### Step-by-step implementation 1. Create `.github/workflows/weekly-release.yml` with the snippet above (or copy from the gist). 2. Ensure `GITHUB_TOKEN` has `contents: write`—the default token is fine, but the explicit permission block avoids future least-privilege surprises. 3. Push to `main`. The cron starts on the next Sunday; you can run it instantly via the **Run workflow** button exposed by `workflow_dispatch`. 4. Verify the release. A tag like `2025-07-13` will appear under Releases with autogenerated notes. ### Adapting to any language or framework GitHub Releases are repository-level. Whether you build with Go, Python, Java, or a monorepo of micro-frontends, the same job works. To attach compiled artifacts: ```yaml - uses: actions/upload-artifact@v4 with: name: linux-binary path: dist/mytool ``` Follow the release step with `upload-release-asset` or a marketplace action that wraps it. You can also drive package registries: - Publish an NPM package with `npm publish`. - Upload a Python wheel to PyPI via `pypa/gh-action-pypi-publish@v1`. - Push an OCI image to GitHub Packages using `docker/login-action` and `docker/build-push-action`. The weekly trigger stays identical; only the build matrix differs. ### Benefits at a glance - Consistency: Stakeholders know a fresh build lands every week. - Reduced merge pain: Shorter release cycles mean smaller diffs and easier rollbacks. - Automated changelog: `generate_release_notes: true` collates PR titles and commit messages. - Language-agnostic: Works for any project hosted on GitHub. - On-demand control: `workflow_dispatch` lets you cut an interim hot-fix without waiting. ### Best practices - Adopt semantic versioning alongside the date tag if downstream tooling expects `v1.2.3`. - Guard `main` with required checks so every auto-release is green. - Rotate the token to a fine-grained PAT if you need to push to sibling repos. - Combine with an environment to require manual approval for production assets. A 30-line workflow removes an entire class of "Who is on release duty?" conversations. Set it and forget it, your CI will ship on time, every time. ### Future-Proofing Junior Devs in the LLM Era ID: future-proofing-junior-devs-llm-era Published: 2025-07-11 Read time: 7 min read Tags: LLM Tools, Software Engineering, Career Advice, Education, AI in Development Domain: Full-Stack Development, AI/ML Role: Technical Lead OG Image: /images/blog/future-proofing-junior-devs-llm-era.png Excerpt: LLMs won’t kill programming jobs, they refocus them on testing, security, and robust system design. Content: ### The Landscape Is Shifting, Not Shrinking Large language model (LLM) tooling has accelerated routine coding tasks, API glue code, documentation scaffolds, even first-pass bug fixes. That efficiency can feel threatening to newcomers: “If a bot writes code, will anyone hire me?” The answer is yes, because the industry’s demand has moved, not disappeared. Companies still need engineers who look beyond the generated snippet and ask, Does this scale? Is it secure? Will it fail quietly at 2 a.m.? ## When cars replaced horses, transportation didn’t vanish, it evolved. Where Human Value Grows, LLMs handle surface-level pattern work. They stumble on nuanced, context-heavy tasks that require judgment and domain knowledge. Focus your learning on these areas: - Testing strategy – Writing parameterized, property-based, and chaos tests that force edge-case thinking. - Security hardening – Designing threat models, validating supply chains, and reviewing IAM policies beyond a linter’s reach. - Resilience engineering – Building fallbacks, retries, and circuit breakers so the whole system survives partial failure. - Performance tuning – Profiling, cache design, and data-flow analysis still demand human intuition. - Product empathy – Translating messy business requirements into technical trade-offs. LLM strengths : boilerplate, refactoring, quick examples Human strengths: architecture, risk analysis, deep debugging, creative synthesis ### A Historical Parallel The early 1900s saw blacksmiths learning carburetors, not closing shop. Likewise, modern engineers will master prompt engineering, model evaluation, and tooling orchestration. The skill delta between “can use ChatGPT” and “can integrate an LLM pipeline safely into production” is enormous, and hiring managers know it. #### Actionable Steps for Juniors 1. Master the fundamentals. Data structures and algorithms underpin every tool you’ll wield, LLM or otherwise. 2. Treat AI tools as pair-programmers. Ask why the model produced an answer, not just what it typed. 3. Invest in test literacy. Learn pytest, Jest, or your stack’s equivalent. Aim for mutation testing and coverage analytics. 4. Build small, robust projects. Deploy to cloud, add observability, break them on purpose, then fix them. 5. Stay curious about security. Follow OWASP Top 10 updates and practice capture-the-flag challenges. 6. Document your learning journey. Blogs, GitHub READMEs, and podcasting signal depth of thought to future employers. #### Leveraging LLMs the Right Way - Code review assistant: use models to suggest but never to approve merges. - Prompted unit generation: iterate on spec → prompt → refactor cycle. - Domain chatbots: fine-tune small models on project docs for instant context recall. - Incident retrospectives: summarize logs, but validate insights with human eyes. What Seasoned Engineers Can Do. Mentors should model healthy AI usage: show juniors how to validate generated output, explain architectural trade-offs, and pair on security reviews. The lesson isn’t “trust the robot”, it’s “trust, then verify.” Software engineering remains a growth field, but the value line has moved upward. LLM fluency will be table stakes; rigorous thinking will be the differentiator. Encourage students and junior colleagues to embrace the new tools, double down on systems knowledge, and build careers around tasks that algorithms can’t yet replace. The future isn’t less technical, it’s more so, and that’s good news for passionate learners. ### Employers Pay Problem-Solvers, Not Encyclopedias ID: why-employers-pay-problem-solvers-not-encyclopedias Published: 2024-11-21 Read time: 7 min read Tags: Problem Solving, Career Development, Workplace Skills, AI Tools, Continuous Learning Domain: AI/ML, Full-Stack Development Role: Technical Lead OG Image: /images/blog/why-employers-pay-problem-solvers-not-encyclopedias.png Excerpt: Employers hire, and rehire, the people who repeatedly diagnose and fix real problems faster and better than the competition. Content: ## Knowledge Is Table Stakes Degrees, certifications, and years in the field look impressive, but they only earn you a seat at the table. Once you are inside, managers ask a simpler question: Can you remove this obstacle quickly enough to justify your salary? Minutes spent admiring your résumé evaporate the moment production is down or revenue targets slip. The Real Hiring Test is when a company is bleeding money from buggy checkout code, they do not search LinkedIn for "knows every design pattern." They look for someone who has fixed a similar meltdown before, and can prove it. That is why the best interview answers follow the PAR framework: | PAR | What to Cover | |------|---------------| | Problem | Context, stakeholders, and the cost of inaction | | Action | Your specific decisions, trade-offs, and execution steps | | Result | Quantified impact: time saved, revenue gained, risk reduced | Stories told in this structure are memetic; they stick in a hiring manager's mind long after the call ends. ## You're paid for the problems you eliminate, not the facts you remember ### Cycle of Career Momentum 1. Earn the chance: Convince someone you can solve their problem. 2. Deliver repeatedly: Solve it faster, cheaper, or more elegantly than they thought possible. 3. Leverage proof: Package those wins as stories, metrics, and references to land the next role. Do this loop for a decade and your network becomes a referral engine that jobs itself. ### Tools Are Secondary Whether you lean on AI copilots, whiteboards, or carrier pigeons, the toolchain is irrelevant if the end state moves the metric that matters. Great problem-solvers evaluate tools on their ROI to the problem, not on hype. They ask: * Does this compress feedback loops? * Does it reduce error rate? * Does it scale with usage? Master fundamentals, problem framing, experimentation, communication and then plug in whatever tool makes those steps faster today. Tomorrow you may swap it out without identity crisis. ## Problem Framing → Hypothesis → Prototype → Measure → Iterate ```markdown Case Study: From Outage to Opportunity The Mess A SaaS startup suffered intermittent 502 errors. Traffic spikes during U.S. prime time caused cascading failures that cut revenue $18k nightly. The Approach 1. Reproduced overload in staging with synthetic traffic. 2. Used Linux perf and flame graphs to pinpoint a mutex in image processing. 3. Offloaded the CPU-bound task to an async worker pool; added back-pressure to the ingress layer. 4. Deployed canary release, monitored error budget, expanded to full fleet. The Result Downtime dropped from 37 min/night to 0s. Monthly churn decreased 12%, giving legal room to renegotiate a Series B at better terms. None of the investors cared which profiling tool uncovered the mutex—only that it was gone. ``` ### Build a Personal Evidence Vault Keep a living document (Notion, markdown, or even a spreadsheet) that records challenges, actions, and quantifiable results. Numbers beat adjectives: * Reduced page load time from 4s to 1.2s (↑ 233% conversion) * Automated invoice matching, saving 10 hrs/week for finance * Resolved memory leak that cut cloud spend by $4k/month This vault becomes the backbone of interviews, performance reviews, and proposals. ### Sharpening the Saw - Learn to diagnose: Study root-cause analysis, 5 Whys, fault trees. - Model constraints: Cost, time, scope, and risk form the playing field. - Practice under pressure: Participate in capture-the-flag events, hackathons, on-call rotations. - Seek feedback loops: Debrief every incident; ask "what would I do differently?" - Teach others: Explaining a solution reveals gaps faster than private study. ### Actionable Takeaways 1. Track every problem you solve with before/after metrics. 2. Practice explaining solutions to non-experts; clarity signals mastery. 3. Invest in frameworks for diagnosing issues, not just shiny new frameworks. 4. Treat each project like marketing collateral for the next one. 5. Build a community of fellow problem-solvers, you will trade opportunities endlessly. Knowledge matters, but only in service of outcomes. If you consistently transform messy problems into measurable wins, you will not need to chase jobs, opportunities will chase you. ### The Myth of Rigorous Hiring ID: the-myth-of-rigorous-hiring Published: 2024-12-03 Read time: 7 min read Tags: Hiring, Leadership, Engineering Management, Tech Careers Domain: Full-Stack Development Role: Technical Lead OG Image: /images/blog/the-myth-of-rigorous-hiring.png Excerpt: Long interview pipelines aren’t due diligence, they’re indecision disguised as competence. Content: ## When Process Becomes a Substitute for Judgment Many companies mistake bloated hiring pipelines for rigor. Eleven interviews, multiple panels, week-long take-home projects, none of this guarantees better decision-making. In most cases, it simply reveals a deeper issue: teams hesitant to trust their own judgment. The truth most hiring managers won’t admit is simple: within the first ten minutes of a conversation, you generally know whether someone is technically strong enough and whether they fit what you’re looking for. Experience sharpens that instinct, not more interviews. ## The Hidden Reality Behind Endless Loops Candidates often assume they’re progressing because they’re performing well. But behind the scenes, something else is happening: - By interview #3, the team usually already has a favorite. - Everyone else is kept “warm” as a backup. - Most additional interviews are not evaluations, they’re insurance policies. This isn’t diligence. It’s hedging. And it wastes people’s time. > Long interview processes aren’t driven by rigor. They’re driven by risk aversion and > fear of making the wrong call. When companies treat candidates like interchangeable parts, hot-swappable resources in a RAID array, they lose sight of the human beings behind the resumes. ## The Human Cost of Indecision Developers routinely describe spending weeks on interviews only to discover they were never close to receiving an offer. They were simply there to reduce the hiring team’s anxiety. This behavior damages your reputation and burns goodwill. Worse, it filters out your best people. Strong candidates disappear early: - After interview #2, they’re already taking offers elsewhere. - After #5, they’ve disengaged completely. - By #11, the only people still running your gauntlet are those without better options. Slow teams don’t just lose candidates, they lose the right candidates. ## What Effective Hiring Actually Looks Like The best engineering groups share a pattern: 1. Clear scorecards – Everyone evaluates the same criteria. 2. One or two interviews – Enough to confirm skill and fit, not exhaust anyone. 3. Fast decisions – Confidence replaces theatrics. 4. Offer quickly – Because good people won’t wait. If you can’t articulate why you need a seventh interview, you don’t need a seventh interview. And if someone is truly exceptional, hire them after the first. Long hiring pipelines don’t create great teams. Clear thinking does. Rigor isn’t measured in the number of hoops a candidate jumps through, it’s measured in the clarity and confidence of the decision-makers. Indecision masquerading as competence only slows you down. In a competitive market, speed isn’t a luxury. It’s the difference between hiring great people and watching them join someone else. ### Encourage Engineers to Build Side Projects ID: why-i-encourage-engineers-to-build-side-projects Published: 2024-08-16 Read time: 7 min read Tags: side projects, engineering culture, employee retention, management, creativity Domain: Full-Stack Development Role: Engineering Manager OG Image: /images/blog/why-i-encourage-engineers-to-build-side-projects.png Excerpt: Allowing engineers to pursue side projects cultivates creativity, engagement, and even long-term loyalty. Content: ## The Counter-intuition Managers often fear that side projects siphon focus or become an on-ramp to quitting. In practice, the opposite is true: when people can explore ideas beyond the backlog, they channel that energy back into the team. Interview for Curiosity, I open every interview by asking, “What are you building outside of work?” The answer tells me two things: 1. Intrinsic motivation – they code because they enjoy it, not just for a paycheck. 2. Growth mindset – they embrace learning curves and ship without hand-holding. Side projects aren't a litmus test for who codes around the clock. They're a chance to wrestle with shipping something you genuinely care about. When you've built your own app, pitched it online and watched adoption stall, you realize how little the code alone guarantees. Candidates who have lived through that cycle bring a grounded understanding of product work. ### Four Benefits to the Day Job - Fresh perspectives – Side hackers experiment with frameworks and patterns we may not yet use. - Higher engagement – Creative autonomy outside the office spills into on-the-clock problem solving. - Empathy for the business – Wrestling with pricing pages, AWS bills, and fruitless marketing attempts makes corporate trade-offs relatable. - Reduced resentment – Supporting outside interests signals trust, which dissolves “golden-handcuff” anxiety. ## People stay when they keep learning; they leave when they outgrow you. ### Addressing Common Objections **“It will hurt velocity.”** Set clear expectations: ship quality work first, then side projects on personal time. The motivated rarely abuse that freedom. **“IP might leak.”** Use lightweight policies (e.g., anything created off-hours and without company resources belongs to the employee) to avoid gray areas. **“What if they quit?”** They might, but so will disengaged developers who never felt trusted. The goal is mutual growth, not indentured servitude. ### How to Champion Side Projects 1. Provide resources – Offer cloud credits or a demo night every quarter. 2. Celebrate wins – Share a Slack shout-out when someone ships an open-source tool. 3. Cross-pollinate – Invite teammates to present lessons learned in brown-bags. 4. Mentor, don’t micromanage – Be a sounding board, not the project owner. ### A Virtuous Cycle When engineers return Monday after wrestling with Stripe webhooks all weekend, they empathize with our product constraints and contribute sharper ideas. Over time the company gains both new skills and a reputation as a place where builders thrive. Employees are not company assets to hoard; they are professionals on their own journey. By respecting, and actively nurturing, their side hustles, you create a culture that attracts self-starters, retains them longer, and benefits from every experiment they run along the way. ### Stop Blaming AI: The Real Reasons Behind Tech Layoffs ID: stop-blaming-ai-the-real-reasons-behind-tech-layoffs Published: 2024-12-06 Read time: 7 min read Tags: AI and Jobs, R&D Strategy, Workforce Trends, Global Hiring, Economic Policy, Business Strategy Domain: AI/ML, Full-Stack Development Role: Technical Lead OG Image: /images/blog/stop-blaming-ai-the-real-reasons-behind-tech-layoffs.png Excerpt: AI isn’t eliminating jobs by itself, failed R&D bets, tax quirks, and global hiring shifts drive most tech layoffs. Content: ## AI as a convenient scapegoat When headlines scream that artificial intelligence is coming for your job, executives can quietly breathe a sigh of relief: they now have an easy-to-understand narrative for painful head-count cuts. But correlation is not causation. The number of layoff announcements that mention an AI pivot has risen sharply, even when the root cause lies elsewhere. Treating AI as the villain distracts leaders from the genuine operational and strategic issues that demand attention. The cost of failed R&D bets, consider Meta’s multibillion-dollar gamble on VR/AR. Years of heavy spending produced exciting prototypes but little mainstream traction. When investors demanded discipline, the company trimmed staff and rebranded its road-map around large language models. Jobs disappeared, yet the real catalyst was sunk cost in an under, performing product line, not a sudden wave of AI automation. Similar stories play out across robotics, autonomous driving, and consumer hardware divisions that over-promised and under-delivered. Accounting rules still sting, the 2022 switch that forced U.S. firms to amortize R&D over five years (brought to life by provisions in the 2017 Tax Cuts and Jobs Act) hit software balance sheets hard. Cash-flow crunches triggered hiring freezes long before any meaningful AI tooling existed. Although lawmakers have floated bipartisan fixes, uncertainty keeps CFOs cautious. Blaming AI for belt-tightening is intellectually neat, but the accounting reality is messier, and more powerful, than ChatGPT. Global hiring is the quiet lever, remote-first norms and robust collaboration tooling let firms replace a $180K Bay Area engineer with two highly skilled colleagues abroad for the same budget. That arbitrage, not algorithmic displacement, explains why U.S. cutbacks routinely coincide with overseas expansion announcements. The jobs still exist; they have simply moved to friendlier cost structures. Ghost jobs and résumé gaming muddy the water, disillusioned applicants often point to AI résumé filters as the culprit when they receive an instant rejection. Less discussed is the ghost posting phenomenon, roles advertised purely to gather candidate intel or signal growth. Automatic rejections save recruiters time, but the underlying intention is image management, not machine learning gone rogue. Misdiagnosis leads to bad strategy, if leaders accept "AI killed our roles" at face value, they may double down on the wrong investments, purchasing expensive AI platforms, slashing headcount further, or ignoring structural problems in product-market fit. Misattribution erodes trust, demoralizes teams, and delays the corrective action truly required. AI is reshaping work, but it is rarely the first-order cause of tech layoffs. Failed R&D ventures, accounting headwinds, and global labor dynamics wield far greater influence. Diagnose accurately, act deliberately, and avoid scapegoats, your workforce and balance sheet will thank you. ### Steering the Conversation When you hear an executive blaming "AI efficiency" for a reduction in force (RIF), recognize it for what it is: a narrative shield for financial restructuring. As an engineer or manager, your job is to decode the signal. If the company is cutting "legacy roles" to hire "AI roles," that is a skills shift. If they are just cutting roles, that is a balance sheet correction. #### Don't be the "AI Guy" who eliminates jobs If you are leading AI initiatives, be very careful about how you frame your wins. If you pitch your project as "saving 10 headcount," you are painting a target on your team's back. Instead, pitch it as "increasing capacity by 10x." The math is the same, but the psychology is completely different. One breeds fear; the other breeds ambition. #### Signs of honest leadership You know your leadership is serious when they admit mistakes. "We overhired during the zero-interest rate period and need to correct" is a painful but honest statement. "Our new AI strategy requires fewer people" is often a convenient fiction. Trust the leader who respects you enough to tell you the financial truth, even when it hurts. ### Layoffs, Automation, and the Road to Reinvention ID: layoffs-automation-and-the-road-to-reinvention Published: 2025-07-13 Read time: 7 min read Tags: Layoffs, Automation, Future of Work, Tech Industry, Manufacturing, Reskilling Stack: AWS, Python Domain: Full-Stack Development, Cloud Architecture Role: Technical Lead OG Image: /images/blog/layoffs-automation-and-the-road-to-reinvention.png Excerpt: History shows that waves of automation often spark the next era of smarter, more resilient industries. Content: ## A Historical Echo from the Factory Floor The late-20th-century automotive sector offers a vivid lesson in industrial upheaval. Robots rolled onto assembly lines, entire shifts vanished, and headlines warned that car-making jobs were gone for good. Yet plants eventually reopened, leaner, digitized, and tied into global supply chains. Automation Didn’t Kill Cars, It Transformed Them. What actually disappeared were narrowly scoped, repetitive roles. Emerging in their place were robotics engineers, PLC programmers, supply chain analysts, and vendor-managed inventory specialists. Productivity rose, quality soared, and wages for advanced roles often exceeded the old ones. Tech’s Current Reset, the industry of 2023-2025 feels eerily similar. Cost-cutting at scale, project culls, and hiring freezes dominate the news cycle. But cloud budgets keep climbing, AI adoption is exploding, and demand for security, data governance, and digital experience remains strong. Layoffs are less an obituary than a messy reallocation of talent toward higher-impact problem spaces. ## What the Next-Gen Workforce Looks Like * Machine Learning Engineers – design, train, and operationalize models that power recommendation systems, forecasting pipelines, and language tools. * Automation Engineers (RPA Developers) – build & maintain scalable workflows reducing manual work in finance, HR, and customer service. * AI Integration Engineers – bridge LLM APIs with domain logic. * Edge-Computing Operators – manage real-time workloads in factories, vehicles, and retail. None of these titles were mainstream a decade ago, yet postings now outstrip supply. ## Takeaways for Workers and Companies 1. Invest in cross-disciplinary skills. Data fluency plus domain expertise beats narrow specialization. 2. Build learning loops into workflows. Small, continuous reskilling budgets trump occasional big-ticket courses. 3. Treat disruption as signal, not noise. Track which teams grow after layoffs; that’s where tomorrow’s core functions sit. 4. Cultivate optionality. Remote work policies soften the blow of future shocks. Disruption is rarely the end, more often, it is the uncomfortable bridge between eras. Automotive factories learned to partner human ingenuity with machines. Tech is crossing that same bridge now, trading legacy roles for ones that harness automation rather than fear it. The road to reinvention may be bumpy, but history suggests it leads to a smarter, more resilient landscape on the other side. ### Self-Taught Engineers Often Outperform ID: why-self-taught-engineers-often-outperform Published: 2024-08-27 Read time: 7 min read Tags: Self-Teaching, Software Engineering, Mentorship, Career Growth, Nassim Taleb Domain: Full-Stack Development Role: Individual Contributor OG Image: /images/blog/why-self-taught-engineers-often-outperform.png Excerpt: Great mentors help, but purposeful tinkering and grit tend to forge the strongest software engineers. Content: ## The Classroom Myth Formal education is valuable, but it is optimized for scale. It distills messy practice into neat sequences that fit a semester. Those recipes create useful proficiency, yet they rarely cultivate the intuition needed when the recipe breaks at 3 a.m. on prod. "Purposeful Tinkering" was defined by Nassim Taleb as mastery through repetitive continual error correction: repeated cycles of trial, error, and curiosity with real stakes. The key word is purposeful, experiments are guided by a concrete goal (shipping a feature, fixing an outage), not random play. ## You learn from messing with reality, not from a syllabus ### Case Studies of Tinker-Born Mastery * Linus Torvalds built Linux by rewriting MINIX to scratch an itch. * Margaret Hamilton debugged Apollo guidance code on-the-fly, inventing modern software reliability. * Countless open-source maintainers began by breaking their own laptops and patching them back to life. None received step-by-step lessons first; deep skill emerged because failure was allowed, and had consequences. ### Why Trial and Error Beats Recipes 1. Feedback loops are immediate. A crash log teaches faster than a quiz. 2. Edge cases surface naturally. Real users do things textbooks never imagine. 3. Retention is sticky. Hard-won fixes embed in muscle memory. 4. Creativity flourishes. When no handrail exists, you invent one. ## Mentorship Revisited: A Complement, Not a Crutch Good mentors accelerate feedback and broaden perspective, but the mentee still owns the screwdriver. Code reviews matter because they expose experiments to another set of eyes, not because they replace experimentation. ### Cultivating Your Own Tinkering Practice * Build side projects that scare you a bit. * Instrument everything so each failure yields forensic data. * Set constraints (no frameworks, 48-hour limits) to force creative problem-solving. * Publish your code. Public scrutiny is a fast mentor. * Reflect weekly. Write short retros on what broke and what you learned. Mentorship, courses, and blogs (yes, even this one) are catalysts, not replacements, for mastery. The strongest engineers earn their scar tissue by shipping, breaking, and mending software in the wild. Embrace purposeful tinkering, your future self will thank you. ### Coding vs Engineering in the LLM Era ID: coding-vs-engineering-in-the-llm-era Published: 2025-07-14 Read time: 7 min read Tags: LLM, Software Engineering, AI Tools, System Design, Developer Identity Domain: Full-Stack Development, AI/ML Role: Technical Lead OG Image: /images/blog/coding-vs-engineering-in-the-llm-era.png Excerpt: LLMs can crank out code, but lasting software still demands architecture, tests, and human judgment, forcing developers to redefine their role. Content: ## Code Is Just the Artifact When we talk about "writing software," we often slip into saying we "write code." But code is only the most visible output of a far larger effort. Architecture, data modeling, observability, security, deployment pipelines, performance budgets, these are the invisible scaffolds that make a product reliable and valuable. What do LLMs Actually Automate? Large language models excel at pattern replication. Feed them enough source files and they can synthesize boilerplate, stub out CRUD endpoints, or translate snippets across languages in seconds. That is genuinely useful, but it is also the easiest, most mechanical slice of software work. ### LLMs do not on their own: They cannot validate a threat model against compliance targets, nor can they prove a concurrency design under production load. Similarly, they struggle to pick a logging taxonomy that keeps storage costs sane, and they certainly cannot negotiate trade-offs with stakeholders when business rules change. Each of those tasks requires context, judgment, and trade‑off awareness that today’s models can only approximate when guided by an experienced engineer. #### Example: LLM‑generated API stub ``` POST /orders ↳ validate(request.json, OrderSchema) ↳ db.orders.insert(request.json) ↳ return 201 ``` In the example above, it compiles, but where are retries, idempotency keys, metrics, or rollback hooks? ## From Coder to System Designer For decades, many engineers built careers on being highly productive coders, translating requirements into syntax quickly and accurately. If that translation is suddenly cheap, the scarce skill becomes designing the right thing to translate in the first place. That shift feels existential: "If the IDE can autocomplete whole functions, what am I for?" The answer is that you are the person who ensures the whole system, people, processes, runtime, and code, works together. ### Engineering Core Responsibilities Engineering core responsibilities include systems thinking to model how data, services, and users interact under change, as well as risk management to quantify failure modes and design mitigations early. Engineers must also define quality strategy by choosing the effective mix of tests, practice model stewardship to verify AI alignment with governance, and provide change leadership to coach teams through transitions. ### Practical Guidance for Teams Treat LLMs like junior developers with infinite stamina but zero domain context. Give them small, well‑scoped tasks, review everything, and gradually expand trust. Start with noncritical paths like internal tools or migration scripts. Automate the review pipeline using static analysis and load tests as gatekeepers. Capture decisions in architecture ADRs to preserve context for future humans or models. Invest in observability, using high-resolution metrics to expose hidden coupling in autogenerated code. Finally, reward design outcomes rather than lines of code by updating performance reviews to reflect this shift. ### Coping with the Identity Shift It is normal to grieve the diminishment of a skill you once prized. Reframe "coding" as one tool among many and celebrate the larger influence you can now wield. Apprentice in architecture by pairing with platform or infra teams and reading real post-mortems. Teach others, as mentoring juniors on design principles solidifies your own understanding. Despite the AI assistance, stay hands-on with prototypes and spikes to keep your intuition sharp. ## The future belongs to engineers who orchestrate both humans and machines in service of durable, humane systems. LLMs commoditize syntax, not software engineering. The industry still needs architects, testers, SREs, and product‑oriented thinkers to guide that commoditized labor toward dependable systems. If you embrace the broader craft, decision‑making under uncertainty, you will find your relevance increasing, not shrinking, in the age of machine‑generated code. ### The Engineer's New Mandate If code is now abundant and cheap, then trust is the new scarce resource. Your value as an engineer is no longer defined by how fast you can type `func main()`, but by how effectively you can guarantee that `func main()` does what the business needs, securely and reliably. #### Shift from Author to Editor You are moving from being the primary author of every line to being the Editor-in-Chief of a codebase that is engaged in a constant dialogue with AI models. This requires a shift in mindset: being skeptical of every output, validating rigorously, and focusing on the higher-order structural integrity of the system. You are not losing your craft; you are elevating it. #### Practical Mentorship When mentoring junior engineers in this era, stop obsessing over syntax memorization. Instead, focus on "System Design" and "Failure Mode Analysis" from day one. Teach them to ask: "What happens if this AI-generated block fails?" "How do we debug this if the model is wrong?" "Is this secure?" These are the questions that no model can answer for itself. #### Signs of adaptation You know your team is navigating this shift well when code reviews focus less on "nitpicks" about variable names and more on architectural constraints and edge cases. When a junior engineer catches a subtle logic error in an AI suggestion because they understood the *system* better than the *syntax*, you have successfully future-proofed your team. ### YAML Matters in the Age of LLMs ID: why-yaml-matters-in-the-age-of-llms Published: 2024-11-13 Read time: 7 min read Tags: YAML, LLMs, Developer Tools, Tokenization, Cost Optimization Domain: AI/ML, Full-Stack Development Role: Technical Lead OG Image: /images/blog/why-yaml-matters-in-the-age-of-llms.png Excerpt: LLMs favor YAML's lean token footprint, keeping the format relevant, and cost-effective despite developer gripes. Content: ### The love‑hate relationship with YAML For two decades developers have joked that "YAML ain't markup language, it's yet another meddlesome language." Indentation errors, mysterious type coercion, and whitespace‑driven syntax have spawned countless memes. Many teams migrated configuration files to JSON, TOML, or even XML just to avoid the pitfalls. Yet YAML refuses to die. Kubernetes manifests, GitHub Actions, Ansible playbooks, and nearly every modern CI/CD pipeline rely on it. The latest twist? Large language models (LLMs) give YAML a brand‑new advantage. ### Why token count suddenly matters LLMs are priced and throttled by tokens, the sub‑word pieces a model consumes and emits. Fewer tokens mean faster inference and lower cost. Formats that convey the same information with fewer characters win immediate economic points. #### YAML is naturally concise: - Keys don't need quotes unless special characters appear. - Arrays use a leading dash instead of brackets and commas. - The lack of curly braces and trailing commas trims dozens of characters in large documents. Small differences add up when prompts include multi‑kilobyte configs or when an agent exchanges YAML back and forth over hundreds of iterations. #### YAML vs JSON vs TOML: a byte‑level look Below is an example profile in YAML and JSON. Count the non‑whitespace characters. ```yaml name: Ada Lovelace age: 36 languages: - Analytical Engine - Fortran ``` ```json { "name": "Ada Lovelace", "age": 36, "languages": ["Analytical Engine", "Fortran"] } ``` The YAML version weighs in at **73 bytes**; JSON hits **99 bytes**, a 26 % bump. Tokenizers aren't one‑byte‑per‑token, but character savings and the absence of quotes translate into fewer tokens almost one‑for‑one for ASCII‑only text. #### Cost savings in practice Imagine a prompt chain that embeds a 5 KB YAML snippet on every request. If that config appears 10 000 times a day: - YAML: ~5 MB → ~375 000 tokens → $0.75/day at $0.002 per 1 K tokens. - JSON: ~6.3 MB → ~470 000 tokens → $0.94/day. That $0.19 delta may look trivial until you scale to millions of daily calls or keep the context window open persistently for autonomous agents. Multiply by 30 days and suddenly your "annoying" syntax is saving thousands of dollars. #### Where YAML still falls short? Conciseness isn't everything. Choose JSON or protobuf when you need strict schemas, strong typing, or streaming parsers. YAML's flexible scalar rules can misinterpret `on`, `yes`, or dates. In security‑sensitive code paths, explicit is safer than implicit. #### Writing LLM‑friendly YAML 1. **Stick to strings**: Quote values that could be mis‑typed (`"on"`, `"03"`). 2. **Flatten deeply nested data**: LLMs handle flat key paths more reliably. 3. **Keep comments minimal**: Some tokenizers count them; strip before sending to production models. 4. **Validate with `yamllint`**: Catch indentation quirks early. Developers may never fall in love with YAML's whitespace quirks, but the economics of token‑based AI are hard to ignore. As long as LLMs dominate software workflows and pricing remains token‑centric then YAML's smaller footprint grants it a second life. Hate it if you must, but YAML is poised to outlast the joke memes and remain a first‑class citizen in the AI era. ### Tabs vs Spaces: Has AI Finally Ended the Debate? ID: tabs-vs-spaces-has-ai-finally-ended-the-debate Published: 2024-09-18 Read time: 7 min read Tags: Code Formatting, Tabs vs Spaces, AI Coding Tools, Style Guides Domain: Full-Stack Development, Code Generation Role: Technical Lead OG Image: /images/blog/tabs-vs-spaces-has-ai-finally-ended-the-debate.png Excerpt: AI code tools blur the tabs‑versus‑spaces divide, but only if your project stays consistent and models are trained accordingly. Content: ## The Long-Running Indentation War For decades, developers have argued whether **tabs** or **spaces** make the better indent. Tabs save bytes and let each person set a width that suits them. Spaces guarantee identical alignment in every editor. The debate was mostly philosophical, until machine learning, powered coding assistants arrived. So Why Does Indentation Still Matter? Many languages (Python, YAML, HCL, CoffeeScript) treat indentation as part of "syntax". Even in C-style braces, clean indents aid code review tools and automated formatters. When indentation is off, parsers can misread scope, and code intelligence engines may fail to build an accurate abstract syntax tree (AST). AI Learns From Training Data so Large language models (LLMs) ingest terabytes of open-source code. If that corpus is **biased toward spaces**, the resulting model becomes better at predicting space-aligned structures. The reverse holds for tabs. An LLM does not intrinsically "count" tabs more cheaply than spaces; it simply sees a single control character versus several. What matters is 'how often' each style appears in the data and whether the model was fine-tuned to normalize both. The **Key takeaway:** The model’s formatting preference mirrors its diet. ## Consistency Beats Preference Mixed indentation, tabs sprinkled among spaces, confuses humans "and" AI. Any pattern learner struggles when stylistic signals fluctuate. You may see code completion drift, mis-aligned snippets, or linter noise. Maintaining a **single, enforced style** (via `.editorconfig`, `prettier`, `black`, or language-specific linters) ensures both humans and models operate on a stable baseline. ```python # Good: consistent spaces (4-wide) def greet(): print("Hello") # Bad: models may misinfer scope def greet(): print("Hello") ``` So has AI Solved the Debate? Modern tools such as GitHub Copilot, Tabnine, and Claude can detect the dominant indent style of a file and adapt on the fly. Some IDE plug-ins offer a "convert indentation" command that harmonizes an entire repository before an LLM sees it. In that sense, AI can "bridge" the gap: it will happily output tabs if the context starts with tabs, and spaces if spaces rule. Yet two caveats remain: 1. **Training Bias** – If your codebase is mostly tabs but the model learned on spaces, its first few completions may be incorrectly spaced until context primes it. 2. **Lint Enforcement** – Without CI checks, a teammate (or bot) could commit mixed styles, triggering the very inconsistency that weakens AI output. ## Practical Workflow Tips - **Lock in a style guide.** Add an `.editorconfig` or linter rule (`indent_style = space` or `tab`) at repo root. - **Autofix pre-commit.** Tools like `pre-commit`, `husky`, or GitHub Actions can run `prettier --write .` or `black .` to guarantee uniformity. - **Let AI follow context.** When prompting ChatGPT, include a properly indented code snippet first. The model will mimic that style in its reply. - **Batch-convert legacy files.** Run `entab`/`detab` scripts once, then make linters mandatory to prevent regressions. - **Review diff noise.** Indentation-only commits obscure logic changes. Adopt "whitespace-ignored" diff settings or separate style-only PRs. AI code assistants haven’t crowned a universal winner; rather, they make the choice less painful, if your project is internally consistent. Pick tabs or spaces, codify the rule, and your LLM collaborator will respect it. The true battle today is not **tabs vs spaces** but **consistency vs chaos**. Win that war, and both humans and machines will read, write, and maintain your software with far fewer hiccups. ### Did AI Really Slow Developers by 19 %? A Closer Look ID: ai-slowed-devs-by-19-percent Published: 2025-07-15 Read time: 7 min read Tags: AI Coding Assistants, Developer Productivity, Workflow Optimization, METR Study, GitHub Copilot Domain: AI/ML, Full-Stack Development Role: Technical Lead OG Image: /images/blog/ai-slowed-devs-by-19-percent.png Excerpt: A deep dive into the study behind the "AI slows devs by 19 %" headline and what it really says about shifting workflow bottlenecks. Content: ## Where the headline came from In early July 2025 the nonprofit Model Evaluation & Threat Research (METR) released a randomized controlled field study that let 16 experienced maintainers work on 246 real issues in the open source projects they steward. When the IDE’s AI features (Cursor + Claude 3.5/3.7) were enabled, tasks took 19% longer to finish even though the very same developers had predicted a 24% speed up before starting. The press translated that delta into punchy headlines like “AI slows down software development by 19%.” The nuance, however, lives in the paper’s method section rather than the sound bite. ## Why “no‑AI” wasn’t really measured METR did not time a control run without AI. Instead, participants estimated how long each issue would have taken had they switched the assistant off. Seasoned engineers know those estimates are optimism dressed up as numbers; slippage is routine even for tasks in codebases you own. Linking performance to pre work guesses almost guarantees a gap between forecast and reality, with or without AI. Contrast that with GitHub’s 2023 Copilot experiment, which used a classic lab style A/B design and found a 55% speedup on an HTTP server kata. Different measurement scaffolding, different outcome. ## AI sped up typing, but slowed down everything around it Screen recordings show developers flying through boilerplate once the model produced a reasonable draft. The lost time accumulated elsewhere: Developers spent significant time in prompt loops, phrasing, re-phrasing, and pruning context windows. Waiting for model inference latency, especially under high load, also consumed valuable minutes. Furthermore, the review and validation phase—reading unfamiliar suggestions, cross-checking docstrings, running tests, and reverting hallucinations—became a major time sink. Those steps are meta work, not coding, yet they still count toward “time on task.” In the study they outweighed the raw typing gains. ## The shifting bottleneck principle Think of your delivery pipeline as a chain. AI made the coding link stronger but left the others unchanged, so the weakest link simply moved downstream. The result looks like a slowdown even though one segment accelerated. Historically we have seen the same pattern whenever tooling leaps ahead: continuous integration surfaced that merge > test queue was the real drag; container orchestration revealed how much time ops spent on secrets and networking. AI assistants are exposing friction in spec grooming, knowledge sharing, and review throughput. ## How to harvest AI gains for real projects First, move AI left by generating or validating specs before coding begins. Second, cache context by scripting retrieval of relevant files and tests so prompts stay concise. Third, parallelize review by treating AI output like a teammate’s PR, smoke-testing while the model is still thinking on the next chunk. Fourth, instrument the workflow to measure queue times, not just keystrokes, as bottlenecks often hide in invisible phases. Finally, re-estimate tasks post-AI using empirical cycle data rather than memory for planning. Teams that iterate on process as aggressively as they tune prompts usually see the headline effect flip: the assistant becomes a net accelerator rather than an exotic text editor. ## Before you call the hype police No single study settles the debate. METR examined veteran contributors inside mature codebases—arguably a worst case for AI given deep context and strict quality bars. Rookies tackling green field code, by contrast, often report dramatic speedups. Copilot’s own field telemetry signals that 46% of code on average is now machine‑generated for paid users, and Microsoft claims noticeable productivity lifts in internal cohorts. But telemetry is not a controlled experiment, and lab wins do not always translate to production, as METR just reminded us. AI pair programmers are real, but so are Little’s Law and Conway’s Law. If you drop a faster coder into an unchanged pipeline, throughput will plateau while wait states mushroom elsewhere. Speed follows systems thinking. Until our workflows evolve to exploit AI’s spike in keystroke velocity, we will keep trading coding minutes for prompting minutes, and wondering why the sprint board still closes at 5 p.m. ### Validating AI ROI in Your Organization The most dangerous takeaway from the METR study would be to ban AI tools because "science says they are slow." The study highlights a specific friction point—maintenance in unfamiliar codebases—not a universal truth. The lesson isn't to stop using the tools; it is to stop trusting the vibe of speed and start measuring the reality of throughput. #### Find your own bottleneck If you suspect AI is slowing you down, look at the "wait states" in your process. Are developers generating code in minutes but spending hours debugging subtle hallucinations? Are senior engineers overwhelmed by a flood of "looks good to me" PRs generated by juniors using LLMs? These are the real costs. The fix isn't usually to remove the AI, but to change the process around it—requiring stricter tests before a PR can be opened, or using AI to auto-review the boredom out of the queue. #### Better metrics than "lines of code" Stop measuring individual velocity. It has always been a vanity metric, and now it is a noisy one. Instead, measure *Cycle Time* (time from first commit to production) and *Change Failure Rate* (how often you break things). If AI helps you ship faster but breaks production twice as often, you haven't improved productivity; you've just automated technical debt. #### Signs of maturity You know you have adapted to the tool when the team stops talking about "prompt engineering" and starts talking about "verification engineering." When the excitement shifts from "look what it wrote for me" to "look how I proved this auto-generated code is correct," you have moved past the hype and into the productive plateau. ### Escaping the /cgi-bin Era of AI ID: escaping-the-cgi-bin-era-of-ai Published: 2025-07-15 Read time: 7 min read Tags: AI, Machine Learning, Geometry, Reasoning Systems, Transformers, Interpretability Domain: AI/ML Role: Technical Lead OG Image: /images/blog/escaping-the-cgi-bin-era-of-ai.png Excerpt: Why AI needs a geometry-first foundation to replace brittle hacks like tokenization, embeddings, and system prompts. Content: ## The Problem with Today’s AI Primitives If you’ve worked with modern LLMs, you know the feeling: they’re magical, but built on duct tape. Tokenization, embeddings, attention, system prompts, they work, but they’re crude hacks. The architecture is fragile, opaque, and fundamentally limited. Like the early web’s CGI scripts, they get the job done but lack robustness and structure. Just as web frameworks replaced ad-hoc scripts, AI needs a foundational leap. Current primitives rely on tokenization, which is often an arbitrary and lossy chopping of inputs. Embeddings provide high-dimensional but opaque vectors, such as BERT’s 768-dimensional spaces, while system prompts offer brittle steering instructions with no persistent knowledge update. Transformers make these workable but don’t solve the absence of self-learning, long-term coherence, or interpretability. ## Starting with Geometry Instead of Attention Rather than focus solely on attention and context windows, we can start with geometry: First, semantic dimensions ensure that each axis is chosen for meaning and utility. Second, deterministic compression allows domain data to be reduced without losing interpretability. Finally, procedural expansion enables the rebuilding of rich representations from compressed states without hallucinations. Here, embeddings aren’t mysterious, they’re structured, interpretable spaces. ## Any Data, Any Sensor, Any Domain A geometry-first framework can ingest text, images, and video as effectively as it handles audio, multimodal sensor data, and structured datasets. Outputs could be modular, reusable context with interpretable environments tuned to specific domains, editable at runtime. ## Why This Matters for Coherence and Agency Coherence becomes part of the substrate, not an afterthought. Relationships between concepts, events, and entities are encoded explicitly. This enables: This enables real-time agency evolution within narrative or operational bounds, offering an infinite choice-space without breaking logic. It also supports human-in-the-loop reasoning with full visibility into the system’s understanding. ## Toward a Post-/cgi-bin AI Stack Like web frameworks replaced CGI, a geometry-first reasoning substrate could replace today’s brittle hacks, not by eliminating transformers or prompts, but by integrating them into a coherent, interpretable pipeline. Knowledge could evolve incrementally, patterns could persist without retraining from scratch, and interpretability would be a core feature. ## The Big Question If you had access to a platform where you could: Imagine loading any dataset and mapping it into a tunable geometric space, where you can author rules and agents that evolve in real time while maintaining coherence across infinite branching paths, ...what would you build? ### Building Durable AI Systems Today While we wait for the "geometry" revolution, we still have to ship software with the tools we have. The key is to treat current LLMs as a transitional runtime—the `/cgi-bin` of our era—rather than the final architecture. Use them, but insulate your core logic from them. #### The "Sandwich" Pattern Don't let the LLM permeate every layer of your stack. Instead, sandwich the probabilistic AI layer between two deterministic layers. The outer layer (input) should be rigorous validation and context retrieval. The inner layer (logic) should be the heavy lifting done by the model. The final layer (output) should be strict schema validation and policy enforcement. If the AI hallucinates, the outer layers should catch it, not the user. #### Avoiding the "Prompt Engineering" trap Don't fall in love with your prompts. They are temporary hacks for a primitive model. Invest your engineering time in *evaluation pipelines* rather than prompt tuning. A good eval suite survives the next model update; a perfectly tuned prompt breaks the moment the API changes version. #### Signs of a mature AI strategy You know you are escaping the brittle era when you stop relying on "vibe checks" to deploy. If your release process requires a human to "chat with the bot" to see if it feels right, you are still in the cgi-bin days. When you have a deterministic evaluation set that scores your model's reasoning on 500 edge cases automatically, you have started building engineering rigor. ### Founders Trade Equity for Credibility ID: why-founders-trade-equity-for-credibility Published: 2025-06-12 Read time: 7 min read Tags: Startup Ecosystem, Y Combinator, Entrepreneurship, Attention Economy, Business Psychology Stack: AWS, ChatGPT Domain: FinTech, Full-Stack Development, AI/ML Role: Technical Lead OG Image: /images/blog/why-founders-trade-equity-for-credibility.png Excerpt: YC isn't about capital or advice; it's about instant credibility in a noisy startup ecosystem. Content: In today's startup world, launching a minimum viable product (MVP) has never been cheaper or easier. Thanks to AWS credits, open-source libraries, and AI-powered tools like ChatGPT, founders can quickly prototype and deploy products at minimal cost. Yet, despite this accessibility, entrepreneurs still willingly give away significant equity—around 7%, to join accelerators like Y Combinator (YC) in exchange for $500k. Why? Because the real product isn't your app, platform, or technology. The true product is credibility. ## The Real Value of YC Isn't Capital or Advice While YC undoubtedly offers valuable resources, guidance, and networking opportunities, these can largely be found elsewhere, often freely available on YouTube, blogs, and open forums. Likewise, capital itself isn't always the driving factor for founders who increasingly come from backgrounds where initial financing isn't the main bottleneck. Instead, YC’s primary value lies in validation. In the crowded, noisy attention economy, YC acts as a credential, a sign that says, "This idea—and the people behind it, should be taken seriously." It allows founders to dream big and talk big. Consider the psychological shift a founder undergoes before and after acceptance into YC: - **Before YC**: "I’m working on a startup." - **After YC**: "We’re redefining industry X." It's the same company, same idea, but the reception drastically differs. Investors listen more intently, potential hires respond more eagerly, and customers trust more readily. This dynamic goes beyond YC and permeates the entire business ecosystem. Big companies pay huge sums for Gartner reports, not because these reports reveal groundbreaking insights, but because an authoritative external voice confirms and validates internal beliefs. Companies regularly hire Big 4 consulting firms, not to discover unknown truths, but to validate internal strategies they've debated internally for months. The validation, external and prestigious, reduces perceived risk and provides psychological safety to stakeholders. ## Credibility as Currency This need for external validation isn't irrational; it's deeply pragmatic. In business, sometimes believing is harder than building. The most significant challenges aren't technical or operational, they're psychological. When surrounded by constant noise, skepticism, and doubt, an authoritative signal that says, "These founders are credible," becomes indispensable. YC, Stanford MBAs, and elite consultancies trade primarily in this currency: **confidence**. They provide credibility faster and more effectively than any product demo or marketing campaign. ## Credentialism in the Attention Economy The attention economy is saturated. Every entrepreneur is shouting about their revolutionary product, disruptive innovation, or groundbreaking vision. Investors, partners, and customers are overwhelmed. Amidst this noise, a YC badge, or affiliation with recognized industry leaders like Sand Hill Road, functions like a passport, granting access and attention where it might otherwise be difficult or impossible to achieve. This credibility shortcut is precisely why founders accept the tradeoff: giving up equity for validation. YC isn't merely selling mentorship, capital, or networking, it's selling the intangible but invaluable asset of credibility. ## Confidence Over Capital Today’s founders aren't merely investing in capital or education when joining YC, they're purchasing credibility and permission. The credibility to dream bigger, speak louder, and be heard clearly. In an ecosystem overflowing with ideas and claims, the YC credential remains one of the most powerful signals for early-stage startups, unlocking opportunities well beyond what mere financial resources can provide. Ultimately, YC isn't selling advice or money; they're selling confidence. And in a world filled with noise, confidence might just be the most valuable currency of all. ### Builders vs MBAs: When to Hire for Chaos ID: builders-vs-mba-when-to-hire-for-chaos Published: 2025-06-18 Read time: 7 min read Tags: Startups, MBAs, Hiring, Engineering, Business Skills Domain: Full-Stack Development OG Image: /images/blog/builders-vs-mba-when-to-hire-for-chaos.png Excerpt: Early stage startups need chaos organizers, not process optimizers, know when to hire builders versus MBAs. Content: Companies live and die by their ability to build, break, and ship fast. In those first months, there's no system to optimize or process to streamline. You need people who are comfortable with mess, can duct-tape backend services together, and aren't afraid to break rules or invent new ones. MBAs are often caricatured as process-heavy deck polishers. In truth, their real training is in speaking the language of other MBAs: investors, enterprise buyers, and Fortune 500 partners. That language isn't much use when you're still scrambling for product-market fit, but it becomes critical as you scale and start raising serious money, selling to big clients, or facing complex negotiations. ### Creating vs Optimizing The real gap isn't experience, it's skill set. MBAs are world-class optimizers. But at the beginning, there's nothing to optimize, startups need people who can create something from nothing. If you're an MBA who wants to thrive early on, get comfortable with chaos. Build just enough structure to keep the wheels on, then adapt fast as things change. On the flip side, if you're an engineer or founder, don't underestimate the need for an MBA's translation skills down the road. If your startup succeeds, someone will need to bridge the gap with investors, large customers, and partners who expect you to speak their language. You might meet MBAs who can out-navigate a junior dev, or senior engineers who run circles around MBAs on business. These hybrid talents are rare and expensive. Most companies hire what they're culturally comfortable with. MBAs flock to MBA-heavy firms, and engineering-centric orgs hire more engineers. Neither is inherently better; it's just about the kind of environment and chaos they organize best. ### Know What You Need, and When Don't default to hiring MBAs too soon, and don't assume you'll never need them. Early stage means survival and creation; later stage means stability and optimization. Both skill sets are valuable, just not always at the same time. At the end of the day, it's about recognizing the kind of chaos you're best suited to organize. ### AWS's Copy-and-Scale Strategy: Innovation or Imitation? ID: aws-copy-and-scale-strategy-innovation-or-imitation Published: 2025-07-12 Read time: 7 min read Tags: AWS, Open Source, Cloud Services, Innovation, Cloud Architecture Domain: Cloud Architecture, Full-Stack Development Role: Architect OG Image: /images/blog/aws-copy-and-scale-strategy-innovation-or-imitation.png Excerpt: AWS now mirrors Apple’s playbook: wait for an open-source hit, fork it, and monetize at scale. Is this savvy pragmatism or stifled innovation? Content: Amazon Web Services burst onto the scene in 2006 as a category creator, but today many of its headline launches look more like refinements of community work than green-field breakthroughs. From managed databases to AI-powered coding tools, AWS appears to be doubling down on a copy-and-scale model: spot what developers already love, fork or re-implement it, then offer a pay-as-you-go version. ## The Fork-and-Monetize Playbook The steps are familiar: 1. **Observe traction** in an open-source or developer tool. 2. **Integrate or fork** the project so it runs natively on AWS. 3. **Add glue**—IAM, CloudWatch metrics, consolidated billing. 4. **Market the service** as the fastest, safest path to production. 5. **Charge** for convenience, not code. The result: customers avoid self-hosting overhead, and AWS deepens lock-in without heavy R&D risk. ## Example Case Studies ### Amazon Linux A Red Hat-style distro tuned for EC2, offering predictable kernels and long-term support, without reinventing linux. ### Aurora (PostgreSQL compatible) Aurora wraps Postgres with a clustered storage engine and serverless scale, capturing workloads that might otherwise migrate to managed Postgres startups. ### ElastiCache for Redis Rather than craft a new in-memory store, AWS packaged Redis with failover, patching, and multi-AZ replication. ### OpenSearch (Elasticsearch fork) When Elastic relicensed Elasticsearch, AWS responded by forking v7.10 and founding the OpenSearch project—then shipping a fully managed cluster service the same quarter. ### Kiro: VS Code & AI Assistants The newest entrant bundles a VS Code-compatible IDE with AI-assisted coding reminiscent of Cursor and Claude Code. The pattern repeats: popular front end, AWS back end. ## Lessons from Apple’s Toolbox Apple seldom invents transport-layer tech—USB, Wi-Fi, even HID were industry efforts, but excels at packaging and polish. AWS mirrors this ethos: own the last mile, where reliability meets credit card. ## Why This Works * **Economies of scale:** AWS runs the world’s largest fleet; marginal cost to host another OSS stack is low. * **Customer psychology:** Enterprises favor a single vendor for support and compliance. * **Ecosystem momentum:** Each new managed service tightens gravity around AWS’s APIs and consoles. ## Risks for Builders and the Community * **Upstream tension:** Forks can fracture governance and fragment mindshare. * **Innovation chill:** Smaller vendors may hesitate to launch if AWS can undercut them overnight. * **Lock-in creep:** Proprietary extensions make repatriation expensive. ## How to Respond as a Developer or Founder * **Bet on differentiation:** Compete where AWS won’t, opinionated UX, vertical specialization, or multi-cloud abstractions. * **Cultivate community:** Align with open governance models that thrive even when hyperscalers fork. * **Leverage portability:** Tools like Terraform, Kubernetes and OpenTelemetry reduce migration friction. AWS’s copy-and-scale strategy is unlikely to slow; it pragmatically converts proven demand into recurring revenue. For users, the calculus remains simple: pay for convenience today, accept platform risk tomorrow. Understanding the playbook is the first step toward navigating—or exploiting—it. ### High-Agency Careers Are Freedom for Parents ID: choosing-high-agency-parenthood-career Published: 2024-10-23 Read time: 7 min read Tags: High Agency, Parenthood, Career Change, Quality of Life, Entrepreneurship Domain: Full-Stack Development Role: Individual Contributor OG Image: /images/blog/choosing-high-agency-parenthood-career.png Excerpt: True freedom as a parent means controlling your career and life, choosing high-agency over comfort to shape your family's future. Content: ### A Life-Changing Decision In November 2010, my world flipped upside down. I became a first-time parent and, with that, left a stable job, turning down a lucrative full-time position at SDG&E. My motivation? To raise my family's standard of living and truly push myself as a software engineer, even if that meant stepping outside the conventional path. Becoming a parent brings a unique kind of vulnerability. There's nothing quite like looking into the trusting eyes of your child and feeling the weight of responsibility, and the uncertainty of how you'll provide. That moment fundamentally changed my appetite for risk. The safety of a "risk-free" 9-to-5 suddenly seemed less appealing than the possibility of real agency over my family's destiny. I chose to be aggressive. Instead of comfort, I doubled down on opportunity: joining startups, pursuing side projects, and constantly seeking out new skills. There were tough times, missed paychecks, nights spent worrying, moves to new cities. I even left a steady, well-paid role at a San Diego company for less money in Austin, Texas, all for a better quality of life and more autonomy. It's easy to think of freedom as endless vacation or unstructured time. But for me, freedom is about being in control. It's having the power to decide when, where, and how you work, so you're never at the mercy of someone else's plan for your life. ### What High Agency Looks Like High-agency careers are about: - **Earning outside traditional systems**: Contracting, freelancing, or building something of your own. - **Ongoing self-assessment**: Regularly questioning, "Is this still right for me and my family?" - **Courage to pivot**: Not being afraid to leave comfort for growth. - **Building resilience**: Learning to handle lean times and uncertainty as part of the journey, not a sign of failure. ## Ultimately, freedom means having the ability to earn as much, or as little, as you want, so you can build the life you want for yourself and your family. ### Takeaways for New Parents (or Anyone Considering a Leap) - Don't wait for someone to hand you your future, take agency, even if it's scary. - Prioritize long-term fulfillment over short-term comfort. - Remember: tough times aren't a bug, they're a feature of a meaningful, self-directed life. - High agency doesn't guarantee ease, but it does guarantee ownership. For me, real freedom began when I stopped letting life happen to me and started shaping it, risk and all. High-agency careers aren't about escaping responsibility; they're about embracing it on your terms, especially as a parent. The payoff is worth every moment of uncertainty. ### Inside Windsurf's Acquisition Drama: A Startup Saga ID: windsurf-startup-acquisition-drama Published: 2025-07-17 Read time: 7 min read Tags: Startup, Acquisitions, Tech Industry, AI, Mergers Domain: FinTech, AI/ML, Code Generation Role: Technical Lead, Consultant OG Image: /images/blog/windsurf-startup-acquisition-drama.png Excerpt: How Windsurf's founders made billions, Google paid big, and Cognition snagged the leftovers in an unprecedented acquisition saga. Content: ## The Most Unprecedented 72 Hours in Startup History In just three days, the AI coding startup Windsurf found itself at the center of an intense bidding war, leaving tech giants scrambling and industry watchers stunned. This whirlwind story involves billions of dollars, strategic maneuvers, and a shocking final twist that might just redefine the M&A playbook. ## OpenAI's Failed Attempt The drama began on Friday, July 11, when OpenAI’s $3 billion offer to acquire Windsurf expired. OpenAI, makers of ChatGPT, had been eyeing Windsurf's innovative AI coding technology for months. However, internal complications arose—largely due to concerns from OpenAI's biggest investor, Microsoft, who demanded the sharing of intellectual property through their partnership. With the collapse of OpenAI's bid, Windsurf, a promising startup boasting 250 employees and a remarkable $100 million annual recurring revenue, suddenly became available again, setting the stage for a dramatic turn of events. ## Google's $2.4 Billion Power Move Barely 24 hours after OpenAI’s deal fell through, Google swooped in. But this wasn't your standard acquisition. Google dropped $2.4 billion not for the entire company, but specifically to secure Windsurf’s co-founders, CEO Varun Mohan and co-founder Douglas Chen. This unusual strategy—known as reverse acqui-hiring—saw Google licensing Windsurf’s technology without absorbing the company itself. This stunning move meant that Google effectively paid billions just for two key individuals, leaving behind Windsurf’s 250-person team and the company's core business. ## Cognition’s Unexpected Triumph Just when everyone thought the saga couldn't get stranger, Monday, July 14, delivered another twist. Cognition, the startup behind Devin AI (marketed as the world’s first AI software engineer), stepped into the vacuum. They announced the acquisition of the entire remaining Windsurf operation—employees, customers, IP, and products—at a fraction of the price paid by Google. In one swift action, Cognition turned Windsurf's "abandoned" workforce into highly motivated, grateful employees, offering accelerated vesting and full participation in the deal. They also gained complete ownership of Windsurf’s intellectual property and existing customer base, something Google had opted merely to license. **OpenAI** left empty-handed after internal disagreements derailed their deal. Jeff Wang, Windsurf’s interim CEO and former head of business, described it aptly: "The last 72 hours have been the wildest rollercoaster ride of my career." ## A New M&A Playbook? This scenario may have established a new strategic playbook for startup acquisitions. By patiently waiting for bigger competitors to fight it out and burn their resources, a smaller company like Cognition was able to capitalize on the situation, acquiring valuable assets at a steep discount. Perhaps we're witnessing the rise of a new acquisition strategy, one less about brute financial force and more about strategic patience and timing. Could this story become the next tech blockbuster like "The Social Network"? Only time will tell. What's your take, did Cognition pull off the deal of the decade? ### Stop Infantilizing Your Developers with Childish Activities ID: stop-infantilizing-developers Published: 2024-06-17 Read time: 7 min read Tags: Team Building, Leadership, Work Culture, Professionalism, Engineering Management Domain: Full-Stack Development, DevSecOps Role: Technical Lead OG Image: /images/blog/stop-infantilizing-developers.png Excerpt: Treating adult engineers like kids doesn’t build trust, it wastes time and breaks morale. Content: ## The Day I Said "No" I once had a scrum master suggest we all build Legos as a team-building exercise. At the time, I was leading the team and staring down a brutal delivery timeline. I’d been a software engineer for over a decade, a Marine with two combat deployments before that, and a father of four. I just couldn’t stay quiet anymore. We’d already done a team gaming session, something I tolerated even though I stopped playing video games when my first kid was born. I understand breaking routine with an escape room or axe throwing, but Legos? That was my final straw. ## Infantilization vs. Professionalism Building Legos felt infantilizing because, quite frankly, it was. It struck me as a power move: turning seasoned engineers into preschoolers under the guise of "team bonding." Many devs had become conditioned to politely accept these suggestions, but I felt compelled to push back. Not because I’m against play, but because I’m against patronizing adults. For the record, I do play with Legos, with my kids. Because they’re children. But asking experienced professionals to shift from solving complex system architectures to assembling plastic castles in the name of morale? That’s not leadership; that’s theater. ## Saying "No" Can Build Real Trust We didn’t end up building Legos. Instead, we shipped the product on time, meeting our demanding timeline. I’ve stood by that call ever since because trust isn’t built through forced, childish activities. It’s built by treating professionals with genuine respect. It’s crucial to say this clearly: treating adult professionals like children doesn’t build trust; it breaks it. ## Professional Boundaries and Expectations In my teams, I explicitly tell developers not to work evenings or weekends because unrealistic expectations set unhealthy precedents and they aren't able to accurately determine their own velocity if they keep buffering it with non work time all the time. I don’t micromanage their estimates, I care deeply about honesty and achievable goals. I’ve seen toxic workplace cultures firsthand, and often, it starts with wasting people’s time under the banner of misguided "team-building." All most professionals want is to be treated as such, professionals. We’re not a family. We’re more like a sports team, and I expect my team to go home and genuinely spend time with their own families when done. ## Collaboration Means Saying No, Too I’m always open to being proven wrong about processes or approaches. Collaboration isn’t just about saying yes, it’s also about saying no to the wrong things, even when they’re trendy or popular. Pushing back isn’t about being difficult; it’s about maintaining professional dignity and creating a healthy, effective work culture. ## Respect Builds Real Teams Let’s remember: real team-building respects individual autonomy and treats adults like the seasoned, capable professionals they are. Rejecting infantilizing activities isn’t resistance, it’s leadership. And it’s long past time we said this openly. ### Blocking ChatGPT Isn’t Security, It’s Just Employee Distrust ID: blocking-chatgpt-isnt-security Published: 2024-06-18 Read time: 7 min read Tags: Security, Trust, Compliance, Leadership, ChatGPT Domain: DevSecOps, Full-Stack Development Role: Technical Lead, Engineering Manager OG Image: /images/blog/blocking-chatgpt-isnt-security.png Excerpt: Why banning tools like ChatGPT won't fix your security risks, it'll just push them underground. Content: ### An Illusion of Control "We've blocked ChatGPT." Companies proudly announce this as if they've solved their security problem. But here's the uncomfortable truth: they've solved nothing. Employees aren’t suddenly behaving securely just because you blocked a domain. Instead, they're finding creative ways around your restrictions. ### Human Nature Always Finds a Shortcut Have you ever seen a dirt trail slicing through a neatly manicured park? It's there because the sidewalk takes too long, so people make their own path. Humans naturally seek the quickest and easiest route. Work is no different. When faced with cumbersome compliance processes, lengthy firewall approvals, or blanket bans, employees don’t magically fall into line, they find shortcuts. They’ll paste sensitive information into personal ChatGPT accounts on their phones, using unsecured hotel Wi-Fi if that's what it takes. Compliance Alone Isn't the Answer, too many organizations rely solely on compliance slides and firewalls, mistakenly believing these are foolproof measures. But you can't firewall human behavior. You can't control it by simply banning access to a specific tool or website. Employees aren't maliciously seeking risk, they’re just trying to do their jobs as efficiently as possible. If blocking a tool is your primary security strategy, what you're really saying is, "We don't trust you to handle this responsibly." Real security comes from respecting your employees and equipping them with safer defaults. It means gently nudging them when the risk is genuine, rather than imposing blanket prohibitions. Trust your team to make good decisions, and they'll reward you with transparency and cooperation. ### A More Effective Security Approach Instead of banning ChatGPT at the domain level: - Educate employees on safe usage practices. - Provide clear guidelines and safer alternatives. - Regularly communicate about actual risks and best practices. By treating your team like responsible adults, you create an environment of mutual respect and genuine security awareness. Blocking ChatGPT might feel like taking decisive action, but it's just superficial. True security requires understanding human nature, establishing trust, and guiding behavior, not restricting tools. The sooner leaders realize this, the sooner they can genuinely secure their organization's data without undermining employee morale. ### Great Developer Experience Is the Product ID: developer-experience-is-the-product Published: 2024-06-18 Read time: 7 min read Tags: Developer Experience, Software Design, User-Centered Design, Dev Tools, Product Management Domain: Full-Stack Development OG Image: /images/blog/developer-experience-is-the-product.png Excerpt: Great dev tools don’t just work, they respect users’ time, minimize friction, and deliver reliability at every step. Content: Making great development software isn’t just about writing clean code; it’s about creating experiences that respect the user’s time. Whether you’re building a CLI, a cloud IDE, or a framework, every touchpoint matters. ### What It Means to Respect Developer Time Developers are some of the most time-strapped users you’ll find. Building tools for them means: - Minimizing friction at every step, from onboarding to shipping code. - Prioritizing accessibility, your tool should empower beginners and experts alike. - Treating documentation, speed, and reliability as non-negotiable, if users have to guess, wait, or fix what your tool breaks, you’ve lost them. Every moment in the user journey should feel: - Intuitive: Users shouldn’t need a manual to get started. - Fast: Performance issues are experience killers, optimize for speed. - Predictable: A tool should behave the way users expect, every time. Great products meet users where they are. If you force users to adapt to you, expect churn. ### Scale Without Breaking Trust Designing tools that scale means obsessing over details and consistency: - Honor your interface contracts: Don’t make breaking changes to APIs or design without a clear reason. - Keep performance a priority: As usage grows, avoid regressions. Fast today should mean faster tomorrow. - Relentless attention to details: Every error message, every loading spinner, every default matters. ### Minimal Lovable Product, Not Minimal Viable Standing out requires more than feature parity or minor improvements: - Don’t aim to be slightly better, aim to be the tool people love to use. - Ship with a focus on what truly matters for your users, not just what’s easy to build. - Revisit and refine constantly; the bar for developer tools rises every year. ## True developer experience isn’t an afterthought; it is the product. Building great development software is about more than code quality. It’s about being relentlessly user-centric, never breaking trust, and treating experience as your core product. Meet developers where they are, and you’ll win not just users, but advocates. ### Treating Internal Platform as a Startup The biggest mistake platform teams make is assuming that because their users are employees, they are a "captive audience." They are not. If your internal tools are slow or confusing, developers will find shadow paths—using personal scripts, unapproved SaaS tools, or just complaining loudly enough to get a waiver. You have to win their business. #### The "Customer Service" Mindset Treat every internal support ticket as a churn risk. If a developer posts in #dev-help saying "I can't deploy," don't just fix it; ask why the tool let them get into a broken state. Your goal should be 5-star service, because unlike a SaaS company, you can walk over to your customer's desk and see exactly where they are struggling. #### Marketing Matters You cannot just ship a new CLI and expect people to use it. You have to market it. Hold "lunch and learns," create hype videos for new features, and distribute "cheat sheets." If you don't sell your internal tools, nobody will buy them, and your platform will become a ghost town of deprecated initiatives. #### Signs of Adoption You know your Developer Experience is working when you see *voluntary* adoption. When a team from a different department asks, "Hey, can we use your deployment pipeline?" instead of being forced to by the CTO, you have built a product, not just a policy. ### Team Building Is Overrated: Let Real Work Bond Your Engineers ID: real-work-not-retreats-team-bonding Published: 2024-07-13 Read time: 7 min read Tags: Team Building, Engineering Leadership, Developer Culture, Technical Management Domain: Full-Stack Development Role: Technical Lead OG Image: /images/blog/real-work-not-retreats-team-bonding.png Excerpt: Challenging work, not forced activities, is what truly bonds high-performing engineering teams. Content: ### Rethinking the Value of Team Building Team building is a sacred cow in corporate culture, but does it actually deliver what it promises, especially for high-performing engineering teams? I’d argue it’s overrated. Hear me out before you roll your eyes: meaningful, challenging work is the real glue that binds a great team together, not an offsite retreat or a round of office games. ### The Best Teams Bond Through Challenge Engineers don’t need manufactured camaraderie if the problems they’re solving are tough, interesting, and matter to the business. Nothing forges trust like debugging a gnarly issue at 2am with your peers or finally shipping a critical feature after days of hard work. These are the moments where teams build real, lasting bonds. When the work is meaningful, hard, and requires collaboration, you don’t need to force team spirit. You earn it in the trenches, side by side, solving real problems that test your collective skills and endurance. ## The work itself is the team building ### When Team Building Activities Take Over I’ve seen the opposite too: when leaders aren’t technical enough to engage with the real challenges, they try to fill the gap with artificial bonding exercises. Games, icebreakers, and ‘fun’ sessions become substitutes for actual shared achievement. If your engineers would rather skip the scavenger hunt and get back to building, that’s a sign that the work might not be compelling, or the leadership not hands-on enough. ### The Manager’s Role: Be in the Trenches The best engineering managers I’ve worked with have always been able to contribute directly to the work. They debug alongside their teams, write code, and shoulder late-night deployments. Their presence and investment in the core problems is what draws people together. When you lead from the front and the work matters, there’s no need for forced bonding. The respect and relationships come naturally. ### What to Do Instead - Prioritize meaningful, high-impact work over manufactured fun. - Ensure managers are close enough to the technical challenges to support the team. - Use shared success and hardship as the foundation for trust. If you find yourself planning yet another team-building exercise, pause and ask: is the real problem that the work isn’t engaging enough, or that leadership is disconnected? Fix that first, your team will thank you. Great teams are built in the crucible of tough problems, not the comfort of trust falls. Make the work meaningful, get hands-on, and let the natural bonds form where they matter most: in the work itself. ### How A Career DNA Shapes Your Remote vs. Onsite Views ID: remote-vs-onsite-career-dna Published: 2024-07-18 Read time: 7 min read Tags: Remote Work, Leadership, Career Development, Team Management, Workplace Strategy Domain: Full-Stack Development, DevSecOps, Cloud Architecture Role: Technical Lead OG Image: /images/blog/remote-vs-onsite-career-dna.png Excerpt: Your preference for remote or onsite work isn’t about productivity, it’s shaped by your personal career experiences. Content: ## The Real Reason Behind Remote Work Preferences When it comes to remote versus onsite work debates, conversations often revolve around productivity, collaboration, or even office politics. But the real reason goes deeper, it’s fundamentally about how leaders experienced their own career success. If your professional growth came from sitting shoulder-to-shoulder with your coworkers, brainstorming in physical conference rooms, and navigating in-person office dynamics, it’s only natural you’d find remote work unfamiliar or even uncomfortable. On the other hand, if you’ve built your career remotely, like I have for nearly a decade, well before Covid made remote mainstream, then you’ve experienced firsthand the effectiveness of distributed teams. You’ve seen that distance isn’t a barrier to delivering excellent results, collaborating efficiently, and building strong professional bonds across cities, countries, and continents. ## Shaped by Personal Experience Your stance on remote work isn’t simply a matter of personal preference or company culture, it’s encoded in your career DNA. For me, remote work is more than just convenience; it aligns closely with my family life (we homeschool our kids), my core values, and frankly, my professional strengths. Because my entire approach to managing teams evolved remotely on Slack even when I was sitting across from other engineers, it’s become second nature. Conversely, someone whose entire career unfolded in an onsite environment might understandably struggle with a sudden shift to fully remote work. The remote work debate isn’t about one method being universally superior, it’s about recognizing how deeply our past experiences shape our views on what feels effective and comfortable. ## Why your Leaders’ Perspectives Matter Leaders who gained professional traction in traditional offices might hesitate to fully embrace remote setups because it feels fundamentally different from what brought them success. They might worry about productivity dips, team cohesion, or accountability issues, not necessarily because those fears are justified, but because their professional instincts were honed in face-to-face environments. Conversely, leaders who thrived remotely know instinctively how to build trust, set clear expectations, and foster team culture digitally. Their hesitation often lies in returning to physical offices, as it introduces complexities and inefficiencies they’ve actively avoided. ## Finding Common Ground Rather than framing remote vs. onsite work as a battle over productivity or engagement, organizations should acknowledge this fundamental difference in experience. A successful transition, whether toward remote, onsite, or hybrid, requires leaders to recognize their own biases, communicate transparently, and adopt practices that bridge these experiential divides. Organizations that acknowledge this career-DNA perspective will not only navigate workplace transitions more effectively but also empower employees and leaders alike to find arrangements that amplify their strengths rather than force conformity. Ultimately, the remote vs. onsite debate isn’t about one method winning out, it’s about embracing the diversity of thought and career experiences that shape us as professionals. Recognizing this allows us to approach workplace strategies with more strength, flexibility, and effectiveness. ### The AI Wave Feels Like 2007 All Over Again ID: ai-wave-feels-like-2007 Published: 2024-07-18 Read time: 7 min read Tags: AI, Platform Shifts, Mobile Revolution, Business Strategy, Technology Trends Domain: AI/ML, Full-Stack Development Role: Technical Lead OG Image: /images/blog/ai-wave-feels-like-2007.png Excerpt: AI skeptics sound a lot like the mobile skeptics of 2007, yet history shows revolutions never feel inevitable in the moment. Content: ## Looking Back at 2007 In 2007, the iPhone launched. To many, it didn’t feel like the start of a revolution, it felt like a bubble waiting to burst. Critics had plenty of good arguments: - Smartphones were too expensive for mass adoption. - Mobile networks (2G/3G) were too slow to make apps useful. - Server capacity couldn’t possibly keep up with billions of new devices. From that vantage point, the skepticism seemed logical. Most companies responded by trying to bolt mobile features onto their existing products, mobile-friendly websites, stripped-down dashboards, or apps that did less than their desktop counterparts. They saw mobile as a channel, not a platform. ## The Mistakes Most Businesses Made Back then, established players like BlackBerry, Nokia, and Microsoft misread the shift: - BlackBerry thought mobile meant better email. - Nokia focused on hardware specs. - Microsoft tried to cram Windows into a smaller screen. All of them were technically correct. And all of them lost. They adapted. The winners reinvented. ## Who Got It Right The breakout successes of the mobile era didn’t shrink existing products, they built new ones that could only exist in a mobile-first world: - Uber was only possible because GPS, payments, and drivers lived in your pocket. - Instagram didn’t adapt the desktop web; it designed for mobile behavior from the start. - Stripe and Square didn’t digitize old payment systems; they reimagined them for simplicity on mobile. They didn’t add mobile. They were mobile. ## The Same Story, New Characters Fast forward to today: LLM is the new platform shift. And once again, most companies are repeating the same mistakes: - Adding LLM-generated content to broken content strategies. - Automating broken workflows instead of fixing them. - Launching generic “LLM copilots” that no one actually uses. It’s the same pattern: treating LLM's like a channel instead of a platform. ## The Real Question The key isn’t how you’re using, it’s what you’re rebuilding because of it. Just like in 2007, the arguments against LLM today sound convincing: - Models hallucinate. - Compute costs are too high. - Integrations are clunky. But history suggests these constraints will fall away. The winners will be the ones building businesses that only make sense in an LLM-native world, not those patching LLM onto legacy strategies. ## Looking Ahead Five years from now, the companies that stand out won’t just be the ones that adopted LLM. They’ll be the ones that: - Designed products that couldn’t exist without it. - Rebuilt workflows, not just automated them. - Assumed today’s LLM problems would be solved and built for the world after. Because the next Uber of the LLM era is already being built somewhere. And somewhere else, the next BlackBerry is doubling down on features that will soon be irrelevant. History doesn’t repeat, but it definitely rhymes. Revolutions rarely feel inevitable while they’re happening. In 2007, mobile looked like a fad. In 2025, LLM still feels uncertain. But uncertainty is exactly what makes this moment so important. The winners won’t be the ones who wait and see. They’ll be the ones who bet on inevitability before it feels obvious. ### Startups Lead in Adopting New AI Developer Tools ID: startup-vs-enterprise-ai-adoption Published: 2024-07-19 Read time: 7 min read Tags: AI Tools, Cursor, GitHub Copilot, Startups, Enterprise Adoption Stack: TypeScript, Python, AWS Domain: AI/ML, Full-Stack Development, DevSecOps Role: Technical Lead OG Image: /images/blog/startup-vs-enterprise-ai-adoption.png Excerpt: Startups embrace AI tools quickly due to flexible mindsets, while enterprises lag due to procurement constraints. Content: Startups often thrive on agility, adopting new technologies swiftly to gain competitive advantages. Tools like Cursor, Claude Code, and ChatGPT Codex are prime examples, quickly gaining traction in smaller companies due to their flexibility and ease of adoption. Cursor, a two-year-old startup itself, has rapidly emerged as the second most recognized AI coding tool, just behind GitHub Copilot. The driving factor? Its accessibility and frictionless integration. Startups simply want tools that deliver immediate results, sidestepping complicated procurement procedures. Enterprises, by contrast, tend to prefer stability and ease of procurement over raw capability. GitHub Copilot has become the tool of choice not because it's necessarily superior but because it's bundled conveniently into existing GitHub subscriptions. This integration streamlines legal, compliance, and security reviews, which are critical for larger organizations. Procurement-friendly tools are inherently appealing to enterprises, making it less about choosing the "best" tool and more about choosing the most manageable one. ## Speed vs Safety: The Timeless Tech Dilemma This difference between startups and enterprises isn't new, it's a longstanding dynamic within the tech industry: - **Startups** quickly experiment with new tech to accelerate growth and productivity. - **Enterprises** wait until a technology is proven, compliant, and thoroughly vetted by multiple committees. Consequently, startups often act as early adopters, while enterprises become late followers once the risks are mitigated and adoption becomes straightforward. ## The Procurement Factor Procurement isn’t simply red tape; it’s a necessary process for ensuring legal compliance, data security, and operational reliability at scale. Yet, this necessary caution inherently slows down innovation. The streamlined procurement model offered by tools already integrated into widely used platforms like GitHub helps enterprises balance innovation with responsibility. The startup-enterprise divide in technology adoption illustrates broader patterns in innovation cycles. Startups innovate freely with minimal restrictions, leveraging cutting-edge AI tools immediately. Enterprises follow more cautiously, adopting these innovations only after validation and seamless integration become available. Both approaches are essential, creating a balanced tech ecosystem where rapid innovation meets measured, large-scale implementation. ### The End of Stack-Specific Engineers: How AI Changed the Game ID: end-of-stack-specific-engineers-how-ai-changed-the-game Published: 2024-07-20 Read time: 7 min read Tags: AI, Developer Tools, Engineering Culture, Adaptability, Hiring, Software Engineering Stack: Go, JavaScript, Python, Rust, C++ Domain: Full-Stack Development, AI/ML, Code Generation Role: Technical Lead OG Image: /images/blog/end-of-stack-specific-engineers-how-ai-changed-the-game.png Excerpt: AI-driven tools have shattered traditional language silos, empowering developers to rapidly adapt and ship products in new stacks. Content: Two years ago, developers stayed comfortably within their chosen languages. JavaScript engineers stuck to JS frameworks, Python developers rarely ventured into the complexities of Rust, and C++ experts happily avoided the front-end ecosystem. Each specialization lived in isolation, defined clearly by its boundaries. ## Breaking Down Barriers That siloed world is now rapidly fading, thanks entirely to the proliferation of AI-driven developer tools like GitHub Copilot, ChatGPT, and other LLM-powered coding assistants. These tools have drastically lowered the barriers for engineers to confidently explore and adopt new languages. Today, it’s common for a JavaScript dev to seamlessly prototype back-end services in Python, or a Ruby developer to confidently deploy infrastructure automation scripts in Go. ## From Zero to Production Personally, the shift became evident when I moved from never having touched Go to building, testing, and deploying CLI tooling with automated cross-platform builds in under a year. This would have seemed unthinkable just a short while ago. Here’s what made this possible: - Instant context and syntax help provided by AI - Reduced friction in troubleshooting unfamiliar errors - Accelerated learning curves through interactive explanations and code generation The real breakthrough wasn’t mastering every detail of Go’s syntax. It was how quickly AI assistants helped me experiment, debug, and deliver value. With a steady stream of suggestions and explanations, I shifted my focus from learning commands to building features. That momentum kept me exploring new languages and shipping projects that previously felt out of reach. ## Hiring for Adaptability The implications for engineering teams and hiring practices are clear: stack-specific hiring is increasingly outdated. Today’s best engineers aren’t those who’ve memorized syntax or built careers on a single language. Instead, they’re defined by their ability to adapt, learn, and ship quickly, often outside their immediate comfort zone. If your hiring criteria still strictly match exact stack experience, you’re likely overlooking the most adaptive, innovative, and capable talent in the market. ## Embracing the Era of Adaptable Engineering The new era favors engineers who rapidly embrace change and leverage LLM tools to multiply their effectiveness. Companies must realign their expectations, hiring, and training practices to capture the immense value offered by these adaptive developers. The future belongs to the adaptable. ### Stop Teaching Fear of AI in Schools ID: stop-teaching-fear-of-ai Published: 2024-07-22 Read time: 7 min read Tags: AI, Education, Future of Work, Adaptability, Teaching Domain: Education, AI/ML Role: Consultant OG Image: /images/blog/stop-teaching-fear-of-ai.png Excerpt: Banning AI in classrooms isn’t education, it’s fear. Schools should teach adaptability and responsible use, not avoidance. Content: ## Fear Is the Easy Way Out Any teacher or school banning AI outright is just being lazy, it’s the easy way out. Instead of rethinking how they assess students, they throw up a wall and say “no AI.” But banning what you don’t understand isn’t education, it’s fear. ## Smarter Ways to Adapt There are so many creative ways schools could evolve: - Pair a written paper with a short video explaining it. - Shorten essays so students must be sharp and concise. - Add a verbal defense of their work, almost like a mini-podcast. Long form content paired with explanation is far harder to fake than a cut-and-paste essay. But that requires teachers to innovate, and too many would rather repeat the same old system. ## Preparing Kids for the Real World The truth is, kids will need to know how to use AI. Ignoring it just leaves them behind. Schools should be guiding them on how to use it responsibly, whether for study assistance, personal tutoring, or brainstorming support, not scaring them into deleting it off their phones. No one in the real world is going to ask “Did you use AI?” They’ll ask, “Can you get the job done?” If AI helps you do it better and faster, that’s a skill, not a cheat code. ## From Fear to Adaptability We don’t need more bans. We need schools to stop teaching fear and start teaching adaptability. The future of work requires resilience, critical thinking, and the ability to leverage powerful tools responsibly. AI isn’t the problem. Fear is. And education should be the solution. ### Retaining Military Software Talent: Beyond the Vendors ID: retaining-military-software-talent-beyond-the-vendors Published: 2024-05-12 Read time: 7 min read Tags: Software Factories, DoD, Talent Retention, Military Innovation, DevSecOps Domain: Government/Defense, DevSecOps, AI/ML Role: Technical Lead, Architect OG Image: /images/blog/retaining-military-software-talent-beyond-the-vendors.png Excerpt: To sustain innovation, the military must rethink how it retains its top software talent. Content: ## How the Software Factory Era Began The military software factory concept didn't spring up in isolation; it evolved as military leaders saw the successes of agile practices and rapid software development in the private sector. Inspired by newly formed defense companies, the Department of Defense (DoD) launched initiatives like BESPIN, Kessel Run, and others, rapidly reshaping how military software is developed and deployed. Private-sector vendors recognized the immense opportunity in modernizing defense software. Palantir and Anduril's rapid rise underscored how lucrative and impactful this market could be. However, even with robust vendor support, there remain innovators within the military who push boundaries far beyond vendor solutions. Their ingenuity raises an important question: Why didn't this transformation happen sooner? ## Innovation and the In-House Advantage Having personally contributed to DoD mobile applications through BESPIN as a contractor, I’ve seen firsthand how internal innovation can outpace vendor capabilities. The future clearly points toward leveraging generative AI and Large Language Models (LLMs) to foster even greater internal capability. The Space Force's Supra Coders initiative, which whom I have trained many in languages like Flutter and Dart, illustrates the immense potential of training in-house military developers to rapidly innovate without vendor limitations. Yet, there's a critical barrier: leadership fears losing skilled developers to the private sector, a fear that often stifles innovation. The solution isn’t complicated, though it demands a cultural shift. Retention bonuses are helpful but insufficient alone. The DoD needs new ways to accurately recognize and retain the talent it already has. Military promotion and retention systems often overlook quiet performers who deliver critical innovation, favoring instead those who excel at navigating bureaucracy. A specialized retention and talent-recognition unit could be transformative. Imagine a "SOCOM for nerds", a dedicated command explicitly designed to identify, reward, and retain tech talent. By removing talented developers from traditional promotion systems, we eliminate the inherent political biases and fears of repercussions from talent attrition. ## Establishing a Retention-Focused Innovation Hub Creating a standalone unit to retain technical talent would mean: - Clear Talent Recognition: Independent evaluations of technical contributions separate from traditional military career milestones. - Flexible Incentives: Tailored retention bonuses, similar to private-sector equity and compensation structures. - Cultural Shift: Encouraging a culture where staying in uniform is as appealing as lucrative private-sector opportunities. Such an approach would signal to innovators that the military truly values technical prowess and innovation, ultimately accelerating modernization and capability. To maintain an edge, the DoD must realize that technology alone doesn't define innovation, people do. Establishing dedicated retention frameworks separate from the rigid chains of command will empower military software developers, fostering a sustainable culture of innovation and excellence. ### What Makes an Engineer Truly Stand Out? ID: what-makes-an-engineer-stand-out Published: 2024-04-02 Read time: 7 min read Tags: Engineering Culture, Career Advice, Technical Excellence, Persistence, Conscientiousness Domain: Full-Stack Development, DevSecOps, Cloud Architecture Role: Technical Lead OG Image: /images/blog/what-makes-an-engineer-stand-out.png Excerpt: Conscientiousness and persistence set apart engineers who execute from those who merely code. Content: The tech industry often emphasizes impressive internships, elite education, and high Leetcode rankings. While these factors can indicate capability, they don’t necessarily show the true qualities of an exceptional engineer. ## Results Over Resumes I’m far less interested in where you went to school, your FAANG internships, or your coding competition ranks. Saying you’re "passionate about tech" doesn’t hold weight unless your experiences reflect that passion through genuine struggle and achievement. What genuinely captures my attention is whether you’ve built and shipped something, regardless of how modest the product. Shipping means you’ve navigated challenges, dealt with unexpected problems, and ultimately delivered tangible results. It’s about outcomes, not just tools or buzzwords. Great engineers often distinguish themselves by handling tedious, unglamorous tasks without hesitation. They’re the ones willing to dive into legacy code, debug intermittent failures, or meticulously document processes that others avoid. These seemingly mundane tasks form the backbone of successful projects, and those who willingly embrace them demonstrate a depth of commitment and maturity that flashy achievements seldom match. ## The Key Trait Above all, the trait I value most is conscientiousness. Will you stick with a difficult problem, even when solutions don’t emerge easily? Will you persist when issues become frustrating or repetitive? The best engineers I’ve known weren’t flashy. They didn’t necessarily boast perfect credentials. But they possessed grit, dedication, and an unwavering determination to resolve tough challenges. They were builders, grinders, people who saw their work through, no matter how difficult or prolonged. I’ve personally encountered challenges that I first grappled with over a decade ago which I'm still trying to solve to this day. That persistence, continuing to engage with difficult problems, is precisely what separates someone who simply writes code from someone who genuinely executes. In the end, exceptional engineers stand out through conscientiousness and persistence. It’s these qualities, more than any degree or accolade, that truly define someone capable of consistently delivering meaningful results. ### Engineers Should Critique Product Decisions Early ID: engineer-accountability-imbalance Published: 2023-07-14 Read time: 7 min read Tags: Engineering Culture, Product Management, Leadership, Software Development, Team Dynamics Domain: Full-Stack Development, DevSecOps, Cloud Architecture Role: Technical Lead, Engineering Manager OG Image: /images/blog/engineer-accountability-imbalance.png Excerpt: Explore why restricting engineers from critiquing early decisions harms teams and slows projects. Content: A common, yet frequently overlooked, problem within many tech companies isn’t simply poor communication or unclear processes, it’s that software engineers often face constraints when it comes to challenging or critiquing the decisions of product teams. Unlike product managers (PMs) or executives, engineers have their work intensely scrutinized since their output either functions as intended or it doesn’t. This imbalance creates an environment where critical assumptions made early in the project cycle often go unchecked until they’re too late to correct effectively. ## Imbalanced Accountability Product managers typically spend significant time early in a project cycle engaging customers, conducting brainstorming sessions, or aligning with executives. Unfortunately, these sessions frequently occur without engineering representation. The absence of technical insight at this early stage leads to PMs making critical assumptions about feasibility, scope, and timeline, often inaccurately. In many companies, this means engineers receive requirements late in the process, when timelines are already set and expectations cemented. This dynamic forces engineers into reactive mode, scrambling to meet unrealistic deadlines rather than proactively shaping the product from the beginning. ## A Real-World Example Several years ago, I personally witnessed a stark example of this dynamic. A CEO openly admitted withholding critical information about a promised feature that was already six months overdue. He rationalized his secrecy, believing transparency would distract the team from existing tasks. Instead, the development team found themselves forced into crisis mode, hurriedly delivering a product feature under significant pressure and reduced trust. Had the CEO trusted the engineering team enough to involve them early, the expectations could have been managed more effectively, reducing team stress and delivering better outcomes for both the company and its customers. ## The Cost of Late Transparency Hiding key product decisions from engineers is not merely a leadership misstep, it’s a cultural failure. It signals that engineers’ insights into product development are less valued than those of their counterparts, undermining trust and ownership. This environment creates unnecessary stress, friction, and ultimately, subpar products. Teams function most effectively when trust and transparency permeate all levels of decision-making. Engineers must be encouraged and empowered to critique, challenge, and contribute early in the project lifecycle. ## A Balanced Culture To shift this dynamic and foster more effective teams, companies can: - Invite engineers into early product discussions to ensure feasibility and scope are properly assessed. - Promote joint ownership by making product and engineering teams co-responsible for timelines, feasibility, and success. - Create channels for engineers to challenge assumptions, ask questions, and voice concerns openly, without fear of retribution. Achieving better outcomes in software development isn’t solely about refining processes or communication channels, it’s fundamentally about reshaping cultural dynamics. When companies prioritize early transparency, shared accountability, and open critique, engineering teams become empowered contributors rather than mere executors. This cultural shift not only leads to better products but also fosters a healthier, more cohesive team environment. ## Experiences & Case Studies ### Director of Engineering — zCore Group Duration: Jan 2023 - Mar 2026 Description: Harden DevSecOps for a USAF TSC program on Platform One, GitLab CI across 8 Go micro-services, Embedded LLM workflows (prompt libraries, guardrails, auto-test stubs) that doubled developer throughput and increasing test coverage 30%. Roles: Director, Team Lead Case Studies: - Guardian One Mobile App Content: Led the complete development and deployment of Guardian One, the official USSF mobile app, from concept to app stores in just 120 days. The app now serves 3K+ monthly active users with a 4.8-star rating and has received praise from USSF leadership. Achievements: Product-managed & shipped Guardian One (iOS/Android) in 120 days; now 3K+ MAU and 4.8★, Secured CTF in 41 days and praise from USSF leadership Stack: Flutter, Dart, TypeScript Domain: Mobile Development, Government/Defense - VA ML Data-Thon & Supply Chain Forecasting Content: Led team to 1st place at 2023 VA FSC ML Data-Thon. Built Azure ML + Databricks model improving VA supply-chain forecast accuracy by 22%. Achievements: Led team to 1st place at 2023 VA FSC ML Data-Thon, Azure ML + Databricks model improving VA supply-chain forecast accuracy 22% Stack: Python, Azure ML, Databricks Domain: AI/ML, Government/Defense - DevSecOps & LLMOps Platform Content: Hardened DevSecOps for USAF TSC program on Platform One with GitLab CI across 8 Go micro-services. Embedded LLM workflows (prompt libraries, guardrails, auto-test stubs) that doubled developer throughput and increased test coverage 30%. Stack: Go, GitLab CI, TypeScript Domain: DevSecOps, LLMOps, Government/Defense ### Engineering Manager — LibLab Duration: Aug 2022 - Dec 2022 Description: Authored a Terraform Provider Generator, OpenAPI → Go + auto-tests, cutting customer coding effort 75% and publishing automatically to the Terraform Registry. Roles: Engineering Manager, Team Lead Case Studies: - Terraform Provider Generator Content: Pioneered 'code-that-writes-code' abstractions from OpenAPI standards to generate clean, linted, test-covered SDKs across multiple languages, dramatically reducing customer implementation time. Achievements: Launched TypeScript SDK generator (Java, Python, TS) with CI-driven stages, Eliminated 90% style defects pre-review, Automated publishing to Terraform Registry, Reduced customer coding effort by 75% Stack: Go, TypeScript, Java, Python, Terraform, NextJS Domain: DevSecOps, SDK Development, Code Generation ### Senior Software Engineer — LibLab Duration: May 2022 - Aug 2022 Description: Pioneered 'code-that-writes-code' minimum lovable version code-gen abstractions from OpenAPI, Swagger, Postman and GraphQL standards to generate clean, linted, test-covered TypeScript, Python and Java SDKs. Roles: Individual Contributor, Architect Case Studies: - Multi-Language SDK Generator Content: Developed revolutionary code generation platform that automatically creates production-ready SDKs from API specifications, transforming how developers integrate with external services. Achievements: Created SDK generators for TypeScript, Python, and Java, Implemented OpenAPI, Swagger, Postman, and GraphQL standards support, Generated fully functional SDKs following language preferences, Established automated testing and linting for generated code Stack: TypeScript, Java, Python, OpenAPI, GraphQL Domain: SDK Development, Code Generation, Full-Stack Development ### Fractional CTO & Advisor — The Nifty, JPTC Energy Duration: Jan 2018 - Jun 2022 Description: Built TheNifty.com a real-time NFT price-trend dashboard with Hotwire; gated premium content behind NFT-based access control. Roles: CTO, Consultant Case Studies: - TheNifty NFT Analytics Content: Built real-time NFT analytics platform with advanced on-chain data enrichment, providing traders with accurate market signals and premium insights gated by NFT ownership. Achievements: Shipped Discord bots that detect mint/buy/sell events, Improved trading alerts accuracy by 40% Stack: Ruby on Rails, TypeScript, Hotwire, PostgreSQL Domain: FinTech, Full-Stack Development - JPTC Energy Trading Platform Content: Enhanced JPTC Energy Django trading platform and deep-dived into power-market data pipelines. Achievements: Enhanced JPTC Energy Django trading platform, Deep-dived into power-market data pipelines Stack: Django, Python, PostgreSQL Domain: FinTech, Data Engineering ### Engineering Technical Lead → Principal Investigator — Oddball Duration: Oct 2018 - Nov 2021 Description: Won $1.3M SBIR (Kinderspot D2P2) and $1.5M (BIZINT Ph 1–2); built cross-functional teams and delivered both apps to DoD stores. Roles: Technical Lead, Principal Investigator Case Studies: - SBIR Proposals & Mobile Solutions Content: Led successful SBIR proposals totaling $2.8M, building innovative mobile solutions for DoD including BIZINT (business intelligence mapping) and Kinderspot (military family daycare sharing). Achievements: Won $1.3M SBIR (Kinderspot D2P2) and $1.5M (BIZINT Ph 1–2), Delivered apps to DoD app stores, Built cross-functional teams for mobile development Stack: Flutter, Dart, Node.js, AWS Domain: Mobile Development, Government/Defense - VA.gov Benefits & Appeals APIs Content: Oversaw development of Benefits & Appeals APIs, engineered the Benefits Intake API (handling ~40K monthly claims), created the Benefit Claims API powering disability submissions, and centralized 500+ forms with update detection. Achievements: Engineered developer.va.gov Benefits Intake API (40K claims/mo), Created Benefit Claims API powering VA Form 21-526EZ submissions (disability and POA) still in use on va.gov, Consolidated 500+ forms into one service with MD5-based change detection and notifications, Oversaw Benefits & Appeals APIs on VA.gov Rails backend for developer.va.gov platform Stack: Ruby on Rails, Node.js, AWS, Kong API Gateway Domain: Government/Defense, Full-Stack Development, Platform/API Engineering - Connected Apps & Health APIs Content: Implemented Connected Apps for Health APIs (tested in production with Apple Health integrations), advised SEO/structured data adoption, and built direct BGS integrations expanding API access ~10x. Achievements: Helped migrate vets.gov → va.gov and integrated ID.me SSO flows (2018–2019), Implemented and tested VA Health APIs via Connected Apps, including real-world production testing enabling Apple Health integration, Provided SEO/structured data guidance (schema.org, Open Graph) to improve VA.gov search result granularity, Built direct BGS integrations and SDKs bypassing EVSS, unlocking ~10x more accessible APIs for VA.gov and downstream consumers, First ML contention-classification prototype at the VA Stack: Ruby on Rails, Node.js, AWS Domain: Government/Defense, AI/ML, Full-Stack Development, Platform/API Engineering ### Head of Engineering & Data — RealSavvy Duration: Aug 2017 - Aug 2018 Description: Unified Rails + Ember + React stacks into a single UX; Real Estate MLS ingestion throughput +60% and duplicate listings −90%. Led SEO overhaul to eliminate duplicate-content penalties across hundreds of white-labeled agent/broker sites. Roles: Head of Engineering, Team Lead Case Studies: - SEO Optimization for White-Label Sites Content: Created a 'beautification' algorithm to randomize titles and structured metadata (schema.org/OG/Twitter), migrated dynamic sitemaps to AWS S3, enabled iframe indexing with canonical linking, and added prioritized customer sitemaps so agent-owned properties indexed first. Result: platform-wide SEO recovery in ~2–3 months, consistent double-digit organic growth, and stable rankings across 400+ sites. Achievements: Devised proprietary SEO 'beautification' algorithm (randomized titles + structured metadata) to avoid duplicate-content penalties, Implemented schema.org, Open Graph, and Twitter Card randomization for unique per-site metadata at scale, Moved dynamic sitemap generation to AWS S3 for faster crawling and lower app load, Enabled SEO for iframe content using link-rel canonical to attribute content to parent pages, Introduced prioritized, customer-specific sitemaps to ensure agent-owned properties were indexed first, Achieved SEO recovery across customer sites within ~2–3 months, Scaled SEO solution to 400+ agent/broker sites with consistent double-digit organic traffic lifts Stack: Ruby on Rails, AWS S3, Schema.org, Open Graph, Twitter Cards Domain: Real Estate, Full-Stack Development - Data Pipeline & IDX APIs Content: Built a Rails ETL framework with Sidekiq background jobs to ingest/normalize data from 50+ MLS providers via RETS, deduplicated listings (~90% reduction), and indexed into Elasticsearch for sub-second queries. This backbone produced fast, reliable IDX APIs that powered the unified Rails+Ember+React platform. Achievements: Improved MLS ingestion throughput by ~60% via Rails ETL + Sidekiq pipeline, Reduced duplicate listings by ~90% with deterministic + heuristic de-duplication, Standardized ingestion across 50+ MLS providers using RETS, normalizing to a unified IDX schema, Delivered sub-second property search using Elasticsearch with fast, near-real-time indexing, Unified Rails + Ember + React into a cohesive platform UX and deployment model Stack: Ruby on Rails, Ember.js, React, React Native, PostgreSQL, Elasticsearch, Sidekiq Domain: Real Estate, Data Engineering, Full-Stack Development ### Chief Technology Officer — LocalStack Duration: Aug 2016 - Oct 2017 Description: Migrated on-prem to AWS and used Spot instances for web scraping; infra OpEx −50% and page-load time −45%. Roles: CTO, Architect Case Studies: - Hijack Cross-Network Audience Platform Content: Created Hijack, a cross-network interactions into high-intent, hyper-local audiences for Facebook Ads. We mapped 18–20M U.S. businesses to verified social profiles, stitched people→posts→businesses across FB/IG/Twitter(X)/GooglePlus, and prioritized action-verified signals (comments, mentions, posts) over passive likes. Because our cohorts originated outside Facebook's native graph, clients could run their own FB interest targeting in parallel without cannibalization. Achievements: Productized Hijack (cross-network audience platform) and lifted a home-staging client's CTR from ~0.05% to ~3.2%, Independent stylist campaign: ~13,750 local actives reached in 1 week, ~40 clicks, 22 site visits, 2 wedding inquiries on ~$70 spend (7–10× potential ROAS on a single booking), Regional theater: sold out a month's show on ~$1,000 by targeting adjacent local categories (restaurants, hotels, venues), Validated 5–10 mile geo radius as the cost/conv. sweet spot; ran native FB targeting in parallel with minimal overlap Stack: Ruby on Rails, PostgreSQL Domain: Data Engineering, FinTech - AWS Migration & Infrastructure Optimization Content: Led the on-prem→AWS migration, introduced Spot-fleet scraping, and built a weekly refresh pipeline that scored audiences on geography, recency, intensity, and semantics (e.g., 'pizzeria • downtown San Diego'). Governance covered platform ToS mapping, data provenance, and privacy minimization—practices that keep the approach viable even under modern privacy constraints. Achievements: Reduced infrastructure OpEx by 50%, Decreased page-load time by 45%, Implemented AWS Spot instances for cost optimization, Led complete cloud migration strategy Stack: AWS, Ruby on Rails, PostgreSQL Domain: Cloud Architecture, Data Engineering, Full-Stack Development ### Senior Data Engineer — LocalStack Duration: Sep 2014 - Aug 2016 Description: Built national ad-arbitrage engine and Social API ingesting 5M businesses daily; deployed sentiment scoring that lifted ad ROAS 25%. Roles: Individual Contributor, Data Engineer Case Studies: - Data Spine for LocalStack Content: Built the data spine for LocalStack: handle discovery and verification across networks, ingestion of recent posts/comments/mentions (incl. basic image/video metadata), and probabilistic/deterministic identity stitching. A scoring layer ranked users by proximity, freshness, engagement intensity, and semantic match, then exported cohorts into Facebook Ads. This outside-graph activation let clients keep native FB interest campaigns running in parallel. The system emphasized recency and locality, refreshing cohorts weekly to maintain intent quality and measurable lift. Achievements: Processed 5M businesses daily through Social API, Implemented sentiment scoring increasing ad ROAS by 25%, Built scalable data ingestion pipelines, Optimized PostgreSQL performance with PGBouncer, Designed entity-resolution and multi-network ingestion for Hijack (people/post/business stitching) enabling outside-graph audience exports to Facebook Ads, Early campaigns achieved ~64× CTR lift in home-staging (0.05% → ~3.2%) and consistent small-budget ROAS in personal services Stack: Ruby on Rails, PostgreSQL, PGBouncer, AWS, React Domain: Data Engineering, FinTech, Full-Stack Development ### Mid Level Contract Software Engineer — SPAWAR (NAVWAR) Duration: Jun 2013 - Aug 2014 Description: Delivered a Rails app for USMC logistics with near-100% BDD coverage; stood up VMWare + Jenkins DevSecOps lab adopted across SSC Pacific. Roles: Individual Contributor, DevOps Engineer Case Studies: - USMC Logistics Application Content: Built mission-critical USMC logistics application with comprehensive BDD testing and established DevSecOps practices that became standard across the organization. Achievements: Achieved near-100% BDD test coverage, Established DevSecOps lab with VMWare + Jenkins, Solution adopted across SSC Pacific, Delivered critical USMC logistics application Stack: Ruby on Rails, Jenkins, Cucumber, VMWare Domain: Government/Defense, DevSecOps, Full-Stack Development ### Junior Ruby & Perl Software Engineer — Gap Intelligence Duration: Jan 2012 - May 2013 Description: Maintained high-scale Perl and Ruby web crawler on AWS with rotating proxies; boosted data freshness SLA from 48h to 4h. Roles: Individual Contributor Case Studies: - High-Scale Web Crawler Infrastructure Content: Engineering work on a sophisticated web crawling system built with Ruby on Rails and Perl, designed to collect and process e-commerce pricing data at scale. The system featured automated AWS instance management, rotating proxy networks for anti-detection, and complex data processing pipelines that fed multiple Rails interfaces. The architecture supported continuous data collection from numerous e-commerce sources while maintaining high reliability and data freshness standards. Achievements: Improved data freshness SLA from 48h to 4h (92% improvement), Built and maintained high-scale web crawler using Perl and Ruby, Implemented automated AWS instance scaling and proxy rotation, Processed e-commerce data through complex Rails interfaces, Managed multi-source data aggregation and quality assurance Stack: Ruby on Rails, Perl, AWS Domain: E-Commerce, Data Engineering ### Personnel Manager & Logistical Sergeant — United States Marine Corps Duration: Sep 2001 - Mar 2009 Description: Managed 120+ Marines' admin/logistics; led maintenance-data software initiative referenced in III MEF readiness briefs. Roles: Team Lead, Individual Contributor Case Studies: - Maintenance Data Software Initiative Content: Led critical maintenance data software initiative that was referenced in III MEF readiness briefs, while managing logistics for 120+ Marines during combat deployments in Iraq. Achievements: Managed 120+ Marines administration and logistics, Led maintenance-data software initiative, Deployed in Al Anbar (2005 and 2006 Surge), Served aboard USS Bonhomme Richard for tsunami relief Stack: Military Systems, Logistics Software Domain: Military Leadership, Logistics, Government/Defense