<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>career — jd:/dev/blog</title><description>Posts tagged &quot;career&quot; on jd:/dev/blog.</description><link>https://julien.danjou.info/</link><item><title>How to Be a Great Software Engineer in 2026</title><link>https://julien.danjou.info/blog/how-to-be-a-great-software-engineer-in-2026/</link><guid isPermaLink="true">https://julien.danjou.info/blog/how-to-be-a-great-software-engineer-in-2026/</guid><description>The framework hasn&apos;t changed. The weight of each skill has.</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/images/blog/great-engineer-2026.webp&quot; alt=&quot;An engineer at a desk reviewing multiple floating code panels&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Eighteen months ago, I wrote &lt;a href=&quot;https://julien.danjou.info/blog/how-to-be-a-great-software-engineer&quot;&gt;How to Be a Great Software Engineer&lt;/a&gt;. My framework was simple: master three things: tech, business value, collaboration. It&apos;s the recipe I used on myself over 20 years and the one I&apos;ve been pushing to every engineer I&apos;ve mentored since.&lt;/p&gt;
&lt;p&gt;Since then, &lt;a href=&quot;https://julien.danjou.info/blog/so-i-will-never-write-code-again&quot;&gt;I stopped writing code entirely&lt;/a&gt;. And then I went back to shipping it. Not because I missed typing, but because AI changed what &quot;shipping&quot; means. I&apos;m a CEO who merges ten PRs a day, none of them written by hand. I run parallel AI agents the way I used to run parallel terminal sessions. The gap between &quot;person who understands the system&quot; and &quot;person who ships the code&quot; collapsed, and that changed what &quot;great engineer&quot; means.&lt;/p&gt;
&lt;p&gt;The three aspects still hold. But the weight shifted.&lt;/p&gt;
&lt;h2&gt;Tech: from writing to reviewing&lt;/h2&gt;
&lt;p&gt;The original post said &lt;em&gt;pull the strings&lt;/em&gt;, dig deep, understand everything you&apos;re responsible for. That hasn&apos;t changed. What changed is how you use that skill.&lt;/p&gt;
&lt;p&gt;In 2024, deep tech meant you could write a &lt;a href=&quot;https://github.com/emacs-mirror/emacs/blob/master/lisp/color.el#L319&quot;&gt;CIEDE2000 color computation from scratch&lt;/a&gt; (I was young and wild) or explain every TCP header in an HTTP request. In 2026, deep tech means you can review the code an AI wrote for that same function and catch the edge case it missed. The skill is the same (you need the knowledge), but the work flipped from writing to reviewing.&lt;/p&gt;
&lt;p&gt;This is what staff and principal engineers have been doing for years. They stopped writing most of the code a long time ago. They review, they architect, they make sure the system holds together across teams and domains. AI didn&apos;t invent this role. It made it the default for everyone.&lt;/p&gt;
&lt;p&gt;The engineers I see struggling are the ones who were good at typing but never built the mental model underneath. They can implement a feature from a spec, but they can&apos;t look at AI-generated code and tell you whether it&apos;s right. That requires understanding the system, not just the syntax. No amount of prompting skill makes up for missing fundamentals.&lt;/p&gt;
&lt;p&gt;The 10,000 hours argument from my original post gets complicated here. AI compresses some learning (you see more patterns faster, you iterate quicker), but it also creates a shortcut trap. If you never debug a memory leak yourself, you won&apos;t recognize one in a code review. &lt;a href=&quot;https://julien.danjou.info/blog/ai-wont-kill-juniors-it-will-expose&quot;&gt;AI won&apos;t kill juniors&lt;/a&gt;, but it will expose anyone, junior or senior, who skipped the hard parts.&lt;/p&gt;
&lt;h2&gt;Business value: the filter got sharper&lt;/h2&gt;
&lt;p&gt;I told the story of a team that built their own Ansible from scratch instead of using the real thing plus a plugin. That anecdote is worse in 2026: those engineers could now vibe-code their custom tool in a weekend and still be wasting the company&apos;s time.&lt;/p&gt;
&lt;p&gt;AI made the &quot;how&quot; cheap. At Mergify, our output per engineer almost doubled in two years. That means the difference is entirely in the &quot;what.&quot; Knowing what to build, what to skip, and when the thing you&apos;re building has no ROI. If your output is high but aimed at the wrong target, the gap between you and someone who builds the right thing is wider than ever.&lt;/p&gt;
&lt;p&gt;Waste also shows up faster. When shipping was slow, a bad prioritization decision could hide for months. Now you build, ship, and get user feedback in the same week. Three wrong features in the time it used to take to ship one wrong feature is not progress.&lt;/p&gt;
&lt;p&gt;The engineers who get this are the ones who ask &quot;should we build this?&quot; before &quot;how do we build this?&quot; That was always the right instinct. Now it&apos;s the only one that matters.&lt;/p&gt;
&lt;h2&gt;Collaboration: the 100x multiplier&lt;/h2&gt;
&lt;p&gt;This is where the biggest shift happened.&lt;/p&gt;
&lt;p&gt;My original post quoted: &quot;If you want to go fast, go alone. If you want to go far, go together.&quot; I was talking about teammates. In 2026, &quot;together&quot; includes AI agents.&lt;/p&gt;
&lt;p&gt;Managing AI agents is a communication skill. You have to write clear briefs. You have to decompose problems into pieces an agent can execute. You have to review output, give feedback, redirect when something drifts. &lt;a href=&quot;https://julien.danjou.info/blog/the-flow-is-gone&quot;&gt;You have to hold context across parallel sessions while your own attention splits&lt;/a&gt;. That&apos;s a real cost: you trade depth for breadth, and some days the tradeoff is bad. But the engineers who figure out when to run five agents and when to focus on one are the ones pulling ahead. That&apos;s not a prompting trick. That&apos;s the same skill set you need to lead a team of humans.&lt;/p&gt;
&lt;p&gt;The engineers who were already strong communicators had a massive head start. Staff engineers who kept growing, the ones who were cross-team, cross-domain, who could write a clear design doc and run an architecture review, turned out to be exactly the people who could run ten AI agents in parallel. Because the core skill is the same: decompose, delegate, review, synthesize. (The ones who &lt;a href=&quot;https://julien.danjou.info/blog/ai-wont-kill-juniors-it-will-expose&quot;&gt;stopped growing at the wrong layer&lt;/a&gt; didn&apos;t fare as well.)&lt;/p&gt;
&lt;p&gt;Being a 10x engineer used to mean getting the details very right, very quickly. Being a 100x engineer means doing that across ten agents. Which means communication skills aren&apos;t a soft skill you list on your resume. They&apos;re the actual multiplier.&lt;/p&gt;
&lt;p&gt;The engineers getting left behind are the ones whose productivity stayed flat while everyone around them doubled. Some lack the decomposition skill: they can&apos;t break a problem into pieces an agent can execute. Others resist the workflow entirely. That resistance isn&apos;t always wrong (I &lt;a href=&quot;https://julien.danjou.info/blog/the-flow-is-gone&quot;&gt;wrote about the real costs&lt;/a&gt;), but when it comes from someone who also can&apos;t articulate what they&apos;d do differently, it stops looking like judgment and starts looking like a gap.&lt;/p&gt;
&lt;h2&gt;The new baseline&lt;/h2&gt;
&lt;p&gt;Two years ago, I framed &quot;great engineer&quot; as the intersection of tech, business, and collaboration, with tech as the entry bar. Today, AI gave everyone the output floor for free. Any engineer can produce working code. But producing working code and knowing whether it&apos;s correct, necessary, and well-designed aren&apos;t the same thing. The judgment floor is still earned.&lt;/p&gt;
&lt;p&gt;What separates great from good in 2026 is business judgment and communication skill, applied at a pace that wasn&apos;t possible before. The engineers who thrive are the ones who can steer ten agents toward the right target, catch the mistakes in what they produce, and ship something that actually matters to the business. Every day.&lt;/p&gt;
&lt;p&gt;The three aspects haven&apos;t changed. But you used to be able to hide a weak one behind strong technical output. AI took that cover away.&lt;/p&gt;
</content:encoded><category>ai</category><category>career</category><category>engineering</category></item><item><title>The Flow Is Gone</title><link>https://julien.danjou.info/blog/the-flow-is-gone/</link><guid isPermaLink="true">https://julien.danjou.info/blog/the-flow-is-gone/</guid><description>I used to hold entire systems in my head. Now I hold seven terminals. The trade was worth it, but something real got lost.</description><pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/images/blog/the-flow-is-gone/flow.webp&quot; alt=&quot;Illustration of a developer losing flow state&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I have seven Claude Code terminals open right now. Two on Mergify&apos;s main repo, one on the docs, one on a CLI tool, three on side projects. Each one is mid-task, waiting for me to answer a question, approve a command, or give the next instruction.&lt;/p&gt;
&lt;p&gt;Nobody forced me to work this way. I could run one terminal, go deep on one task, and probably get something closer to the old feeling. But the leverage of running seven in parallel is too high to ignore. So I chose throughput over depth, and I keep choosing it every morning.&lt;/p&gt;
&lt;p&gt;This is what that choice costs.&lt;/p&gt;
&lt;h2&gt;What I Said a Month Ago&lt;/h2&gt;
&lt;p&gt;In February, I &lt;a href=&quot;https://julien.danjou.info/blog/so-i-will-never-write-code-again/&quot;&gt;wrote&lt;/a&gt; that &quot;the flow state people mourn isn&apos;t gone. It&apos;s just moving. [...] The flow will come back. It&apos;ll just be at a different altitude.&quot;&lt;/p&gt;
&lt;p&gt;I was wrong.&lt;/p&gt;
&lt;p&gt;A month of working this way changed my mind. The flow didn&apos;t migrate to a higher altitude. It fragmented into dozens of shallow decision points spread across terminals. Briefing, reviewing, approving, redirecting. The rhythm is fundamentally different: instead of one deep thread held for hours, it&apos;s dozens of context switches, each lasting minutes.&lt;/p&gt;
&lt;p&gt;The output is enormous. I &lt;a href=&quot;https://julien.danjou.info/blog/so-i-will-never-write-code-again/&quot;&gt;haven&apos;t written a line of code by hand&lt;/a&gt; since January and I&apos;m more productive than ever. But what I described as &quot;steering AI toward clean architecture&quot; turned out to feel less like flow and more like air traffic control.&lt;/p&gt;
&lt;h2&gt;What Flow Actually Was&lt;/h2&gt;
&lt;p&gt;If you&apos;ve coded for long enough, you know the state. Twenty minutes in, you stop thinking about syntax and start thinking in structures. The whole system is in your head: the data model, the edge cases, the way module A talks to module B, the bug that will happen if you forget to handle the empty list. You&apos;re not reading code, you&apos;re &lt;em&gt;seeing&lt;/em&gt; it.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/images/blog/the-flow-is-gone/interrupt-programmer.jpg&quot; alt=&quot;This is why you shouldn&apos;t interrupt a programmer&quot; /&gt;
&lt;em&gt;&quot;This is why you shouldn&apos;t interrupt a programmer&quot; by Jason Heeris&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;That&apos;s flow. Deep immersion, total absorption, time disappearing. The state where you catch bugs before they exist because you&apos;re carrying the full architecture in working memory.&lt;/p&gt;
&lt;p&gt;I spent twenty years in that state. It&apos;s where the best code came from. Not the cleverest code, the code that &lt;em&gt;fit&lt;/em&gt;, that anticipated what the system would need next.&lt;/p&gt;
&lt;h2&gt;The Fuzzy Mental Model&lt;/h2&gt;
&lt;p&gt;Now I context-switch. Constantly. Terminal one needs a decision about error handling. Terminal three just finished a feature and wants me to review the diff. Terminal five hit a permission prompt. Terminal seven is waiting for a brief on the next task.&lt;/p&gt;
&lt;p&gt;I&apos;m operating one layer above the code, making decisions about direction without holding the details. That works when the decisions are small. It breaks when they&apos;re not.&lt;/p&gt;
&lt;p&gt;Last August, I had Copilot &lt;a href=&quot;https://julien.danjou.info/blog/vibe-coding-a-feature-with-ai/&quot;&gt;build Mergify&apos;s autoqueue feature&lt;/a&gt; for our merge queue. Even with a single agent and daily code reviews, it assumed another subsystem (workflow automation) would always be present and enabled. That assumption was invisible in the diff. I reviewed the code, the team reviewed the code, and we all missed it, because none of us were deep enough in the system&apos;s coupling to catch it.&lt;/p&gt;
&lt;p&gt;The bug shipped to production. Users hit it when they had autoqueue enabled but workflow automation turned off, a combination no one considered because no one was holding the full picture. We fixed it, but not before real users were affected. That was with one agent. Now multiply by seven.&lt;/p&gt;
&lt;p&gt;That&apos;s the cost of the fuzzy mental model. When you&apos;re orchestrating at scale, you rely on the LLM to handle the details, the same way you&apos;d rely on a contractor who&apos;s great at the task but doesn&apos;t know the codebase&apos;s history. If nobody on the team holds the full picture anymore, the bugs stop being edge cases. We haven&apos;t hit that wall yet at Mergify, but I can see the trajectory.&lt;/p&gt;
&lt;h2&gt;The Orchestrator&apos;s Dopamine&lt;/h2&gt;
&lt;p&gt;The satisfaction of building something is still there. I still feel like &lt;em&gt;I&lt;/em&gt; built it. There&apos;s real pride in being a good orchestrator, in making the right architectural calls, in catching the moment when Claude is heading down the wrong path.&lt;/p&gt;
&lt;p&gt;What&apos;s different is where the dopamine comes from. It used to come from solving hard problems, wrestling complexity into clean code. Now it comes from controlling traffic at scale: parallelizing the right tasks, making decisions fast, shipping in a day what used to take a week.&lt;/p&gt;
&lt;p&gt;There&apos;s also something new: a feeling of raw power. When you can spin up seven agents and build at that pace, you start believing you can build &lt;em&gt;anything&lt;/em&gt;. That&apos;s why you see developers shipping new projects every day on X. Creation got cheap. (Maintenance &lt;a href=&quot;https://julien.danjou.info/blog/open-source-is-getting-used-to-death/&quot;&gt;didn&apos;t&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;But the deep satisfaction of &lt;em&gt;thinking through&lt;/em&gt; a hard problem, turning it over in your head until the shape of the solution reveals itself, that&apos;s fading. Not because I chose to let it go, but because why would I? Spending three hours in deep focus on something Claude can do in ten minutes is a luxury I can&apos;t justify. Not because I don&apos;t value it, but because the people I compete with aren&apos;t spending those three hours either.&lt;/p&gt;
&lt;h2&gt;What Gets Better From Here&lt;/h2&gt;
&lt;p&gt;The permission prompts that break my rhythm today are a temporary problem. Models get faster, sandboxing gets smarter, trust boundaries expand. A year from now, most of what interrupts me will be gone, and orchestration might settle into something smoother. Not flow, but a rhythm of its own.&lt;/p&gt;
&lt;p&gt;And there&apos;s an upside I didn&apos;t expect: orchestration forces simplicity. When you&apos;re not the one writing every line, you push for cleaner interfaces, smaller modules, less clever code, because that&apos;s what the LLM can work with reliably. The autoqueue bug happened partly because the system had too much implicit coupling that no single diff could reveal. Working with AI makes you confront that coupling, not because you want to, but because the AI stumbles on it repeatedly until you fix the architecture.&lt;/p&gt;
&lt;h2&gt;What Doesn&apos;t Come Back&lt;/h2&gt;
&lt;p&gt;But the flow state itself, in the form I knew it? Gone.&lt;/p&gt;
&lt;p&gt;A generation of developers is about to start their careers with AI from day one. They&apos;ll be natural orchestrators. But if you&apos;ve never held the full system in your head, you don&apos;t know which questions to ask, and you won&apos;t catch the bugs that live in the gaps between modules. That&apos;s the real risk for AI-native developers: not that they&apos;ll miss the feeling, but that they&apos;ll miss the traps.&lt;/p&gt;
&lt;p&gt;I&apos;m not sure they&apos;ll see it that way. But I do. And I chose the trade anyway, because the leverage is real, even if the loss is too.&lt;/p&gt;
</content:encoded><category>ai</category><category>engineering</category><category>career</category></item><item><title>42 Lessons at 42</title><link>https://julien.danjou.info/blog/42-lessons-at-42/</link><guid isPermaLink="true">https://julien.danjou.info/blog/42-lessons-at-42/</guid><description>Reflections on building, leading, learning, and staying sane along the way.</description><pubDate>Fri, 24 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Turning 42 felt like a good time to pause and reflect.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/images/blog/8e725e25-cab4-4bc3-a763-0605db15e157_1356x837.webp&quot; alt=&quot;Illustration of 42 lessons learned after 42 years of life&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Not on milestones or ARR charts. But on what actually matters after two decades of building, shipping, leading, and living.&lt;/p&gt;
&lt;p&gt;So if 42 is the answer to everything, here’s what I’ve learned so far 👇&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;🧍‍♂️ Life, growth &amp;amp; happiness&lt;/strong&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;The definition of happiness changes with age. And that’s okay.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The more you learn, the more you realize how little you know.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Curiosity is infinite; boredom is optional.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You can’t optimize life like you optimize code.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you chase success, it runs faster. If you enjoy the run, it slows down.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Peace beats growth. Every time.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wealth is freedom, not Ferraris.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Desire is a contract to be unhappy until you get what you want. Cancel it often.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run more. Read more. Scroll less.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sleep is the most underrated productivity hack on Earth.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;&lt;strong&gt;💼 Building, leading &amp;amp; learning&lt;/strong&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Startups are people, not ideas.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Leading by example is the hardest thing you’ll ever do.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Leadership is 80% conversations you didn’t want to have.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hire slow. Fire fast. Then sleep well.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Focus is a superpower. Protect it like oxygen.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The first job of a leader is clarity. The second is repetition.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Nobody cares how much you know; they care how you make them feel.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Feedback given late is just resentment with a bow on it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The most complex skill for a CEO to learn is knowing when to remain silent.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You can’t delegate judgment.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;&lt;strong&gt;⚙️ Building products &amp;amp; companies&lt;/strong&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Quality compounds like interest. So does mediocrity. (&lt;a href=&quot;https://julien.danjou.info/blog/why-we-still-care-about-quality&quot;&gt;Why we still care about quality&lt;/a&gt;.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Success is rarely a pivot; it’s iteration with taste.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Great engineers fix root causes. Average ones fix symptoms.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The perfect product doesn’t exist: the one you can evolve does.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Simplicity scales. Complexity invoices.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Don’t chase vanity metrics: chase user trust.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Code reviews are easy. People reviews aren’t.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Build systems, not heroics.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The best feature is one you can delete later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tech debt is fine. Moral debt isn’t.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;&lt;strong&gt;🧩 Mindset &amp;amp; philosophy&lt;/strong&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;The only person you need to impress is your future self.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Gratitude is the antidote to burnout.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Meditation isn’t for everyone. Long runs count.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You can be kind and still have high standards.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It’s okay to be wrong, just not stubborn.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The right “no” beats a thousand “maybes.”&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Compromise kills clarity. Choose, don’t blend.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Every problem looks smaller after a good meal.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Don’t overthink purpose. Build, love, repeat.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Curiosity never retires.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;&lt;strong&gt;❤️ Family, friends &amp;amp; the long game&lt;/strong&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Family first. Always. The best way to disconnect is to be needed by your kids.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You can’t buy time, but you can decide how to spend it.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;At 42, I’ve realized something simple but not easy:&lt;/p&gt;
&lt;p&gt;Life isn’t a sprint to a finish line. It’s an ongoing debugging session. You fix a few things, break a few others, and hopefully push a slightly better version of yourself every year.&lt;/p&gt;
&lt;p&gt;The same applies to building a company, raising children, or simply trying to be a decent person. You never “ship it” and move on. You iterate. You learn. You acknowledge that the next release will likely also contain bugs. And that’s fine.&lt;/p&gt;
&lt;p&gt;For a long time, I thought success meant achieving things: a title, a product, a number in the bank, a milestone on a slide deck. But the more I live, the more I see that &lt;em&gt;peace&lt;/em&gt; is the real metric. The ability to wake up excited, to solve interesting problems, to spend time with people you love, and to go to bed proud.&lt;/p&gt;
&lt;p&gt;That’s it.&lt;/p&gt;
&lt;p&gt;At 20, I wanted to build great code.&lt;/p&gt;
&lt;p&gt;At 30, I wanted to build great products.&lt;/p&gt;
&lt;p&gt;At 40, I just want to build a great life.&lt;/p&gt;
&lt;p&gt;And the funny thing?&lt;/p&gt;
&lt;p&gt;It still takes the same skills: focus, iteration, and knowing when to stop optimizing.&lt;/p&gt;
&lt;p&gt;So if there’s one thing I’d tell my younger self, it’s this:&lt;/p&gt;
&lt;p&gt;Keep learning, keep building, but remember that there’s no final commit.&lt;/p&gt;
&lt;p&gt;You don’t get to “win” life. You just get to live it. Version by version.&lt;/p&gt;
</content:encoded><category>career</category></item><item><title>Not Everything is a Hustle</title><link>https://julien.danjou.info/blog/not-everything-is-a-hustle/</link><guid isPermaLink="true">https://julien.danjou.info/blog/not-everything-is-a-hustle/</guid><description>There’s more than one way to be a founder.</description><pubDate>Tue, 01 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This Sunday, I made the mistake of opening LinkedIn.&lt;/p&gt;
&lt;p&gt;Among the usual weekend calm, a post caught my eye. A young founder proudly explaining how every morning before heading to the office, he cold-DMs 15 people. Every day. Rain or shine.&lt;/p&gt;
&lt;p&gt;He then listed all the &lt;em&gt;amazing&lt;/em&gt; outcomes of this habit: high-paid jobs, startup funding, conference invites, customer meetings, top hires, you name it.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/images/blog/3e474bba-e76d-4c80-8a3c-df3715f838e0_514x575.png&quot; alt=&quot;Screenshot of a LinkedIn post about cold-DMing 15 people every morning&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I couldn’t help but roll my eyes.&lt;/p&gt;
&lt;p&gt;So I reshared their post, wrote this instead, and published it on LinkedIn:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Every morning before I head to my home office,&lt;br /&gt;
I bring my kids to school.&lt;br /&gt;
It’s literally the single most important habit I’ve built.&lt;br /&gt;
Want to learn how I do it?&lt;br /&gt;
Comment “school” and I’ll tell you my secret.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Boom. &lt;em&gt;Thousands&lt;/em&gt; of views.&lt;/p&gt;
&lt;p&gt;Because here’s the truth: not everyone is under 30, lives in San Francisco, works at a startup with no users that raised millions, and spends their weekends writing cold emails to VCs and their evening eating pizzas with the team, crushing the latest release.&lt;/p&gt;
&lt;p&gt;Some of us are in our 40s.&lt;/p&gt;
&lt;p&gt;Some of us are building real companies.&lt;/p&gt;
&lt;p&gt;Some of us are taking our kids to school, going for a run at lunch, playing music on the weekends, and still—yes, still—shipping, raising, hiring, and growing.&lt;/p&gt;
&lt;p&gt;We don’t brag about skipping meals or sleeping 4 hours.&lt;/p&gt;
&lt;p&gt;We don’t show our productivity hacks on a treadmill desk.&lt;/p&gt;
&lt;p&gt;We don’t post about cold-DMing 15 people a day.&lt;/p&gt;
&lt;p&gt;We just don’t need to turn every moment into content.&lt;/p&gt;
&lt;p&gt;So if LinkedIn makes you feel like you’re not doing enough, or not doing it right, just know this:&lt;/p&gt;
&lt;p&gt;You’re not alone. You’re not late.&lt;/p&gt;
&lt;p&gt;And success can look very, very different.&lt;/p&gt;
&lt;p&gt;Take a breath. Pick up your kids. Go for that run.&lt;/p&gt;
&lt;p&gt;Enjoy the ride.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/images/blog/4c7aadec-2cb7-48d7-b67c-fbc88df0aacb_2998x3395.jpeg&quot; alt=&quot;Photo of a father and child enjoying a walk outdoors&quot; /&gt;&lt;/p&gt;
</content:encoded><category>startup</category><category>career</category></item><item><title>Why Stock Options are Terrible for Employees</title><link>https://julien.danjou.info/blog/why-stock-options-are-terrible-for/</link><guid isPermaLink="true">https://julien.danjou.info/blog/why-stock-options-are-terrible-for/</guid><description>Not everyone&apos;s ready for it.</description><pubDate>Tue, 08 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Imagine you’re joining a startup, excited by the potential to share in its future success. You’ve just been offered stock options. What do they actually mean for you?&lt;/p&gt;
&lt;p&gt;You’re not sure if you need to negotiate these terms, or even what they imply. Once you’re in, someone mentions them during a coffee break, and you’re confused all over again. Whatever—you decide to see how it plays out. Maybe you’ll get filthy rich without understanding why. Maybe you’ll get screwed over. Who knows?&lt;/p&gt;
&lt;p&gt;As a tech employee, tech entrepreneur, and investor, I’ve had my share of discussions with fellows about stock options over the last decade.&lt;/p&gt;
&lt;p&gt;Stock options are a great leverage for founders to share future value with their (early) employees. The intention behind it is noble, but using them has terrible drawbacks.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/images/blog/70ad1f91-a8b1-4c7d-8893-f17abe53ef96_2000x1121.jpeg&quot; alt=&quot;Illustration of stock options as employee compensation&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Understanding What You Get&lt;/h2&gt;
&lt;p&gt;When I joined &lt;a href=&quot;https://julien.danjou.info/blog/making-the-jump&quot;&gt;Datadog&lt;/a&gt; a few years ago, they offered different packages that you had to choose from:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Option 1: a small salary, a large number of stock options;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Option 2: a medium salary, a medium number of stock options;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Option 3: a large salary and a small number of stock options.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I believe many tech companies use the same template.&lt;/p&gt;
&lt;p&gt;A few months after I joined, the company IPO’ed. I went to a coffee break and chatted with one of my colleagues. The recent IPO and the rising stock values sparked the conversation. They asked me, “Which option did you pick when you joined?” I replied that I was looking for a venture back then, focusing on wealth creation, so I picked option 1—the salary was enough for me to live.&lt;/p&gt;
&lt;p&gt;They replied that they now regretted picking option 3.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/images/blog/a7d775cf-d226-43aa-bae7-c4e24029e4c4_959x639.jpeg&quot; alt=&quot;Illustration of employee regret over choosing salary over stock options&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I suspect that most employees were more attracted to larger salaries than stock options. I wish somebody from HR could confirm the stats about what I observed, but I doubt they would. The truth is, even HR did not understand what they were doing.&lt;/p&gt;
&lt;p&gt;When I got offered the 3 packages above, I asked what the value of the stock options was. Stock options are &lt;em&gt;options&lt;/em&gt; (no shit), meaning they offer you the right to buy shares of a company. My natural question was: what was the price of this option, what was the company&apos;s value back then, and what was the total number of outstanding prices?&lt;/p&gt;
&lt;p&gt;The recruiter’s answer was: 😳&lt;/p&gt;
&lt;p&gt;Nonetheless, I insisted, and they escalated my question to an HR director. The director ended up reaching out to the US side of the company. They finally showed me a spreadsheet with the number I was asking, easing my final decision.&lt;/p&gt;
&lt;p&gt;The lesson? Always ask for clarity on the value of your options before deciding. If even the recruiter is unsure, push until you understand what you’re getting.&lt;/p&gt;
&lt;h2&gt;Not Everyone is an Investor&lt;/h2&gt;
&lt;p&gt;If you ask people what investing is all about, they’ll reply with “finance and maths.” That’s true, but it’s only one part of the equation. Investing is also a very &lt;strong&gt;psychological&lt;/strong&gt; discipline; not everyone’s ready for that.&lt;/p&gt;
&lt;p&gt;When I was working at Red Hat, the company used to distribute RSU (&lt;em&gt;Restricted Stock Units&lt;/em&gt;) to its employees. RSUs are basically free stocks. You’d get a bunch of those every year and could keep them, therefore becoming a shareholder, or sell them on the market and get cash in exchange.&lt;/p&gt;
&lt;p&gt;As the company was on a growth trajectory back then, the stock would keep climbing every month or so.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/images/blog/76c9d288-c8fa-4b29-a64d-ae1f35144170_730x550.png&quot; alt=&quot;Red Hat stock price chart showing growth before the IBM acquisition in 2019&quot; /&gt;
&lt;em&gt;Red Hat stock history before being bought by IBM in 2019.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Most people I worked with were young engineers and not investors. They had no clue why the stock would fluctuate.&lt;/p&gt;
&lt;p&gt;One day, I was chatting with a colleague over a beer, and they seemed worried. I asked what was wrong, and they explained that they had lost thousands of dollars over the last month because Red Hat stocks had plunged. They had received RSUs over the last years and were so happy with their growth that they never sold them and didn’t think they could crash. Now, they were upset and did not know what to do.&lt;/p&gt;
&lt;p&gt;Of course, they did not know what to do.&lt;/p&gt;
&lt;p&gt;They had no way to know if the stock was overvalued or undervalued.&lt;/p&gt;
&lt;p&gt;They had no idea if the market would continue its bull run or if a bear market was upcoming.&lt;/p&gt;
&lt;p&gt;They were no investors. They had no plan, and the uncertainty left them feeling lost.&lt;/p&gt;
&lt;h2&gt;How to Approach Stock Options as an Employee&lt;/h2&gt;
&lt;p&gt;Owning stock options (or RSUs) means one thing: you are becoming an investor. It means that you now own (potentially, in the case of options) a part of a company with a &lt;em&gt;market value&lt;/em&gt; and an &lt;em&gt;intrinsic value&lt;/em&gt;. If you cannot assess the value or form an opinion on your company’s stock, you probably shouldn’t be a shareholder.&lt;/p&gt;
&lt;p&gt;I know. It’s not your fault. You didn’t ask for it, but this is what happens if you stick to your stock. You are transformed.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/images/blog/89f84310-81fd-4016-9338-0a082c5f1569_696x239.png&quot; alt=&quot;Airbnb stock price chart illustrating the dilemma of when to sell&quot; /&gt;
&lt;em&gt;As an employee, should you keep or sell your Airbnb Inc. stock? When do you sell? Why?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;→ Once you vest your RSUs, if don’t sell them immediately in exchange for cash, you’re effectively becoming an investor.&lt;/p&gt;
&lt;p&gt;→ When a liquidity event occurs, and you choose not to exercise your stock options, you are deciding to become an investor.&lt;/p&gt;
&lt;p&gt;It’s great to be an investor, for sure. But that comes with many questions: what’s my allocation policy? What’s my exit strategy? What is my risk tolerance? What is my investment horizon? What are the tax implications? How well do I understand the business model? Do I trust the leadership team? What’s my plan if things go wrong? How does this investment fit into my overall financial plan?&lt;/p&gt;
&lt;p&gt;Investing isn’t just about understanding finances; you also need to handle fear, greed, and uncertainty. &lt;strong&gt;Most people aren’t ready for the psychological strain of watching their savings plummet overnight.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/images/blog/e3d5afa6-183c-4fe3-9f2c-6701f17c779d_690x420.png&quot; alt=&quot;CrowdStrike stock chart showing a 50% drop during the 2024 incident&quot; /&gt;
&lt;em&gt;CrowdStrike shares lost 50% of their value during the incident in 2024.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Stock options can be a powerful motivator, but they aren’t for everyone. Next time you’re offered stock options, think like an investor—ask the tough questions, seek clarity, and ensure you’re prepared for both the financial and emotional aspects of investing.&lt;/p&gt;
&lt;p&gt;If you then plan to stick to your stock, decide whether you truly want to become an investor and learn the trade. If you don’t, it’s fine; just get your money and enjoy it. ✌️&lt;/p&gt;
</content:encoded><category>startup</category><category>career</category></item><item><title>How to Be a Great Software Engineer</title><link>https://julien.danjou.info/blog/how-to-be-a-great-software-engineer/</link><guid isPermaLink="true">https://julien.danjou.info/blog/how-to-be-a-great-software-engineer/</guid><description>There is more than one way.</description><pubDate>Tue, 03 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I did not write for the last few weeks as I enjoyed taking a break. Ha! That’s probably the first point I could write about being a great software engineer: taking breaks.&lt;/p&gt;
&lt;p&gt;Nevermind.&lt;/p&gt;
&lt;p&gt;What do I know, after all? I’m not a software engineer anymore. I’m a CEO, god damn it.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/images/blog/f4dfeb44-ffa2-4a3f-baf2-0dcf75586f06_320x195.jpeg&quot; alt=&quot;Illustration of a CEO dispensing advice&quot; /&gt;
&lt;em&gt;Not my role model.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;At least being a CEO gives me some excuse to dispense some pieces of advice regularly. It turns out that over the last couple of years, I had to become a &lt;em&gt;manager&lt;/em&gt; of people — and many people in my team are software engineers. The only thing I knew about management so far was &lt;em&gt;being managed&lt;/em&gt;, which taught me many things, such as:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;how to manage;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;how not to manage;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;how to be managed.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I don’t want to talk about the first two points here, but I’d like to write about the latter. I regularly have to give feedback to people on my team, and they often rely on the Great Engineer Framework that I built in my mind.&lt;/p&gt;
&lt;p&gt;It’s time to write that down.&lt;/p&gt;
&lt;h3&gt;Expectations&lt;/h3&gt;
&lt;p&gt;Since I started my career as a software engineer 20 years ago, I always wondered how to improve. My initial appeal for this career was typing code on a keyboard, so I decided that the best way to become a great engineer was to be the best at technical stuff.&lt;/p&gt;
&lt;p&gt;I coded days and nights, learned everything I could, and became amazing. I Debian-packaged hundreds of software, wrote C code for a window manager, Linux and CPython, wrote &lt;a href=&quot;https://github.com/emacs-mirror/emacs/blob/master/lisp/color.el#L301&quot;&gt;CIEDE2000 color space computation functions in Lisp&lt;/a&gt;, wrote thousands of lines of Python to do crazy stuff, implemented XML binding for the X11 protocol, built a scalable time-series database based on object storage, etc; you name it. I did many tech-crazy things and thought I was a great engineer.&lt;/p&gt;
&lt;p&gt;It turns out I was only 33% good. As I grew into the tech and startup ecosystem, I started to understand whatever was around me, the industry, the business, the people. And I soon realized that this was not enough, even if I was among the best engineers you could probably find (sorry for bragging).&lt;/p&gt;
&lt;h3&gt;Aspects&lt;/h3&gt;
&lt;p&gt;After a few years, I built a mental model that I still use nowadays to give feedback to engineers in my team, based on 3 aspects that you must master to become a great engineer — like the 10x engineer they all talk about:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Tech&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Business value&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Collaboration&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Tech&lt;/h4&gt;
&lt;p&gt;I just discussed tech. You have to be &lt;em&gt;amazing&lt;/em&gt; at it, which means you have to dig &lt;em&gt;deep&lt;/em&gt; into it. As my co-founder Mehdi says, great engineers &lt;em&gt;pull the strings&lt;/em&gt;. This means that you’re not just there to paper over the problem; you’re here to understand it fully, to grasp it entirely, from top to bottom, and to fix it forever because you &lt;em&gt;understand&lt;/em&gt; it.&lt;/p&gt;
&lt;p&gt;Many junior engineers are not able to do that. They just tinker with their code until “well, it works, tests pass, whatever.” The rise of AI tooling is supporting that, and engineers working this way will have to step up their game, or they’ll disappear.&lt;/p&gt;
&lt;p&gt;It takes a large amount of time to achieve this expertise, and as common sense says, maybe 10,000 hours. This is actually a major issue for people switching to tech after another career; 10,000 hours of coding 25 hours a week (if you just do it on the job) in a typical 45-week year is more than 8 years before starting to “know what you’re talking about.” If you start at 18 years old, tinkering with computers 60 hours a week for fun, you’ll be pretty good at it by 21. I know that’s not fair, but I see this as a major roadblock for hiring tech talents coming from a career change.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/images/blog/4c43b2e1-118b-4c39-9a31-4b09a1adbad1_1536x768.webp&quot; alt=&quot;Illustration of deep technical expertise and pulling the strings as an engineer&quot; /&gt;&lt;/p&gt;
&lt;p&gt;So: do tech. Don’t stop until you understand everything of what you are responsible for. I remember 15 years ago being screened by a recruiter at Google who’d ask me what happened when I typed google.com in my Web browser. Being able to explain everything, from the keyboard input to the DNS requests and TCP headers of the packet sent, to the HTTP server made me pass without a blink.&lt;/p&gt;
&lt;h4&gt;Business Value&lt;/h4&gt;
&lt;p&gt;This sounds totally stupid, and I might be slightly biased by my French experience, but there are too many engineers who do not understand &lt;em&gt;business value&lt;/em&gt;. It actually took me a few years to understand this, probably because I was only focused on tech. Let me give you a good anecdote to illustrate this.&lt;/p&gt;
&lt;p&gt;Ten years ago, I was called by a senior manager to help with a Python project in a media company. I go to the meeting and meet the manager. He comes from a famous French tech school — one where they learn the C standard library from scratch in their first year — and so do most of the engineers in his team. They’re managing hundreds of servers, and after evaluating various software to do that (Puppet, Ansible, etc) they didn’t find anything that suited 100% of their needs, so they built their own. They invested hundreds of hours in it, and now they’d need help maintaining it.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/images/blog/93fa670c-6f32-494d-9ef1-d9c0eac35899_1536x768.webp&quot; alt=&quot;Illustration of engineers building custom tools instead of using existing solutions&quot; /&gt;&lt;/p&gt;
&lt;p&gt;It turns out that what they needed was probably Ansible plus a custom plugin to reach 98% of their need in a tenth of the time, but they didn’t see it that way. They just built an entire tech project, not related to their core business, from the ground up, investing hours of time. This is the kind of similar experience I talked about in my previous post, &lt;a href=&quot;https://julien.danjou.info/p/solving-build-vs-buy&quot;&gt;Solving Build vs Buy&lt;/a&gt;. I skipped that project and moved on to other things. I had no interest in maintaining a project that was not providing &lt;em&gt;core value&lt;/em&gt; to the business. That’d have been a great way to be ditch as soon as somebody smarter in the company realized the amount of wasted time that project might have been.&lt;/p&gt;
&lt;p&gt;This kind of behaviour applies everywhere. Engineers would spend hours trying to implement &lt;em&gt;perfect&lt;/em&gt; systems that will scale to millions of users. While the business might have no user — yet. Engineers would spend hours building a feature or solving a problem that would impact 0.1% of users. It’s true that engineering might not be entirely responsible for the roadmap directly, but they are responsible for the time they spend on how far they go into implementing systems and features.&lt;/p&gt;
&lt;p&gt;We live in a world where economy is the driver, which means you have to maximum throughput and minimize input. Input is your coding time, and throughput is the (extra) money the company that hires you can make with you work.&lt;/p&gt;
&lt;h4&gt;Collaboration&lt;/h4&gt;
&lt;p&gt;I could probably summarize this aspect with just:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you want to go fast, go alone. If you want to go far, go together.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/images/blog/20afac45-c6a6-45f7-b50d-22529146569d_1536x768.png&quot; alt=&quot;Illustration of teamwork and collaboration as key to going far&quot; /&gt;&lt;/p&gt;
&lt;p&gt;That’s entirely true. Considering the team is a problem for many engineers who are frustrated by members of their team. It does take time to deal with people, and they are not as easy to understand as computers. However, in the long run, they are the best way to provide you with &lt;em&gt;leverage&lt;/em&gt; to achieve amazing things. Maybe another secret of 10x engineers, who knows?&lt;/p&gt;
&lt;p&gt;Therefore, you’ll need to understand the dynamics that make your teamwork. You have to make sure your work is not isolated and is not the only correct piece of code hidden in its own corner. You need to connect both your piece of software and your brain to other pieces of software and people. I know it requires a lot of effort for some people, especially because it can feel annoying and inefficient to talk or write things for other engineers to understand what you’re achieving.&lt;/p&gt;
&lt;p&gt;But until we can all Neuralink, yes, you’ll have to pause and do something that seems like a waste of time: talking to your teammates, your manager, or customers.&lt;/p&gt;
&lt;p&gt;Always remember: this is an investment. In the long run, it &lt;em&gt;will pay off.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Those three aspects are always the ones that I use to drive my feedback on performance reviews to engineers in the team. Not everyone is always 10/10 in every aspect, so it eases providing feedback and drives them to where they should improve next. They are probably not exhaustive, but they are a great way to spot great and inadequate behaviors.&lt;/p&gt;
</content:encoded><category>career</category><category>coding</category></item><item><title>Discovering the Tech Community in Toulouse: A Three-Year Journey</title><link>https://julien.danjou.info/blog/discovering-the-tech-community-in/</link><guid isPermaLink="true">https://julien.danjou.info/blog/discovering-the-tech-community-in/</guid><description>It&apos;s been 3 years now since I moved from Paris to Toulouse.</description><pubDate>Tue, 25 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;When I moved to Toulouse three years ago, I knew almost no one. My only connection was my cofounder, &lt;a href=&quot;http://sileht.net&quot;&gt;Mehdi&lt;/a&gt;. It was an intimidating start, but thanks to the magic of &lt;a href=&quot;https://www.linkedin.com/posts/juliendanjou_toulouse-remotework-activity-6807626256461414400-th73?utm_source=share&amp;amp;utm_medium=member_desktop&quot;&gt;LinkedIn&lt;/a&gt;, my presence in the city didn&apos;t go unnoticed. Soon, people reached out to me, giving me my first glimpse into the tech scene here. Among those early connections were Denis and Cédric, whose introductions helped bootstrap my network at an impressive speed.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/images/blog/6990de8c-aa50-42bf-afd6-5fa15a19f7b5_1032x780.webp&quot; alt=&quot;Map showing Toulouse, fourth largest city in France and home of Airbus&quot; /&gt;
&lt;em&gt;In case you have never heard of Toulouse, it’s the fourth largest city in France (soon to be third), with 0.5 million inhabitants, and the home of Airbus.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Mergify is a remote-first company, so we don’t have an office where I can commute every day and rely on colleagues to easily have a social network. That forced me to go out and expand my social network out in the unknown.&lt;/p&gt;
&lt;p&gt;In 2022, I decided to reboot the &lt;a href=&quot;https://www.meetup.com/fr-FR/python-toulouse/&quot;&gt;Toulouse Python Meetup&lt;/a&gt;. Despite having over 800 members in the group at the time, the event had gone dormant since COVID 19. I reached out to the previous (idle) organizers, and with the support of Hugo at Mergify, we organized our first meetup. (I wrote more about &lt;a href=&quot;https://julien.danjou.info/blog/attending-conferences&quot;&gt;attending conferences&lt;/a&gt; and how my approach changed over the years.) I prepared a quick return of experience talk, which I presented to the three attendees who showed up (!) how we deployed &lt;a href=&quot;https://mypy-lang.org/&quot;&gt;mypy&lt;/a&gt; at Mergify.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/images/blog/b812719b-1ad1-4283-8af9-2cfcec62bbc0_2161x1217.png&quot; alt=&quot;Photo of the Toulouse Python Meetup session&quot; /&gt;&lt;/p&gt;
&lt;p&gt;It was a humble beginning, but it was a start. Reviving in-person events was still challenging, but we persisted, organizing more meetups until the community began to grow. This effort eventually led us to Wannes, who now runs the events, allowing me to focus on other commitments. It’s tough to get people to attend events nowadays, possibly due to the lingering effects of COVID and the convenience of YouTube.&lt;/p&gt;
&lt;p&gt;Joining the &lt;a href=&quot;https://tech.rocks/&quot;&gt;Tech.Rocks&lt;/a&gt; a couple of years ago was another significant milestone. Through this community, I discovered a substantial number of tech professionals in and around Toulouse. Remote work has made it possible for people to work far from their office, and I met people working at companies such as Datadog, Elastic, Spotify, OVHcloud, Ankorstore, AWS, Scaleway, MongoDB, ManoMano, Malt, Zenchef, GitLab — and there are many others I have yet to meet. I regularly organize lunches and dinners with tech folks from this community to foster stronger bonds, which has been incredibly rewarding.&lt;/p&gt;
&lt;p&gt;I&apos;ve had the pleasure of meeting remarkable people, from experienced engineers to startup founders. Toulouse boasts a vibrant ecosystem, smaller than Paris but thriving nonetheless. While it&apos;s easy to joke about the tech economy here being heavily dependent on Airbus and its providers, that&apos;s not entirely true. There&apos;s a diverse range of companies, though the prevalence of service companies (ESNs) in France is notable, with a scarcity of product-based firms.&lt;/p&gt;
&lt;p&gt;One of the highlights of the tech calendar here is &lt;a href=&quot;https://devfesttoulouse.fr/&quot;&gt;DevFest&lt;/a&gt;, an annual conference organized by the &lt;a href=&quot;https://www.gdgtoulouse.fr/&quot;&gt;Google Developers Group (GDG)&lt;/a&gt;. It&apos;s one of the most active meetups, although the connection to Google isn&apos;t always clear. Nonetheless, it&apos;s a fantastic event that brings the community together.&lt;/p&gt;
&lt;p&gt;As a business angel, I&apos;ve had the opportunity to meet incredible founders and teams from startups like &lt;a href=&quot;https://www.munityapps.com/&quot;&gt;Munity&lt;/a&gt;, &lt;a href=&quot;https://kotzilla.io/&quot;&gt;Kotzilla&lt;/a&gt;, &lt;a href=&quot;https://www.roundtable.eu/&quot;&gt;Roundtable&lt;/a&gt;, and more. It&apos;s inspiring to see startups in Toulouse that aren&apos;t solely focused on aerospace or IoT. There&apos;s a budding entrepreneurial spirit here that’s encouraging to witness.&lt;/p&gt;
&lt;p&gt;Finally, I must mention &lt;a href=&quot;https://www.iot-valley.fr/&quot;&gt;IoT Valley&lt;/a&gt; — it took me three years to understand what was that IoT Valley I heard about all the time. Originally centered around SigFox, the community has evolved and now encompasses a broader range of startups. I recently had the chance to host a dinner and podcast episode there, giving me a deeper understanding of its scope. Located near Toulouse in Labège, IoT Valley houses numerous companies, many still focused on IoT, but expanding into other areas as well. They might benefit from a rebrand, but marketing isn&apos;t typically a strong suit in French tech. Sharing my experiences of building &lt;a href=&quot;https://mergify.com&quot;&gt;Mergify&lt;/a&gt; and working as an entrepreneur and business angel was a highlight, and I look forward to the podcast episode going live.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/images/blog/553be933-d17c-4b64-b7ed-8d68532ba5b2_2048x1472.webp&quot; alt=&quot;Photo of the IoT Valley Founder Dinner&quot; /&gt;
&lt;em&gt;IoT Valley Founder Dinner&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You can listen to the podcast I recorded &lt;a href=&quot;https://www.iot-valley.fr/podcast/37-les-perspectives-sur-lavenir-de-la-tech-avec-julien-danjou&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;iframe style=&quot;border-radius:12px&quot; src=&quot;https://widget.ausha.co/index.html?podcastId=yX4JgC5WWna7&amp;amp;color=%23ffffff&amp;amp;v=3&quot; width=&quot;100%&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot;&amp;gt;&amp;lt;/iframe&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In conclusion, Toulouse&apos;s tech scene is dynamic and growing. For anyone considering a move to this city, you&apos;ll find a community that&apos;s welcoming, innovative, and full of opportunities. Whether you&apos;re looking to network, learn, or launch your next venture, Toulouse has something to offer.&lt;/p&gt;
&lt;p&gt;And if you move there, &lt;a href=&quot;mailto:julien@danjou.info&quot;&gt;send me a mail&lt;/a&gt;!&lt;/p&gt;
</content:encoded><category>career</category><category>talks</category></item><item><title>Attending Conferences</title><link>https://julien.danjou.info/blog/attending-conferences/</link><guid isPermaLink="true">https://julien.danjou.info/blog/attending-conferences/</guid><description>How my conferences attendance shifted over the last decade.</description><pubDate>Tue, 04 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;There’s a lot to say about tech conferences, shows, and exhibits in any form. I’ve been to a few of them over the last decade, and I probably can&apos;t count anymore at this point.&lt;/p&gt;
&lt;p&gt;I thought it’d be interesting to write a thing or two about them and how my experience changed from my first participation in a gathering of tech people to the most recent one.&lt;/p&gt;
&lt;h2&gt;Goals&lt;/h2&gt;
&lt;p&gt;What especially changed for me over the last 15 years is the expectation of conferences.&lt;/p&gt;
&lt;p&gt;I remember that the first conferences I went to appeared especially exciting because of the &lt;strong&gt;content&lt;/strong&gt;. I was utterly interested in hearing about new technologies, discovering new features, and learning new practices. My goal as a young software engineer was to become the best at my craft, so I’d go there and attend as many lectures as I could.&lt;/p&gt;
&lt;p&gt;Sometimes, that would be very challenging. Take the &lt;a href=&quot;https://fosdem.org&quot;&gt;FOSDEM&lt;/a&gt;, one of the largest open-source conferences in Europe, with thousands of geeks attending. I attended FOSDEM numerous times. The buildings they use to run the conference have been the same all along those years, and are known to be way too small to welcome many people to most conferences. There are fantastic talks done by some of the world&apos;s greatest hackers, but there are more people waiting in the hall to access the talk than people in the room listening to it.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/images/blog/2648c606-59ca-40bd-88ab-19b0235d0518_1280x720.jpeg&quot; alt=&quot;Photo of a packed FOSDEM conference hallway with attendees waiting to enter&quot; /&gt;
&lt;em&gt;Regular FOSDEM attendance&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You could think that this would ruin the conference for most people, but I think it does not. It shows the other very important aspect of conferences: social &lt;strong&gt;interaction&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I know there are so many stereotypes about tech guys not interacting with each other. The truth is, as human beings, we crave social connections, and events are a great source of those. Attending my first OpenStack Summit in 2013 allowed me to meet people I only chatted with over IRC, and it was a real game changer later on.&lt;/p&gt;
&lt;p&gt;As my engineering career grew, there was not much interesting to learn from the talks. Many lectures became boring or déjà-vu.&lt;/p&gt;
&lt;p&gt;I quickly switched sides and became the one giving talks and sharing knowledge. This was great. It gave me a great sense of recognition, validation, fear, and adrenaline. It’s a significant boost for anyone’s career. It was a game changer for me.&lt;/p&gt;
&lt;h2&gt;COVID&lt;/h2&gt;
&lt;p&gt;When COVID happened, everything changed.&lt;/p&gt;
&lt;p&gt;I remember receiving a phone call in early March 2020 from Sylvain Zimmer, organizer of the dotConferences. I was booked to speak at &lt;a href=&quot;https://www.dotpy.io/&quot;&gt;dotPy&lt;/a&gt;, and my talk on Python performances and profiling was ready to go in a couple of days. I would be live on stage in a Parisian theater in front of hundreds of people. Sylvain explained that something was happening, that they couldn’t risk having this event run, and that they had to cancel.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/images/blog/172ab082-db07-4667-9eec-82640b8ef8c6_1200x546.jpeg&quot; alt=&quot;Photo of an empty conference venue during COVID-19 cancellations&quot; /&gt;&lt;/p&gt;
&lt;p&gt;For the next months, every event was canceled, and people shifted to online, remote work, etc. — you know it all. This broke local communities and the habit of many people going to conferences.&lt;/p&gt;
&lt;p&gt;I think this shows overall as there are fewer people going to events today than there used to be. People got used to accessing content over the Internet, webinars bloomed, and since many conferences published their lectures online, interest in traveling to a conference reduced a lot.&lt;/p&gt;
&lt;p&gt;I relaunched the &lt;a href=&quot;https://www.meetup.com/fr-FR/python-toulouse/&quot;&gt;Python Toulouse meetup&lt;/a&gt; group 18 months ago. There were more than 800 members on that group when we announced that we were scheduling a new session in October 2022—3 years after the last one.&lt;/p&gt;
&lt;p&gt;We got only 5 attendees.&lt;/p&gt;
&lt;p&gt;Since then, we have continued pushing the event every couple of months, and the event has grown back to more than 40 attendees (and I have stepped down from the organizers).&lt;/p&gt;
&lt;p&gt;I think this shows well how bad the COVID hit conferences and meetups in general.&lt;/p&gt;
&lt;h2&gt;Attending Conferences&lt;/h2&gt;
&lt;p&gt;As I started running &lt;a href=&quot;https://mergify.com&quot;&gt;Mergify&lt;/a&gt; a few years ago, my expectations of conferences shifted again. As we are building a developer tool, so the developer is now a persona we want to reach to make us aware of what we’re building.&lt;/p&gt;
&lt;p&gt;There are two ways of doing that, and most developer-focused companies do one or both:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;speak at conferences;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;expose at conferences (sponsoring).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I’ll write something about event sponsoring some other time. (Update: &lt;a href=&quot;https://julien.danjou.info/blog/sponsoring-conferences&quot;&gt;I did&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;Winning a slot to speak at conferences is not easy: it requires expertise (we have) and time and focus (we don’t have much). In my case, we encourage folks at Mergify to respond to calls for papers, teach other developers the problems we solve, or share our experience on various topics. This is not always working; unfortunately, we are not experts at playing the CfP game—another topic I should write about.&lt;/p&gt;
&lt;p&gt;First, I noticed that while there are more and more software engineers, many of them don’t care about going to conferences. They know most of the talks are already online or will be. As the CfP game is getting professional, many talks you see at conferences have already been lectured, filmed, and published online. Engineers valuing their time might not go to conferences in the end.&lt;/p&gt;
&lt;p&gt;Some conferences are trying to fix that by not publishing their talks online. I think it can be a good strategy in certain cases, but as many conferences invite speakers with talks running for months if not years, it’s likely you can already watch the content online anyway.&lt;/p&gt;
&lt;p&gt;Second, many events and conferences still overpromise the number of people actually attending. It’s likely the pre-COVID level is not back everywhere.&lt;/p&gt;
&lt;p&gt;Last, the average technical level of expertise of both speakers and attendees fluctuates a lot. However, the more I think about it, the less I see a pattern. Some community-run conferences have great and poor content simultaneously; some professional conferences have attendees with low-skill but great speakers. It’s hard to have a rule, and I think it’s really on a case-by-case basis—and it might be subjective, after all.&lt;/p&gt;
&lt;p&gt;Those issues might be anecdotic for most, though they’re not for me as they explain partly why Mergify&apos;s sponsoring of events has been mostly a failure over the last year.&lt;/p&gt;
&lt;p&gt;But I’ll talk about that later.&lt;/p&gt;
</content:encoded><category>talks</category><category>career</category></item><item><title>Interview: The Performance of Python</title><link>https://julien.danjou.info/blog/interview-the-performance-of-python/</link><guid isPermaLink="true">https://julien.danjou.info/blog/interview-the-performance-of-python/</guid><description>Earlier this year, I was supposed to participate to dotPy, a one-day Python conference happening in Paris. This event has unfortunately been cancelled due to the COVID-19 pandemic.</description><pubDate>Mon, 11 May 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Earlier this year, I was supposed to participate to &lt;a href=&quot;https://dotpy.io&quot;&gt;dotPy&lt;/a&gt;, a one-day Python conference happening in Paris. This event has unfortunately been cancelled due to the COVID-19 pandemic.&lt;/p&gt;
&lt;p&gt;Both Victor Stinner and me were supposed to attend that event. Victor had prepared a presentation about Python performances, while I was planning on talking about profiling.&lt;/p&gt;
&lt;p&gt;Rather than being completely discouraged, Victor and I sat down (remotely) with Anne Laure from &lt;a href=&quot;https://www.welcometothejungle.com/en/collections/behind-the-code&quot;&gt;Behind the Code&lt;/a&gt; (a blog ran by Welcome to the Jungle, the organizers of the &lt;a href=&quot;https://dotpy.io&quot;&gt;dotPy&lt;/a&gt; conference).&lt;/p&gt;
&lt;p&gt;We discuss Python performance, profiling, speed, projects, problems, analysis, optimization and the GIL.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.welcometothejungle.com/en/articles/btc-performance-python&quot;&gt;You can read the interview here.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/content/images/05/image-5.png&quot; alt=&quot;Screenshot of the Behind the Code interview about Python performance&quot; /&gt;&lt;/p&gt;
</content:encoded><category>career</category><category>python</category></item><item><title>Being in Charge</title><link>https://julien.danjou.info/blog/being-in-charge-10x-engineers-le-podcast/</link><guid isPermaLink="true">https://julien.danjou.info/blog/being-in-charge-10x-engineers-le-podcast/</guid><description>If you never heard of the 10x engineer myth, it&apos;s a pretty great concept. It boils down to the idea where an engineer could be 10x more efficient than a random engineer. I find this fantastically twis</description><pubDate>Fri, 17 Apr 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you never heard of the 10x engineer myth, it&apos;s a pretty great concept. It boils down to the idea where an engineer could be 10x more efficient than a random engineer. I find this fantastically twisted.&lt;/p&gt;
&lt;p&gt;Last week, I sat and chat with Alexis Monville in &lt;a href=&quot;https://alexis.monville.com/en/category/podcast/&quot;&gt;Le Podcast&lt;/a&gt; — a podcast that equips you to make positive change in your organization. &lt;a href=&quot;https://alexis.monville.com/en/2020/04/10/do-you-want-10x-engineers/&quot;&gt;We talked&lt;/a&gt; about that 10x Engineer myth, and from there we digressed on how to grow your career and handle the different aspects of it.&lt;/p&gt;
&lt;p&gt;This was a very interesting exchange. Alexis is actually going to publish a new book next month (May 2020) entitled &lt;a href=&quot;https://iamincharge.club/&quot;&gt;I am a Software Engineer and I am in charge&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/content/images/04/image-1.png&quot; alt=&quot;Cover of I Am a Software Engineer and I Am in Charge&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Lucky me, this week, I had the chance to be able to read the book before everybody else — which means I actually read &lt;em&gt;after&lt;/em&gt; our recording. I understood why Alexis said that a lot of what I was talking about during our podcast resonated with him. I send &lt;a href=&quot;https://iamincharge.club/2020/04/16/the-first-review/&quot;&gt;a detailed review of the book to Alexis and Michael&lt;/a&gt; if you&apos;re curious. I&apos;m definitely recommending this book if you want to stop complaining about your job and start understanding how to pull the strings.&lt;/p&gt;
&lt;p&gt;I wish I had this book available 10 years ago! 😅&lt;/p&gt;
</content:encoded><category>career</category><category>talks</category></item><item><title>My interview with Cool Python Codes</title><link>https://julien.danjou.info/blog/interview-coolpythoncodes/</link><guid isPermaLink="true">https://julien.danjou.info/blog/interview-coolpythoncodes/</guid><description>A few days ago, I&apos;ve recently been contacted by Godson Rapture from Cool Python codes to answer a few questions about what I work on in open source.</description><pubDate>Thu, 05 Oct 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A few days ago, I&apos;ve recently been contacted by Godson Rapture from &lt;a href=&quot;http://coolpythoncodes.com/&quot;&gt;Cool Python codes&lt;/a&gt; to answer a few questions about what I work on in open source. Godson regularly interview developers and I invite you to check out his website!&lt;/p&gt;
&lt;p&gt;Here&apos;s a copy of &lt;a href=&quot;http://coolpythoncodes.com/julien-danjou/&quot;&gt;my original interview&lt;/a&gt;. Enjoy!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Good day, Julien Danjou, welcome to Cool Python Codes. Thanks for taking your precious time to be here.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You’re welcome!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Could you kindly tell us about yourself like your full name, hobbies, nationality, education, and experience in programming?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sure. I’m Julien Danjou, I’m French and live in Paris, France. I studied Computer science for 5 years around 15 years ago, and continued my career in that field since then, specializing in open source projects.&lt;/p&gt;
&lt;p&gt;Those last years, I’ve been working as a software engineer at Red Hat. I’ve spent the last 10 years working with the Python programming language. Now I work on the Gnocchi project which is a time series database.&lt;/p&gt;
&lt;p&gt;When I’m not coding, I enjoy running half-marathon and playing FPS games.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/content/images/03/pyconfr-2017-jd.jpg&quot; alt=&quot;Julien Danjou at PyCon France 2017&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Can you narrate your first programming experience and what got you to start learning to program?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I started programming around 2001, and my first serious programs were in Perl. I was contributing to a hosting platform for free software named VHFFS. It was a free software project itself, and I enjoyed being able to learn from other more experienced developers and being able to contribute back to it. That’s what got me stuck into that world of open source projects.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Which programming language do you know and which is your favorite?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I know quite a few, I’ve been doing serious programming in Perl, C, Lua, Common Lisp, Emacs Lisp and Python.&lt;/p&gt;
&lt;p&gt;Obviously, my favorite is Common Lisp, but I was never able to use it for any serious project, for various reasons. So I spend most of my time hacking with Python, which I really enjoy as it is close to Lisp, in some ways. I see it as a small subset of Lisp.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What inspired you to venture into the world of programming and drove you to learn a handful of programming languages?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It was mostly scratching my own itches when I started. Each time I saw something I wanted to do or a feature I wanted in an existing software, I learned what I needed to get going and get it working.&lt;/p&gt;
&lt;p&gt;I studied C and Lua while writing awesome- the window manager that I created 10 years ago and used for a while. I learned Emacs Lisp while writing extensions that I wanted to see in Emacs, etc. It’s the best way to start.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What is your blog about?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;My blog is a platform where I write about what I work on most of the time. Nowadays, it’s mostly about Python and the main project I contribute to,&lt;br /&gt;
Gnocchi.&lt;/p&gt;
&lt;p&gt;When writing about Gnocchi, I usually try to explain what part of the project I worked on, what new features we achieved, etc.&lt;/p&gt;
&lt;p&gt;On Python, I try to share solutions to common problems I encountered or identified while doing e.g. code reviews. Or presenting a new library I created!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Tell us more about your book, The Hacker’s Guide to Python.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It’s a compilation of everything I learned those last years building large Python applications. I spent the last 6 years developing on a large code base with thousands of other developers.&lt;/p&gt;
&lt;p&gt;I’ve reviewed tons of code and identified the biggest issues, mistakes, and bad practice that developers tend to have. I decided to compile that in a guide, helping developers that played a bit with Python to learn the stages to get really productive with Python.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;OpenStack is the biggest open source project in Python, Can you tell us more about OpenStack?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;OpenStack is a cloud computing platform, started 7 years ago now. Its goal is to provide a programmatic platform to manage your infrastructure while being open source and avoiding vendor lock-in.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Who uses OpenStack? Is it for programmers, website owners?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It’s used by a lot of different organizations – not really by individuals. It’s a big piece of software. You can find it in some famous public cloud providers (Dreamhost, Rackspace…), and also as a private cloud in a lot of different organizations, from Bloomberg to eBay or the CERN in Switzerland, a big OpenStack user. Tons of telecom providers also leverages OpenStack for their own internal infrastructure.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Have you participated in any OpenStack conference? What did you speak on if&lt;br /&gt;
you did?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I’ve attended the last 9 OpenStack summits and a few other OpenStack events around the world. I’ve been engaged in the upstream community for the last 6 years now.&lt;/p&gt;
&lt;p&gt;My area of expertise is telemetry, the stack of software that is in charge of collecting and storing metrics from the various OpenStack components. This is what I regularly talk about during those events.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;How can one join the OpenStack community?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There’s an entire documentation about that, called the &lt;a href=&quot;https://docs.openstack.org/infra/manual/developers.html&quot;&gt;Developer’s Guide&lt;/a&gt;. It explains how to setup your environment to send patches, how to join the community using the mailing-lists or IRC.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What makes your book, &lt;a href=&quot;https://thehackerguidetopython.com&quot;&gt;The Hacker’s Guide to Python&lt;/a&gt; stand out from other Python books? Also, who exactly did you write this book for?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I wrote the book that I always wanted to read about Python, but never found. It’s not a book for people that want to learn Python from scratch. It’s a great guide for those who know the language but don’t know the details that experienced developers know and that make the difference. The best practice, the elegant solutions to common problems, etc. That’s why it also includes interviews with prominent Python developers, so they can share their advice on different areas.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;How can someone get your book?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I’ve decided to self-publish my book, so he does not have an editor like you can be used to see. The best place to get it is online at where you can pick the format you want, electronic or paper.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What do you mean when you say you hack with Python?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Unfortunately, most people refer to hacking as the activity of some bad guys trying to get access to whatever they’re not supposed to see. In the book title, I mean “hacking” as the elegant way of writing code and making things worse smoothly even when you were not expecting to make it.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You mentioned earlier that Gnocchi is a time series database. Can you please be more elaborate about Gnocchi? Is there also any documentation about Gnocchi?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So Gnocchi is a project I started a few years ago to store time series at large scale. Timeseries are basically a series of tuple composed of a timestamp and a value.&lt;/p&gt;
&lt;p&gt;Imagine you wanted to store the temperature of all the rooms of the world at any point of time. You’d need a dedicated database for that with the right data structure. This is what Gnocchi does: it provides this data structure storage at very, very large scale.&lt;/p&gt;
&lt;p&gt;The primary use case is infrastructure monitoring, so most people use it to store tons of metrics about their hardware, software, etc. It’s fully documented on &lt;a href=&quot;http://gnocchi.xyz&quot;&gt;its website&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;How can a programmer without much experience contribute to open source projects?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The best way to start is to try to fix something that irritates you in some way. It might be a bug, it might be a missing feature. Start small. Don’t try big things first or you could be discouraged.&lt;/p&gt;
&lt;p&gt;Never stop.&lt;/p&gt;
&lt;p&gt;Also, don’t plunge right away in the community and start poking random people or spam them with questions. Do your homework, and listen to the community for a while to get a sense of how things are going. That can be joining IRC and lurking or following the mailing lists for example.&lt;/p&gt;
&lt;p&gt;Big open source communities dedicate programs to help you become engaged. It might be worth a try. Generic programs like Outreachy or Google Summer of Code are a great way to start if you don’t feel confident enough to jump by your own means in a community.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Just out of curiosity, do you write code in French?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Never ever. I think it’s acceptable to write in your language if you are sure that your code will never be open sourced and that your whole team is talking in that language, no matter what – but it’s a ballsy assumption, clearly.&lt;/p&gt;
&lt;p&gt;Truth is that if you do open source, English is the standard, so go with it. Be sad if you want, but please be pragmatic.&lt;/p&gt;
&lt;p&gt;I’ve seen projects being open sourced by companies where all the code source comments were in Korean. It was impossible for any non-Korean people to get a glance of what the code and the project was doing, so it just failed and disappeared.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;How does a team of programmers handle bugs in a large open source project?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I wish there was some magic recipe, but I don’t think it’s the case. What you want is to have a place where your users can feel safe reporting bugs. Include a template so they don’t forget any details: how to reproduce the bugs, what they expected, etc. The worst thing is to have users reporting “That does not work.” with no details. It’s a waste of time.&lt;/p&gt;
&lt;p&gt;What tool to use to log all of that really depends on the team size and culture.&lt;/p&gt;
&lt;p&gt;Once that works, the actual fixing of bug doesn’t follow any rule. Most developers fix the bug they encounter or the ones that are the most critical for users. Smaller problems might not be fixed for a long time.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Can you tell us about the new book you are working on and when do we expect&lt;br /&gt;
to get it?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That new book is entitled &lt;a href=&quot;https://scaling-python.com&quot;&gt;“Scaling Python”&lt;/a&gt; and it provides insight into how to build largely scalable and distributed applications using Python.&lt;/p&gt;
&lt;p&gt;It is also based on my experience in building this kind of software during the past years. This book also includes interviews of great Python hackers who work on scalable system or know a thing or two about writing applications for performance – an important point to have scalable applications.&lt;/p&gt;
&lt;p&gt;The book is in its final stage now, and it should be out at the beginning of 2018.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;How can someone get in contact with you?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I’m reachable at &lt;a href=&quot;mailto:julien@danjou.info&quot;&gt;julien@danjou.info&lt;/a&gt; by email or via Twitter, &lt;a href=&quot;https://twitter.com/juldanjou&quot;&gt;@juldanjou&lt;/a&gt;.&lt;/p&gt;
</content:encoded><category>career</category><category>python</category><category>books</category><category>gnocchi</category><category>openstack</category></item><item><title>Running an open source and upstream oriented team in agile mode</title><link>https://julien.danjou.info/blog/opensource-upstream-team-agile/</link><guid isPermaLink="true">https://julien.danjou.info/blog/opensource-upstream-team-agile/</guid><description>For the last 3 years, I&apos;ve been working in the OpenStack Telemetry team at eNovance, and then at Red Hat. Our mission is to maintain the OpenStack Telemetry stack, both upstream and downstream (i.e.</description><pubDate>Tue, 18 Oct 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;For the last 3 years, I&apos;ve been working in the OpenStack Telemetry team at &lt;a href=&quot;http://enovance.com&quot;&gt;eNovance&lt;/a&gt;, and then at &lt;a href=&quot;http://redhat.com&quot;&gt;Red Hat&lt;/a&gt;. Our mission is to maintain the OpenStack Telemetry stack, both upstream and downstream (i.e. inside Red Hat products). Besides the technical challenges, the organization of the team always have played a major role in our accomplishments.&lt;/p&gt;
&lt;p&gt;Here, I&apos;d like to share some of my hindsight with you, faithful readers.&lt;/p&gt;
&lt;h2&gt;Meet the team&lt;/h2&gt;
&lt;p&gt;The team I work in changed a bit during those 3 years, but the core components always have been the same: a few software engineers, a QE engineer, a product owner, and an engineering manager. That meant the team size has been always been between 6 and 8 people.&lt;/p&gt;
&lt;p&gt;I cannot emphasize enough how team size is important. Not having more than 8 persons in a team fits with the &lt;a href=&quot;https://www.fastcompany.com/3037542/productivity-hack-of-the-week-the-two-pizza-approach-to-productive-teamwork&quot;&gt;two pizzas rule from Jeff Bezzos&lt;/a&gt;, which turned out to be key in our team composition.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/content/images/03/pizza-rule.jpg&quot; alt=&quot;pizza-rule&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The group dynamic that is applied by teams not bigger than this is excellent. It offers the possibility to know and connect with everyone – each time member has only up to 7 people to talk to on a daily basis, which means only 28 communication axis between people. Having a team of e.g. 16 people means 120 different links in your team. Double your team size, and multiply by 4 your communication overhead. My experience shows that the less communication axis you have in a team, the less overhead your will have and the swifter your team will be.&lt;/p&gt;
&lt;p&gt;All team members being remote workers, is is even more challenging to build relationship and bound. We had the opportunity to know each other during the OpenStack summit twice a year and doing regular video-conference via &lt;a href=&quot;http://hangout.google.com&quot;&gt;Google Hangout&lt;/a&gt; or &lt;a href=&quot;http://bluejeans.com&quot;&gt;BlueJeans&lt;/a&gt; really helped.&lt;/p&gt;
&lt;p&gt;The atmosphere you set-up in your team will also forge the outcome of your team work. Run your team with trust, peace and humor (remember I&apos;m on the team 🤣) and awesome things will happen. Run your team with fear, pressure, and finger-pointing, nothing good will happen.&lt;/p&gt;
&lt;p&gt;There&apos;s little chance that when a team is built, everyone will be on the same level. We were no exception, we had more and less experienced engineers. But the most experienced engineers took the time needed to invest and mentor the less experienced. That also helped to build trust and communication links between members of the team. And over the long run, everyone is getting more efficient: the less experienced engineers are getting better and the more experienced can delegate a lot of stuff to their fellows.&lt;/p&gt;
&lt;p&gt;Then they can chill or work on bigger stuff. Win-win.&lt;/p&gt;
&lt;p&gt;It&apos;s actually no more different than that the way you should run an open source team, as I already claimed in a &lt;a href=&quot;https://julien.danjou.info/blog/foss-projects-management-bad-practice&quot;&gt;previous article on FOSS projects management&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/content/images/03/everything-is-awesome.jpg&quot; alt=&quot;everything-is-awesome&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Practicing agility&lt;/h2&gt;
&lt;p&gt;I might be bad at practicing agility: contrary to many people, I don&apos;t see agility as a set of processes. I see that as a state of mind, as a team organization based on empowerment. No more, no less.&lt;/p&gt;
&lt;p&gt;And each time I meet people and explain that our team is &quot;agile&quot;, they start shivering, explaining how they hate sprints, daily stand-ups, scrum, and &lt;a href=&quot;https://en.wikipedia.org/wiki/Planning_poker&quot;&gt;planning poker&lt;/a&gt;, that this is all a waste of time and energy.&lt;/p&gt;
&lt;p&gt;Well, it turns out that you can be agile without all of that.&lt;/p&gt;
&lt;h3&gt;Planning poker&lt;/h3&gt;
&lt;p&gt;In our team, we tried at first to run 2-weeks sprints and used planning poker to schedule our &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/User_story&quot;&gt;user stories&lt;/a&gt;&lt;/em&gt; from our product backlog (= todo list). It never worked as expected.&lt;/p&gt;
&lt;p&gt;First, most people had the feeling to lose their time because they already knew exactly what they were supposed to do. Having any doubt, they would have just gone and talked to the product owner or another fellow engineer.&lt;/p&gt;
&lt;p&gt;Secondly, some stories were really specialized and only one of the team member was able to understand it in details and evaluate it. So most of the time, a lot of the team members playing planning poker would just vote a random number based on the length of the explanation of the story teller. For example, if an engineer said &quot;I just need to change that flag in the configuration file&quot; then everyone would vote 1. If they started rambling for 5 minutes about &quot;how the configuration option is easy to switch, but that there might be other things to change at the same time, and things to check for impact bigger than expected, and code refactoring to do&quot;, then most people would just announce a score of 13 on that &lt;em&gt;story&lt;/em&gt;. Just because the guy talked for 3 minutes straight and everything sounded complicated and out of their scope.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/content/images/03/planningpoker.jpg&quot; alt=&quot;planningpoker&quot; /&gt;&lt;/p&gt;
&lt;p&gt;That meant that the poker score had no meaning to us. We never managed to have a number of points that we knew we could accomplish during a sprint (the &lt;em&gt;team velocity&lt;/em&gt; as they call it).&lt;/p&gt;
&lt;p&gt;The only benefit that we identified from planning poker, in our case, is that it forces people to keep sit down and communicate about a &lt;em&gt;user story&lt;/em&gt;. Though, it turned out that making people communicate was not a problem we needed to solve in our team, so we decided to stop doing that. But it can be a pretty good tool to make people talking to each other.&lt;/p&gt;
&lt;p&gt;Therefore, the 2-weeks sprint never made much sense as we were unable to schedule our work reliably. Furthermore, doing most of our daily job in open source communities, we were unable to schedule anything. When sending patches to an upstream project, you have no clue when they will be reviewed. What you know for sure, is that in order to maximize your code merge throughput with this high latency of code review, you need to parallelize your patch submission a lot. So as soon as you receive some feedback from your reviewers, you need to (almost) drop everything, rework your code and resubmit it.&lt;/p&gt;
&lt;p&gt;There&apos;s no need to explain what this does not absolutely work with a sprint approach. Most of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Scrum_(software_development)&quot;&gt;scrum framework&lt;/a&gt; lays on the fact that you own workflow from top to bottom, which is far from being true when working in open source communities.&lt;/p&gt;
&lt;h3&gt;Daily stand-up meetings&lt;/h3&gt;
&lt;p&gt;We used to run a daily stand-up meeting every day, then every other day. Doing that remotely kills the stand-up part, obviously, so there is less guarantee the meeting will be short. Considering all team members are working remotely in different time zones, with some freedom to organize their schedule, it was very difficult to synchronize those meetings. With member spread from the US to Eastern Europe, the meeting was in the middle of the afternoon for me. I found it frustrating to have to stop my activities in the middle of every afternoon to chat with my team. We all know the cost of context switching to us, humans.&lt;/p&gt;
&lt;p&gt;So we drifted from our 10 minutes daily meeting to a one-hour weekly meeting with the whole team. It&apos;s way easier to synchronize for a large chunk of time once a week and to have this high-throughput communication channel.&lt;/p&gt;
&lt;h2&gt;Our (own) agile framework&lt;/h2&gt;
&lt;p&gt;Drifting from the original scrum implementation, we ended up running our own agility framework. It turned out to have similarity with &lt;a href=&quot;https://en.wikipedia.org/wiki/Kanban_(development)&quot;&gt;kanban&lt;/a&gt; – you don&apos;t always have to invent new things!&lt;/p&gt;
&lt;p&gt;Our main support is a &lt;a href=&quot;http://trello.com&quot;&gt;Trello board&lt;/a&gt; that we share with the whole team. It consists of different columns, where we put card representing small user stories or simple to-do items. Each column is the state of the current card, and we move them left to right:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Ideas&lt;/em&gt;: where we put things we&apos;d like to do or dig into, but there&apos;s no urgency. It might lead to new, smaller ideas, in the &quot;To Do&quot; column.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;To Do&lt;/em&gt;: where we put real things we need to do. We might run a grooming session with our product manager if we need help prioritizing things, but it&apos;s usually not necessary.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Epic&lt;/em&gt;: here we create a few bigger cards that regroup several &lt;em&gt;To Do&lt;/em&gt; items. We don&apos;t move them around, we just archive them when they are fully implemented. There are only 5-6 big cards here at max, which are the long term goals we work on.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Doing&lt;/em&gt;: where we move cards from &lt;em&gt;To Do&lt;/em&gt; when we start doing them. At this stage, we also add people working on the task to the card, so we see a little face of people involved.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Under review&lt;/em&gt;: 90% of our job being done upstream, we usually move cards done and waiting for feedback from the community to this column. When the patches are approved and the card is complete, we move the card to &lt;em&gt;Done&lt;/em&gt;. If a patch needs further improvement, we move back the card to &lt;em&gt;Doing&lt;/em&gt; and work on it, and then move it back to &lt;em&gt;Under review&lt;/em&gt; when resubmitted.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;On hold / blocked&lt;/em&gt;: some of the tasks we work on might be blocked by external factors. We move cards there to keep track of them.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Done during week #XX&lt;/em&gt;: we create a new list every Monday to stack our done cards by week. This is just easier to display and it allows us to see the cards that we complete each week. We archive lists older than a month, from time to time. It gives a great visual feedback and what has been accomplished and merged every week.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/content/images/03/telemetry-trello.jpg&quot; alt=&quot;telemetry-trello&quot; /&gt;&lt;/p&gt;
&lt;p&gt;We started to automate some of our Trello workflow in a tool called &lt;a href=&quot;https://github.com/jd/trelloha&quot;&gt;Trelloha&lt;/a&gt;. For example, it allows us to track upstream patches sent through Gerrit or GitHub and tick the checkbox items in any card when those are merged.&lt;/p&gt;
&lt;p&gt;We actually don&apos;t put many efforts on our Trello board. It&apos;s just a slightly organized chaos, as are upstream projects. We use it as a lightweight system for taking notes, organizing our thought and letting know what we&apos;re doing and why we&apos;re doing it. That&apos;s where Trello is wonderful because using it has a very low friction: creating, updating and moving card is a one click operation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;One bias of most engineers is to overthink and over-engineer their workflow, trying to rationalize it. Most of the time, they end up automating which means building processes and bureaucracy. It just slows things down and builds frustration upon everyone. Just embrace chaos and spend time on what matters.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Most of the things we do are linked to external Launchpad bugs, Gerrit reviews or GitHub issues. That means the cards in Trello carry very little information, as everything happens outside, in the wild Internet of open source communities.&lt;/p&gt;
&lt;p&gt;This is very important as we need to avoid any kind of retention of knowledge and information from contributors outside the company. This also makes sure that our internal way of running does not leak outside and (badly) influence outside communities.&lt;/p&gt;
&lt;h3&gt;Retrospectives&lt;/h3&gt;
&lt;p&gt;We also run a retrospective every 2 weeks, which might be the only thing we kept from the scrum practice. It&apos;s actually a good opportunity for us to share our feelings, concerns or jokes. We used to do it using the &lt;a href=&quot;http://retrospectivewiki.org/index.php?title=6_Thinking_Hats_Retrospective&quot;&gt;&lt;em&gt;six thinking hats&lt;/em&gt;&lt;/a&gt; method, but it slowly faded away. In the end, we now use a different Trello board with those columns:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Good 😄&lt;/li&gt;
&lt;li&gt;Hopes and Wishes 🎁&lt;/li&gt;
&lt;li&gt;Puzzles and Challenges 🌊&lt;/li&gt;
&lt;li&gt;To improve 😡&lt;/li&gt;
&lt;li&gt;Action Items 🤘&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All teammates fill the board with the card they want, and everyone is free to add themselves to any card. We then run through each card and let people who added their name to it talk about it. The column &quot;Action Items&quot; is usually filled as we speak and discover we should do things. We can then move cards created there to our regular board, in the &lt;em&gt;To Do&lt;/em&gt; column.&lt;/p&gt;
&lt;h3&gt;Central communication&lt;/h3&gt;
&lt;p&gt;Sure, people have different roles in a team, but we dislike bottleneck and single point of failure. Therefore, we are using an internal mailing list where we ask people to send their request and messages to. If people send things related to our team job to one of us personally, we just forward or Cc the list when replying so everyone is aware of what one might be talking about with people external to the team.&lt;/p&gt;
&lt;p&gt;This is very important, as it emphasizes that no team member should be considered &lt;em&gt;special&lt;/em&gt;. Nobody owns more information and knowledge than others, and anybody can jump into a conversation if it has valuable knowledge to share.&lt;/p&gt;
&lt;p&gt;The same applies for our internal IRC channel.&lt;/p&gt;
&lt;p&gt;We also make sure that we discuss only company-specific things on this list or on our internal IRC channel. Everything that can be public and is related to upstream is discussed on external communication medium (IRC, upstream mailing list, etc). This is very important to make sure that we are not blocking anybody outside the Red Hat to join us and contribute to the projects or ideas we work on. We also want to make sure that people working in our company are no more special than other contributors.&lt;/p&gt;
&lt;h2&gt;Improvement&lt;/h2&gt;
&lt;p&gt;We&apos;re pretty happy with our set-up right now, and the team runs pretty smoothly since a few months. We&apos;re still trying to improve, and having a general sense of trust among team members make sure we can openly speak about whatever problem we might have.&lt;/p&gt;
&lt;p&gt;Feel free to share your feedback and own experience of running your own teams in the comment section.&lt;/p&gt;
</content:encoded><category>open-source</category><category>career</category></item><item><title>My interview in le Journal du Hacker</title><link>https://julien.danjou.info/blog/interview-journal-du-hacker/</link><guid isPermaLink="true">https://julien.danjou.info/blog/interview-journal-du-hacker/</guid><description>Le Journal du Hacker interviewed me about my work on OpenStack, my job at Red Hat, and my self-published book The Hacker&apos;s Guide to Python.</description><pubDate>Thu, 17 Sep 2015 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A few days ago, the French equivalent of &lt;a href=&quot;https://news.ycombinator.com/&quot;&gt;Hacker News&lt;/a&gt;, called &quot;&lt;a href=&quot;https://www.journalduhacker.net/&quot;&gt;Le Journal du Hacker&lt;/a&gt;&quot;, &lt;a href=&quot;https://www.journalduhacker.net/s/l5qktw/journal_du_hacker_entretien_avec_julien_danjou_d_veloppeur_openstack&quot;&gt;interviewed me&lt;/a&gt; about my work on &lt;a href=&quot;http://openstack.org&quot;&gt;OpenStack&lt;/a&gt;, my job at &lt;a href=&quot;http://redhat.com&quot;&gt;Red Hat&lt;/a&gt; and my self-published book &lt;a href=&quot;https://thehackerguidetopython.com&quot;&gt;The Hacker&apos;s Guide to Python&lt;/a&gt;. I&apos;ve spent some time translating it into English so you can read it if you don&apos;t understand French! I hope you&apos;ll enjoy it.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi Julien, and thanks for participating in this interview for the Journal du Hacker. For our readers who don&apos;t know you, can you introduce you briefly?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You&apos;re welcome! My name is Julien, I&apos;m 31 years old, and I live in Paris. I now have been developing free software for around fifteen years. I had the pleasure to work (among other things) on &lt;a href=&quot;http://debian.org&quot;&gt;Debian&lt;/a&gt;, &lt;a href=&quot;https://www.gnu.org/software/emacs/&quot;&gt;Emacs&lt;/a&gt; and &lt;a href=&quot;http://awesome.naquadah.org&quot;&gt;awesome&lt;/a&gt; these last years, and more recently on OpenStack. Since a few months now, I work at Red Hat, as a Principal Software Engineer on &lt;a href=&quot;http://opensack.org&quot;&gt;OpenStack&lt;/a&gt;. I am in charge of doing upstream development for that cloud-computing platform, mainly around the Ceilometer, Aodh and Gnocchi projects.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Being myself a system architect, I follow your work in &lt;a href=&quot;http://openstack.org&quot;&gt;OpenStack&lt;/a&gt; since a while. It&apos;s uncommon to have the point of view of someone as implied as you are. Can you give us a summary of the state of the project, and then detail your activities in this project?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The &lt;a href=&quot;http://openstack.org&quot;&gt;OpenStack&lt;/a&gt; project has grown and changed a lot since I started 4 years ago. It started as a few projects providing the basics, like &lt;a href=&quot;https://launchpad.net/nova&quot;&gt;Nova&lt;/a&gt; (compute), &lt;a href=&quot;https://launchpad.net/swift&quot;&gt;Swift&lt;/a&gt; (object storage), &lt;a href=&quot;https://launchpad.net/cinder&quot;&gt;Cinder&lt;/a&gt; (volume), &lt;a href=&quot;https://launchpad.net/keystone&quot;&gt;Keystone&lt;/a&gt; (identity) or even &lt;a href=&quot;https://launchpad.net/neutron&quot;&gt;Neutron&lt;/a&gt; (network) who are basis for a cloud-computing platform, and finally became composed of a lot more projects.&lt;/p&gt;
&lt;p&gt;For a while, the inclusion of projects was the subject of a strict review from the technical committee. But since a few months, the rules have been relaxed, and we see a lot more projects connected to cloud-computing &lt;a href=&quot;http://governance.openstack.org/reference/projects/&quot;&gt;joining us&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As far as I&apos;m concerned, I&apos;ve started with a few others people the &lt;a href=&quot;http://governance.openstack.org/reference/projects/ceilometer.html&quot;&gt;Ceilometer&lt;/a&gt; project in 2012, devoted to handling metrics of OpenStack platforms. Our goal is to be able to collect all the metrics and record them to analyze them later. We also have a module providing the ability to trigger actions on threshold crossing (alarm).&lt;/p&gt;
&lt;p&gt;The project grew in a monolithic way, and in a linear way for the number of contributors, during the first two years. I was the PTL (Project Technical Leader) for a year. This leader position asks for a lot of time for bureaucratic things and people management, so I decided to leave my spot in order to be able to spend more time solving the technical challenges that Ceilometer offered.&lt;/p&gt;
&lt;p&gt;I&apos;ve started the &lt;a href=&quot;https://launchpad.net/gnocchi&quot;&gt;Gnocchi&lt;/a&gt; project in 2014. The first stable version (1.0.0) was released a few months ago. It&apos;s a timeseries database offering a REST API and a strong ability to scale. It was a necessary development to solve the problems tied to the large amount of metrics created by a cloud-computing platform, where tens of thousands of virtual machines have to be metered as often as possible. This project works as a standalone deployment or with the rest of OpenStack.&lt;/p&gt;
&lt;p&gt;More recently, I&apos;ve started &lt;a href=&quot;https://launchpad.net/aodh&quot;&gt;Aodh&lt;/a&gt;, the result of moving out the code and features of Ceilometer related to threshold action triggering (alarming). That&apos;s the logical suite to what we started with Gnocchi. It means Ceilometer is to be split into independent modules that can work together – with or without OpenStack. It seems to me that the features provided by Ceilometer, Aodh and Gnocchi can also be interesting for operators running more classical infrastructures. That&apos;s why I&apos;ve pushed the projects into that direction, and also to have a more service-oriented architecture (&lt;a href=&quot;https://fr.wikipedia.org/wiki/Architecture_orient%C3%A9e_services&quot;&gt;SOA&lt;/a&gt;).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I&apos;d like to stop for a moment on Ceilometer. I think that this solution was very expected, especially by the cloud-computing providers using OpenStack for billing resources sold to their customers. I remember reading a blog post where you were talking about the high-speed construction of this brick, and features that were not supposed to be there. Nowadays, with Gnocchi and Aodh, what is the quality of the brick Ceilometer and the programs it relies on?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Indeed, one of the first use-case for Ceilometer was tied to the ability to get metrics to feed a billing tool. That&apos;s now a reached goal since we have billing tools for OpenStack using Ceilometer, such as &lt;a href=&quot;https://wiki.openstack.org/wiki/CloudKitty&quot;&gt;CloudKitty&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;However, other use-cases appeared rapidly, such as the ability to trigger alarms. This feature was necessary, for example, to implement the auto scaling feature that &lt;a href=&quot;http://launchpad.net/heat&quot;&gt;Heat&lt;/a&gt; needed. At the time, for technical and political reasons, it was not possible to implement this feature in a new project, and the functionality ended up in Ceilometer, since it was using the metrics collected and stored by Ceilometer itself.&lt;/p&gt;
&lt;p&gt;Though, like I said, this feature is now in its own project, Aodh. The alarm feature is used since a few cycles in production, and the Aodh project brings new features on the table. It allows to trigger threshold actions and is one of the few solutions able to work at high scale with several thousands of alarms.&lt;br /&gt;
It&apos;s impossible to make Nagios run with millions of instances to fetch metrics and triggers alarms. Ceilometer and Aodh can do that easily on a few tens of nodes automatically.&lt;/p&gt;
&lt;p&gt;On the other side, Ceilometer has been for a long time painted as slow and complicated to use, because its metrics storage system was by default using &lt;a href=&quot;https://www.mongodb.org/&quot;&gt;MongoDB&lt;/a&gt;. Clearly, the data structure model picked was not optimal for what the users were doing with the data.&lt;/p&gt;
&lt;p&gt;That&apos;s why I started Gnocchi last year, which is perfectly designed for this use case. It allows linear access time to metrics (O(1) complexity) and fast access time to the resources data via an index.&lt;/p&gt;
&lt;p&gt;Today, with 3 projects having their own perimeter of features defined – and which can work together – Ceilometer, Aodh and Gnocchi finally erased the biggest problems and defects of the initial project.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;To end with OpenStack, one last question. You&apos;re a &lt;a href=&quot;http://www.python.org/&quot;&gt;Python&lt;/a&gt; developer for a long time and a fervent user of software testing and &lt;a href=&quot;https://en.wikipedia.org/wiki/Test_driven_development&quot;&gt;test-driven development&lt;/a&gt;. Several of your blogs posts point how important their usage are. Can you tell us more about the usage of tests in OpenStack, and the test prerequisites to contribute to OpenStack?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I don&apos;t know any project that is as tested on every layer as OpenStack is. At the start of the project, there was a vague test coverage, made of a few unit tests. For each release, a bunch of new features were provided, and you had to keep your fingers crossed to have them working. That&apos;s already almost unacceptable. But the big issue was that there was also a lot of regressions, et things that were working were not anymore. It was often corner cases that developers forgot about that stopped working.&lt;/p&gt;
&lt;p&gt;Then the project decided to change its policy and started to refuse all patches – new features or bug fix – that would not implement a minimal set of unit tests, proving the patch would work. Quickly, regressions were history, and the number of bugs largely reduced months after months.&lt;/p&gt;
&lt;p&gt;Then came the functional tests, with the &lt;a href=&quot;http://launchpad.net/tempest&quot;&gt;Tempest&lt;/a&gt; project, which runs a test battery on a complete OpenStack deployment.&lt;/p&gt;
&lt;p&gt;OpenStack now possesses a &lt;a href=&quot;http://status.openstack.org/zuul/&quot;&gt;complete test infrastructure&lt;/a&gt;, with operators hired full-time to maintain them. The developers have to write the test, and the operators maintain an architecture based on Gerrit, Zuul, and Jenkins, which runs the test battery of each project for each patch sent.&lt;/p&gt;
&lt;p&gt;Indeed, for each version of a patch sent, a full OpenStack is deployed into a virtual machine, and a battery of thousands of unit and functional tests is run to check that no regressions are possible.&lt;/p&gt;
&lt;p&gt;To contribute to OpenStack, you need to know how to write a unit test – the policy on functional tests is laxer. The tools used are standard Python tools, unittest for the framework and &lt;a href=&quot;https://pypi.python.org/pypi/tox&quot;&gt;tox&lt;/a&gt; to run a virtual environment (venv) and run them.&lt;/p&gt;
&lt;p&gt;It&apos;s also possible to use &lt;a href=&quot;http://docs.openstack.org/developer/devstack/&quot;&gt;DevStack&lt;/a&gt; to deploy an OpenStack platform on a virtual machine and run functional tests. However, since the project infrastructure also do that when a patch is submitted, it&apos;s not mandatory to do that yourself locally.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The tools and tests you write for OpenStack are written in Python, a language which is very popular today. You seem to like it more than you have to, since you wrote a book about it, &lt;a href=&quot;https://thehackerguidetopython.com&quot;&gt;The Hacker&apos;s Guide to Python&lt;/a&gt;, that I really enjoyed. Can you explain what brought you to Python, the main strong points you attribute to this language (quickly) and how you went from developer to author?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I stumbled upon Python by chance, around 2005. I don&apos;t remember how I hear about it, but I bought a first book to discover it and started toying with that language. At that time, I didn&apos;t find any project to contribute to or to start. My first project with Python was rebuildd for Debian in 2007, a bit later.&lt;/p&gt;
&lt;p&gt;I like Python for its simplicity, its object orientation rather clean, its easiness to be deployed and its rich open source ecosystem. Once you get the basics, it&apos;s very easy to evolve and to use it for anything, because the ecosystem makes it easy to find libraries to solve any kind of problem.&lt;/p&gt;
&lt;p&gt;I became an author by chance, writing blog posts from time to time about Python. I finally realized that after a few years studying Python internals (CPython), I learned a lot of things. While writing a post about&lt;br /&gt;
&lt;a href=&quot;https://julien.danjou.info/blog/2013/guide-python-static-class-abstract-methods&quot;&gt;the differences between method types in Python&lt;/a&gt; – which is still one of the most read post on my blog – I realized that a lot of things that seemed obvious to me where not for other developers.&lt;/p&gt;
&lt;p&gt;I wrote that initial post after thousands of hours spent doing code reviews on OpenStack. I, therefore, decided to note all the developers pain points and to write a book about that. A compilation of what years of experience taught me and taught to the other developers I decided to interview in the book.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I&apos;ve been very interested by the publication of your book, for the subject itself, but also the process you chose. You self-published the book, which seems very relevant nowadays. Is that a choice from the start? Did you look for an editor? Can you tell use more about that?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I&apos;ve been lucky to find out about others self-published authors, such as &lt;a href=&quot;http://nathanbarry.com/&quot;&gt;Nathan Barry&lt;/a&gt; – who even wrote a book on that subject, called &lt;a href=&quot;http://nathanbarry.com/authority/&quot;&gt;Authority&lt;/a&gt;. That&apos;s what convinced me it was possible and gave me hints for that project.&lt;/p&gt;
&lt;p&gt;I&apos;ve started to write in August 2013, and I ran the firs interviews with other developers at that time. I started to write the table of contents and then filled the pages with what I knew and what I wanted to share. I manage to finish the book around January 2014. The proof-reading took more time than I expected, so the book was only released in March 2014. I wrote a &lt;a href=&quot;https://julien.danjou.info/blog/making-of-the-hacker-guide-to-python&quot;&gt;complete report&lt;/a&gt; about that on my blog, where I explain the full process in detail, from writing to launching.&lt;/p&gt;
&lt;p&gt;I did not look for editors though I&apos;ve been proposed some. The idea of self-publishing really convince me, so I decided to go on my own, and I have no regret. It&apos;s true that you have to wear two hats at the same time and handle a lot more things, but with a minimal audience and some help from the Internet, anything&apos;s possible!&lt;/p&gt;
&lt;p&gt;I&apos;ve been reached by two editors since then, a &lt;a href=&quot;http://item.jd.com/11685556.html&quot;&gt;Chinese&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/juldanjou/status/552056642322583552&quot;&gt;Korean&lt;/a&gt; one. I gave them rights to translate and publish the books in their countries, so you can buy the Chinese and Korean version of the first edition of the book out there.&lt;/p&gt;
&lt;p&gt;Seeing how successful it was, I decided to launch a second edition in May 2015, and it&apos;s likely that a third edition will be released in 2016.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Nowadays, you work for &lt;a href=&quot;http://www.redhat.com&quot;&gt;Red Hat&lt;/a&gt;, a company that represents the success of using Free Software as a commercial business model. This company fascinates a lot in our community. What can you say about your employer from your point of view?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It only has been a year since I joined Red Hat (when they bought &lt;a href=&quot;http://www.enovance.com/&quot;&gt;eNovance&lt;/a&gt;), so my experience is quite recent.&lt;/p&gt;
&lt;p&gt;Though, Red Hat is really a special company on every level. It&apos;s hard to see from the outside how open it is, and how it works. It&apos;s really close to and it really looks like an open source project. For more details, you should read &lt;a href=&quot;https://www.redhat.com/en/explore/the-open-organization-book&quot;&gt;The Open Organization&lt;/a&gt;, a book wrote by Jim Whitehurst (CEO of Red Hat), which he just published. It describes perfectly how Red Hat works. To summarize, meritocracy and the lack of organization in silos is what makes Red Hat a strong organization and puts them as&lt;br /&gt;
&lt;a href=&quot;http://www.forbes.com/innovative-companies/list/&quot;&gt;one of the most innovative company&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the end, I&apos;m lucky enough to be autonomous for the project I work on with my team around OpenStack, and I can spend 100% working upstream and enhance the Python ecosystem.&lt;/p&gt;
</content:encoded><category>career</category><category>openstack</category><category>books</category><category>python</category></item><item><title>My interview about software tests and Python</title><link>https://julien.danjou.info/blog/interview-software-tests-in-python/</link><guid isPermaLink="true">https://julien.danjou.info/blog/interview-software-tests-in-python/</guid><description>Johannes Hubertz interviewed me for his upcoming German book about Python software testing, covering my work on OpenStack and testing best practices.</description><pubDate>Mon, 11 May 2015 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I&apos;ve recently been contacted by &lt;a href=&quot;http://hubertz.de/blog/&quot;&gt;Johannes Hubertz&lt;/a&gt;, who is writing a new book about Python in German called &lt;em&gt;&quot;Softwaretests mit Python&quot;&lt;/em&gt; which will be published by &lt;em&gt;Open Source Press, Munich&lt;/em&gt; this summer. His book will feature some interviews, and he was kind enough to let me write a bit about software testing. This is the interview that I gave for his book. Johannes translated to German and it will be included in Johannes&apos; book, and I decided to publish it on my blog today. Following is the original version.&lt;/p&gt;
&lt;h2&gt;How did you come to Python?&lt;/h2&gt;
&lt;p&gt;I don&apos;t recall exactly, but around ten years ago, I saw more and more people using it and decided to take a look. Back then, I was more used to Perl. I didn&apos;t really like Perl and was not getting a good grip on its object system.&lt;/p&gt;
&lt;p&gt;As soon as I found an idea to work on – if I remember correctly that was rebuildd – I started to code in Python, learning the language at the same time.&lt;/p&gt;
&lt;p&gt;I liked how Python worked, and how fast I was to able to develop and learn it, so I decided to keep using it for my next projects. I ended up diving into Python core for some reasons, even doing things like briefly hacking on projects like Cython at some point, and finally ended up working on OpenStack.&lt;/p&gt;
&lt;p&gt;OpenStack is a cloud computing platform entirely written in Python. So I&apos;ve been writing Python every day since working on it.&lt;/p&gt;
&lt;p&gt;That&apos;s what pushed me to write &lt;a href=&quot;https://thehackerguidetopython.com&quot;&gt;The Hacker&apos;s Guide to Python&lt;/a&gt; in 2013 and then self-publish it a year later in 2014, a book where I talk about doing smart and efficient Python.&lt;/p&gt;
&lt;p&gt;It had a great success, has even been translated in Chinese and Korean, so I&apos;m currently working on a second edition of the book. It has been an amazing adventure!&lt;/p&gt;
&lt;h2&gt;Zen of Python: Which line is the most important for you and why?&lt;/h2&gt;
&lt;p&gt;I like the &quot;There should be one – and preferably only one – obvious way to do it&quot;. The opposite is probably something that scared me in languages like Perl. But having one obvious way to do it is and something I tend to like in functional languages like Lisp, which are in my humble opinion, even better at that.&lt;/p&gt;
&lt;h2&gt;For a python newbie, what are the most difficult subjects in Python?&lt;/h2&gt;
&lt;p&gt;I haven&apos;t been a newbie since a while, so it&apos;s hard for me to say. I don&apos;t think the language is hard to learn. There are some subtlety in the language itself when you deeply dive into the internals, but for beginners most of the concept are pretty straight-forward. If I had to pick, in the language basics, the most difficult thing would be around the generator objects (yield).&lt;/p&gt;
&lt;p&gt;Nowadays I think the most difficult subject for new comers is what version of Python to use, which libraries to rely on, and how to package and distribute projects. Though things get better, fortunately.&lt;/p&gt;
&lt;h2&gt;When did you start using Test Driven Development and why?&lt;/h2&gt;
&lt;p&gt;I learned unit testing and TDD at school where teachers forced me to learn Java, and I hated it. The frameworks looked complicated, and I had the impression I was losing my time. Which I actually was, since I was writing disposable programs – that&apos;s the only thing you do at school.&lt;/p&gt;
&lt;p&gt;Years later, when I started to write real and bigger programs (e.g. rebuildd), I quickly ended up fixing bugs… I already fixed. That recalled me about unit tests and that it may be a good idea to start using them to stop fixing the same things over and over again.&lt;/p&gt;
&lt;p&gt;For a few years, I wrote less Python and more C code and Lua (for the &lt;a href=&quot;http://awesome.naquadah.org&quot;&gt;awesome window manager&lt;/a&gt;), and I didn&apos;t use any testing. I probably lost hundreds of hours testing manually and fixing regressions – that was a good lesson. Though I had good excuses at that time – it is/was way harder to do testing in C/Lua than in Python.&lt;/p&gt;
&lt;p&gt;Since that period, I have never stopped writing &quot;tests&quot;. When I started to hack on OpenStack, the project was adopting a &quot;no test? no merge!&quot; policy due to the high number of regressions it had during the first releases.&lt;/p&gt;
&lt;p&gt;I honestly don&apos;t think I could work on any project that does not have – at least a minimal – test coverage. It&apos;s impossible to hack efficiently on a code base that you&apos;re not able to test in just a simple command. It&apos;s also a real problem for new comers in the open source world. When there are no test, you can hack something and send a patch, and get a &quot;you broke this&quot; in response.&lt;/p&gt;
&lt;p&gt;Nowadays, this kind of response sounds unacceptable to me: if there is no test, then I didn&apos;t break anything!&lt;/p&gt;
&lt;p&gt;In the end, it&apos;s just too much frustration to work on non tested projects as I demonstrated in &lt;a href=&quot;https://julien.danjou.info/blog/python-bad-practice-concrete-case&quot;&gt;my study of whisper source code&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;What do you think to be the most often seen pitfalls of TDD and how to avoid them best?&lt;/h2&gt;
&lt;p&gt;The biggest problems are when and at what rate writing tests.&lt;/p&gt;
&lt;p&gt;On one hand, some people starts to write too precise tests way too soon. Doing that slows you down, especially when you are prototyping some idea or concept you just had. That does not mean that you should not do test at all, but you should probably start with a light coverage, until you are pretty sure that you&apos;re not going to rip every thing and start over. On the other hand, some people postpone writing tests for ever, and end up with no test all or a too thin layer of test. Which makes the project with a pretty low coverage.&lt;/p&gt;
&lt;p&gt;Basically, your test coverage should reflect the state of your project. If it&apos;s just starting, you should build a thin layer of test so you can hack it on it easily and remodel it if needed. The more your project grow, the more you should make it sold and lay more tests.&lt;/p&gt;
&lt;p&gt;Having too detailed tests is painful to make the project evolve at the start. Having not enough in a big project makes it painful to maintain it.&lt;/p&gt;
&lt;h2&gt;Do you think, TDD fits and scales well for the big projects like OpenStack?&lt;/h2&gt;
&lt;p&gt;Not only I think it fits and scales well, but I also think it&apos;s just impossible to not use TDD in such big projects.&lt;/p&gt;
&lt;p&gt;When unit and functional tests coverage was weak in OpenStack – at its beginning – it was just impossible to fix a bug or write a new feature without breaking a lot of things without even noticing. We would release version N, and a ton of old bugs present in N-2 – but fixed in N-1 – were reopened.&lt;/p&gt;
&lt;p&gt;For big projects, with a lot of different use cases, configuration options, etc, you need belt and braces. You cannot throw code in a repository thinking it&apos;s going to work ever, and you can&apos;t afford to test everything manually at each commit. That&apos;s just insane.&lt;/p&gt;
</content:encoded><category>career</category><category>python</category><category>books</category><category>openstack</category></item><item><title>Making the jump: working freelance</title><link>https://julien.danjou.info/blog/making-the-jump/</link><guid isPermaLink="true">https://julien.danjou.info/blog/making-the-jump/</guid><description>For the last 10 years, I&apos;ve been working on many Free Software projects. From Debian to OpenStack, through awesome, Emacs, XCB and many more.</description><pubDate>Mon, 02 Jul 2012 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;For the last 10 years, I&apos;ve been working on many Free Software projects. From &lt;a href=&quot;http://www.debian.org&quot;&gt;Debian&lt;/a&gt; to &lt;a href=&quot;http://openstack.org&quot;&gt;OpenStack&lt;/a&gt;, through &lt;a href=&quot;http://awesome.naquadah.org&quot;&gt;awesome&lt;/a&gt;, &lt;a href=&quot;http://www.gnu.org/software/emacs/&quot;&gt;Emacs&lt;/a&gt;, &lt;a href=&quot;http://xcb.freedesktop.org&quot;&gt;XCB&lt;/a&gt; and many more. This obviously allowed me to enhance my technical skills, but it also taught me about Free Software and Open Source development processes, and how to work with and close to the community.&lt;/p&gt;
&lt;p&gt;Working for almost 6 years at &lt;a href=&quot;http://easter-eggs.com&quot;&gt;Easter-eggs&lt;/a&gt; taught me how to work in an autonomous manner, how to lead and manage a project. And how to run a company, thanks to the cooperative status of this great one.&lt;/p&gt;
&lt;p&gt;These are the reasons why I decided to leave my latest job and run my own company to work as a freelance consultant &amp;amp; developer specialized in Free Software, starting today.&lt;/p&gt;
&lt;p&gt;Therefore, I am now able and available to provide expertise and development on Free Software, including upstream contribution. Especially on projects I already worked on recently, like &lt;a href=&quot;http://www.openstack.org&quot;&gt;OpenStack&lt;/a&gt;.&lt;/p&gt;
</content:encoded><category>career</category></item><item><title>New job, new blog</title><link>https://julien.danjou.info/blog/new-job-new-blog/</link><guid isPermaLink="true">https://julien.danjou.info/blog/new-job-new-blog/</guid><description>It has been a while since I blogged but I&apos;ve been very busy, with my new job and this new blog!  New job! I quitted my job last September, and found another one that I started in October. I&apos;m now the</description><pubDate>Wed, 07 Dec 2011 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It has been a while since I blogged but I&apos;ve been very busy, with my new job and this new blog!&lt;/p&gt;
&lt;h2&gt;New job!&lt;/h2&gt;
&lt;p&gt;I quitted my job last September, and found another one that I started in October. I&apos;m now the lead developer of &lt;a href=&quot;http://www.enovance.com/fr/produits-solutions/opencloud-opensource/enovance-labs&quot;&gt;eNovance Labs&lt;/a&gt;, where I work on the &lt;a href=&quot;http://openstack.org/&quot;&gt;OpenStack&lt;/a&gt; project. So far, this allowed me to contribute heavily to the &lt;a href=&quot;https://alioth.debian.org/projects/openstack&quot;&gt;Debian packaging of OpenStack&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;New blog!&lt;/h2&gt;
&lt;p&gt;In the meantime, I took some time to redesign my personal homepage and this blog, which is now using &lt;a href=&quot;https://github.com/hyde/hyde&quot;&gt;Hyde&lt;/a&gt;, the &lt;a href=&quot;http://python.org&quot;&gt;Python&lt;/a&gt; equivalent of &lt;a href=&quot;http://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt;, which is in &lt;a href=&quot;http://www.ruby-lang.org/&quot;&gt;Ruby&lt;/a&gt;. Since I dislike Ruby (sorry), I preferred to use a Python based generator, and I admit Hyde is really cool.&lt;br /&gt;
Since I really suck at Web design, this one is obviously based on &lt;a href=&quot;http://twitter.github.com/bootstrap/&quot;&gt;Twitter&apos;s bootstrap&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>career</category><category>openstack</category><category>python</category><category>debian</category></item><item><title>Quitting my job</title><link>https://julien.danjou.info/blog/quitting-my-job/</link><guid isPermaLink="true">https://julien.danjou.info/blog/quitting-my-job/</guid><description>After more than 5 years at Easter-eggs as a system engineer, I&apos;ll be leaving my job to join a new adventure.</description><pubDate>Mon, 29 Aug 2011 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;After more than 5 years at &lt;a href=&quot;http://www.easter-eggs.com&quot;&gt;Easter-eggs&lt;/a&gt; as a system engineer, I&apos;ll be leaving my job soon.&lt;/p&gt;
&lt;p&gt;It has been a fabulous adventure, also due to the &quot;cooperative&quot; nature of the company. I&apos;ve enjoyed worked here, with great people. I do wish them luck for the future. Looking at the numerous things I did for the past years, it has been quite productive!&lt;/p&gt;
&lt;p&gt;Therefore, I&apos;ll be looking for a new job in the next weeks, which will probably keep me busy a bit. :-)&lt;/p&gt;
</content:encoded><category>career</category></item><item><title>TODO list management</title><link>https://julien.danjou.info/blog/todo-list-management/</link><guid isPermaLink="true">https://julien.danjou.info/blog/todo-list-management/</guid><description>My fellow Debian developer Steve Kemp told us about his TODO list management.</description><pubDate>Fri, 10 Jul 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;My fellow Debian developer &lt;a href=&quot;http://blog.steve.org.uk&quot;&gt;Steve Kemp&lt;/a&gt; told us about his &lt;a href=&quot;http://blog.steve.org.uk/why_do_you_keep_torturing_yourself_.html&quot;&gt;TODO list management&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;While reading his post, I was constantly thinking &quot;been there, been there buddy&quot;. Yeah, I&apos;ve been.&lt;/p&gt;
&lt;p&gt;I had the same problem since months, impossibility to track the things I had to do, being computer related stuff or real life ones. The bad thing is that until you write them down, you keep them in mind, and that&apos;s exhausting. You know you have, let&apos;s say 5, things to do, but unless you write this 5 items down in a TODO list, you will keep thinking about it once in a while. And that&apos;s a real lost time.&lt;/p&gt;
&lt;p&gt;And that&apos;s totally inefficient: imagine you though &quot;it&apos;d be nice if I could buy a USB stick next time I buy some hardware&quot;. Well, unless you actually write this somewhere and have the habit to check the &quot;To Buy&quot; category of your TODO list, you&apos;re going to buy a replacement hard drive in a hurry some day, and forget about your USB stick.&lt;/p&gt;
&lt;p&gt;I think the good practice, which I really recommend to everyone, is to write down as soon as possible what you think you have to do. Don&apos;t write it on a small paper you will lose, write it in a TODO list, a paper or electronic one, whatever, but write it, and stop thinking about it. When you&apos;ll have time, you&apos;ll get your TODO list from your pocket and give a look at it, doing what you can do at that moment. Once in a while, you check that list.&lt;/p&gt;
&lt;p&gt;Personally, the tool I chose to handle my TODO list is a Palm Centro phone, which I got for only a hundred of euros. It runs the good old PalmOS, which basically know how to handle TODO list and plannings better than all phones I saw so far (and yes, probably better than your iPhone).&lt;/p&gt;
&lt;p&gt;My choice was based on the fact that I&apos;ve random ideas almost everywhere: that means while hacking, but also while walking in the street, while being in the train or while sleeping (yeah, already happened). And the only thing I always carry with me is my phone, in my pocket.&lt;/p&gt;
&lt;p&gt;However, Steve choice may be nice if you have Internet access on your phone, which I haven&apos;t since it&apos;s too expensive for what it is, in my opinion. :-)&lt;/p&gt;
</content:encoded><category>career</category></item></channel></rss>