Coding 101

Software Project Management for Engineers: Linear Git Workflows, RFCs, and Cutting Jira Bureaucracy

DD
Ankur Ishwar
9 min read Updated Mar 30, 2026
Dropout Developer • Editorial Coding 101

Software Project Management for Engineers: Linear Git Workflows, RFCs, and Cutting Jira Bureaucracy

Oct 16, 20239 min read

Most junior developers in India enter their first tech job expecting to build clean software architectures and write performant code. Instead, they land right in the middle of agile theater: a 9:30 AM daily standup that drags on for 45 minutes, sprint poker sessions arguing whether a CSS fix is two or three story points, and a Jira board with twenty columns that nobody keeps updated.

Project management in software engineering was originally invented to solve a real problem: keeping developers focused, setting realistic timelines, and coordinating dependencies across multiple engineers so code reaches production safely. But in mass-recruiter firms and chaotic early-stage startups, project management often degenerates into surveillance and paperwork.

If you want to lead engineering projects or run high-output teams without burning out, you need to strip away corporate ritual and replace it with engineer-first workflows: lightweight RFC documents, atomic pull requests, trunk-based branching, and clear release runbooks.

The Trap of Agile Theater vs Real Engineering Delivery

Agile software development started with a simple, practical manifesto in 2001: working software over exhaustive documentation, responding to change over following a rigid plan. Over the last two decades, corporate consultancy businesses turned that manifesto into an industry of certifications, Scrum Master roles, and bloated tooling.

Here is what agile theater looks like in practice:

  • Velocity metrics become weapons: When management measures team health by how many story points were closed in a two-week sprint, engineers naturally inflate their estimates. A simple bug fix becomes an eight-point epic.
  • Synchronous status meetings replace technical discussion: Developers spend an hour every morning reciting what they did yesterday instead of discussing architectural roadblocks or API contract breaks.
  • The ticket becomes the goal: Developers focus on moving cards to "Done" rather than checking whether the feature actually works in production, handles database connection drops, or provides value to real users.

Real engineering project management focuses on three basic outcomes: clarity of scope before typing code, rapid feedback loops through small code increments, and automated verification so releases do not break production at 2:00 AM.

Step 1: The One-Page RFC (Request for Comments)

The single biggest waste of engineering hours happens when a developer builds a feature for two weeks, opens a 1,500-line pull request, and discovers during review that their database design fails under high concurrent writes or violates an existing authentication protocol.

Before creating a single ticket or opening your code editor for any non-trivial feature, write a one-page technical RFC (Request for Comments). Store these directly in your git repository under a docs/rfcs/ folder so they are version-controlled alongside your code.

A functional engineering RFC needs only five short sections:

  1. Context and Problem: What specific user problem or technical bottleneck are we solving? Keep this to three or four clear sentences.
  2. Explicit Non-Goals: What are we deliberately choosing NOT to build in this iteration? Defining non-goals kills scope creep before it starts.
  3. Proposed Design and Schema: Show the exact database schema changes, API request/response payloads, and third-party integrations.
  4. Edge Cases and Failure Modes: What happens when the Redis cache is unreachable? How do we handle duplicate webhook events? What happens if a user submits a payment twice?
  5. Rollback Plan: If this code breaks production after deployment, what is the exact script or command to revert changes without data corruption?

Give teammates 24 to 48 hours to leave comments directly on the markdown PR. Once agreed upon, the RFC becomes the source of truth for the implementation tickets.

Step 2: Issue Scoping and the 300-Line PR Rule

Why do software projects blow past their deadlines? Because tasks are scoped too broadly. A ticket titled "Build Payment Gateway Integration" is not a task; it is an entire project disguised as a Jira card. Nobody can accurately estimate it, nobody can review it in one sitting, and testing it turns into a nightmare.

Break every feature into atomic tasks that result in pull requests with fewer than 300 lines of modified code. When a PR is under 300 lines, code reviewers can review it thoroughly in fifteen minutes. When a PR is 1,200 lines, reviewers glance at it, hit "Approve", and pray nothing explodes.

Take that payment gateway feature and break it down into clean, sequential PRs:

Task 1: Database migration for payment_transactions table (Schema + Indexes)
Task 2: Payment gateway SDK wrapper with unit tests for tokenization
Task 3: Webhook endpoint handling signature verification and idempotency
Task 4: Frontend checkout form integration behind a feature flag
Task 5: End-to-end integration test suite and feature flag activation

Each of these five tasks can be coded, tested, reviewed, and merged independently. Even if Task 4 takes an extra day because of UI polish, Tasks 1, 2, and 3 are already reviewed, merged, and verified in your main branch.

Step 3: Trunk-Based Development vs GitFlow Hell

Many legacy teams still follow GitFlow: developers maintain long-lived branches like develop, staging, feature-xyz, and release-1.2.0. Developers work on their private feature branches for three weeks. When release day arrives, merging five long-lived branches into develop triggers dozens of merge conflicts, broken dependencies, and finger-pointing.

High-performance engineering teams use Trunk-Based Development. In this model, there is only one primary branch: main (or trunk).

  • Every developer creates a branch off main that lives for at most 24 to 48 hours.
  • Pull requests are small, tested by automated CI pipelines, and merged straight back into main daily.
  • Incomplete features are wrapped in feature flags (simple boolean configuration checks or environment variables) so that unfinished logic remains dormant in production without delaying other releases.
// Simple feature flag guard in TypeScript
export async function handleCheckout(order: Order): Promise<CheckoutResult> {
  const isStripeV2Enabled = process.env.ENABLE_STRIPE_V2 === 'true';

  if (isStripeV2Enabled) {
    return executeStripeV2Flow(order);
  }

  return executeLegacyPaymentFlow(order);
}

By hiding work in progress behind feature flags, you eliminate the risk of massive merge conflicts. Your team is always testing against the current state of main, not code that branched off three weeks ago.

Step 4: Async Standups and Cutting Useless Meetings

The easiest way to double an engineering team's output is to give developers back four consecutive hours of uninterrupted focus time every single day. When engineers are constantly interrupted by standups at 10:00 AM, grooming at 11:30 AM, and sprint syncs at 3:00 PM, deep technical problem-solving becomes impossible.

Replace daily spoken standup meetings with an asynchronous Slack or Discord channel (for example, #engineering-standup). Every engineer posts three clear bullet points before 10:30 AM:

1. Shipped: Merged PR #142 (added idempotency check to Stripe webhooks).
2. Today: Writing migration scripts for customer table partitioning (PR #145).
3. Blocker: Waiting on DevOps to verify staging Redis cluster permissions.

Notice the format: each point references a real pull request, ticket, or concrete blocker. If someone has a blocker, the relevant team member jumps in via thread or a quick five-minute huddle. The rest of the team continues coding without losing their train of thought.

Step 5: The Production Release Runbook

A software project is not managed properly until the deployment process is boring and repeatable. If deploying code requires your senior developer to remember five undocumented terminal commands and a manual SQL script, your project management is broken.

Every software repository should maintain a RUNBOOK.md in its root folder documenting the exact release procedure. Here is a battle-tested runbook template:

Phase Action Item Verification Command / Check
Pre-Deploy Run pending database migrations in dry-run mode npm run db:migrate:status
Deploy Trigger GitHub Actions deploy workflow to ECS / Kubernetes Verify all build steps pass in CI pipeline
Post-Deploy Run HTTP health check endpoint and verify status 200 curl -f https://api.yourservice.com/healthz
Observability Monitor error rates on Sentry and latency dashboard Ensure 5xx error rate stays below 0.05% for 15 minutes
Rollback If error spikes occur, redeploy previous container image tag git revert HEAD && git push origin main

When the release steps are documented step-by-step in code, any engineer on the team can execute a production release or rollback safely, even at midnight when the lead architect is asleep.

Practical Checklist for Your Engineering Team

Here is your roadmap to clean up project management starting this week:

  • Adopt Markdown RFCs: Stop designing complex architecture inside chat apps. Write a 1-page markdown document and gather comments directly on Git.
  • Cap Pull Requests at 300 Lines: Split big user stories into incremental database, logic, and UI pull requests.
  • Embrace Trunk-Based Development: Kill long-lived branches. Merge small commits to main daily and use feature flags for safety.
  • Move Standups to Async: Let developers write their status in chat and save real-time meetings for architectural planning and unblocking dependencies.
  • Codify Release Runbooks: Document your deploy and rollback procedures so releases are deterministic and stress-free.

Great software project management does not require buying expensive software licenses or running twelve meetings a week. It requires discipline, clear technical writing, small code changes, and automating everything that can be automated.

Found this useful?
View all articles

Keep Reading

Related Articles

Learn with Dropout Developer

Build real software with AI

Step-by-step learning paths, vibe coding tutorials, and certified developer programs designed for the modern engineer.