Daily standups are a theater. Every developer knows it. You stare at Slack, try to remember what you did, lie a little, and type something vague like “worked on the dashboard bug.” Rinse. Repeat.
I stopped doing that. Now my commits tell the truth. I wrote a Shell script. It reads my Git logs, filters by my email, and generates my standup notes. That’s it. No Jira. No Notion. No retrospection gymnastics. Just Git, Terminal, and Copilot.
And yes, it saves me time. But more importantly, it eliminates human memory from the equation. Memory lies. Commits don’t.
The Stack (If You Care)
- VSCode (because Emacs is dead)
- Git (the only real source of truth)
- GitHub Copilot (to type what I don’t want to)
- Google Sheets (don’t ask)
- Slack (optional, unfortunately)
How It Works
- I write code.
- I commit often, with Copilot writing the messages.
- At the end of the day, I run a script.
- The script reads recent commits based on time of day.
- The output becomes my standup report.
- I paste it where the team expects me to.
That’s it. No plugin. No integration. Just plain text.
The Script That Does My Job
#!/bin/bash
REPO1_PATH="/path/to/project-one"
REPO2_PATH="/path/to/project-two"
AUTHOR="your.email@example.com"
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
alias date="date --date"
fi
HOUR=$(date +%H)
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
if [ "$HOUR" -lt 12 ]; then
START_DATE=$(date -d "yesterday" "+%Y-%m-%d")
else
START_DATE=$(date "+%Y-%m-%d")
fi
DAY_OF_WEEK=$(date -d "$START_DATE" "+%u")
else
if [ "$HOUR" -lt 12 ]; then
START_DATE=$(date -v -1d "+%Y-%m-%d")
else
START_DATE=$(date "+%Y-%m-%d")
fi
DAY_OF_WEEK=$(date -j -f "%Y-%m-%d" "$START_DATE" "+%u")
fi
if [ "$DAY_OF_WEEK" -eq 6 ] || [ "$DAY_OF_WEEK" -eq 7 ]; then
START_DATE=$(date -v -Fri "+%Y-%m-%d")
fi
START="${START_DATE}T00:00:00"
END="${START_DATE}T23:59:59"
echo "What we did on ${START_DATE}"
echo "==========================================="
{
git -C "$REPO1_PATH" log --author="$AUTHOR" --since="$START" --until="$END" --pretty=format:"- %s" --abbrev-commit --no-merges
git -C "$REPO2_PATH" log --author="$AUTHOR" --since="$START" --until="$END" --pretty=format:"- %s" --abbrev-commit --no-merges
} | sort | uniq
echo "==========================================="
echo "End of Update"
Output That Doesn’t Embarrass Me
What we did on 2025-07-23
===========================================
- Refactor: Adjust padding in Combined OI screen
- Add: Support for toggle between chart and table views
- Fix: Crash on missing data in open interest API
- Chore: Remove unused debug logs from dashboard
- Update: Improve spacing in TopBanner layout
===========================================
End of Update
Google Sheets: My Personal Logbook
Each row is a day. Each cell is a commit log. Meetings, code reviews, discussions—those get manually added. I don’t mind. It’s five lines. I don’t write novels.
Performance Reviews Without Anxiety
When the cycle begins, I open the sheet. I trim the log into a focused summary—no digging, just filtering.
It’s unemotional. And it’s honest. Try doing that with Jira.
For Teams
Want your team to stop pretending they were “looking into a few things”?
Let them run the same script with their email. Keep it local. Keep it personal. If you want, post it in a shared thread. But don’t centralize it. Autonomy matters.
Want to Try?
- Save the script as
update_scrum.sh
- Run
chmod +x update_scrum.sh
- Replace the paths and author email
- Run it:
./update_scrum.sh
- Pipe output to file (optional):
./update_scrum.sh > daily_log_2025-07-23.md
Final Thought
Most standups are lies. This one isn’t.
Write code. Commit often. Let Git speak for you.
Top comments (0)