Hasan's Journal

Stories, lessons, and scars from production.

Mehedi Hasan
Back to blog

Leading My First Project

The transition from implementing features to leading a project is a different skill than coding. Here's what I learned the hard way.

#Leadership#Project Management#Career

The Assignment

The project was a new inventory management module for the ERP system, and I was asked to lead it. "Lead" meant I was responsible for the technical design, the task breakdown, the timeline, and the coordination of three other developers — all of whom had, until recently, been my peers. The assignment was exciting and terrifying in equal measure, because the skills that got me to mid-level — writing good code, debugging efficiently, understanding the codebase — were not the skills that would make me successful as a project lead. The new skills were about communication, planning, and people, and I had to develop them while delivering a real project with real deadlines.

The first mistake I made was treating the project like a large ticket. I broke it down into tasks, assigned them to developers, and assumed that if everyone completed their tasks, the project would be done. That approach works for small features where the tasks are independent and the integration is trivial. It doesn't work for a module with interdependent components, shared state, and a backend API that has to be designed before the frontend can consume it. Within two weeks, we had three developers working on tasks that turned out to be incompatible, because I hadn't spent enough time on the design phase to ensure the tasks fit together coherently.

What I Learned About Planning

The lesson about planning was that the plan's value isn't the plan itself — it's the thinking the plan forces you to do. When I wrote the initial task breakdown, I was thinking about the happy path: the API gets built, the frontend consumes it, the tests pass, the module ships. I wasn't thinking about what happens when the API design needs to change mid-implementation, or when a developer is out sick for a week, or when the database migration takes longer than expected. A good plan accounts for those possibilities, not because it predicts them specifically, but because it identifies the dependencies and risks that make the project fragile. The plan is a stress test of your understanding of the project, and the places where the plan is vague are the places where your understanding is vague.

The second lesson was about communication cadence. I started with weekly status meetings, which felt like the right frequency — frequent enough to catch issues, infrequent enough to not be a burden. What I found was that weekly meetings were too infrequent to catch issues early and too frequent to have meaningful content every time. We switched to daily 15-minute standups focused on blockers (what's blocking you, what do you need from me), and the project velocity improved immediately. The daily cadence meant blockers were surfaced within 24 hours rather than within a week, and the short format meant the meetings stayed focused rather than devolving into status reports that could have been written.

What I Learned About People

The harder lessons were about people. One developer on the team was consistently slower than the others, and my initial reaction was frustration — why can't they keep up? When I finally had a direct conversation with them, I learned they were struggling with a specific part of the codebase that they didn't have context on, and they'd been hesitant to ask for help because they didn't want to look incompetent. That conversation was a turning point, because it made me realize that my job as a lead wasn't just to assign tasks and check progress — it was to create an environment where people could ask for help without penalty. The developer's speed improved dramatically after we paired on the confusing part of the codebase, and the lesson I took from it was that performance issues are often context issues in disguise.

The project shipped on time, but more importantly, the team came out of it stronger than they went in. Each developer had grown in a specific way — one had learned a new part of the codebase, one had taken on more responsibility than they'd had before, one had improved their testing discipline. That growth was the real outcome of the project, and it was the outcome I'm most proud of, because it compounded — the team that came out of this project was more capable than the team that went in, and that capability paid off on every subsequent project. Leadership isn't just about delivering the current project; it's about leaving the team stronger for the next one.