Weekly Report — Apr 27 – May 3, 2026 (friday mode)
Two-holiday short week (Thu Apr 30 Reunification Day + Fri May 1 Labour Day). Effective workdays = Mon/Tue/Wed for Holistics work; Sat/Sun spent on Smartclass releases and reading. Net: shipped Calendly BI rollout + tenant-lookup fix on the Holistics side, and two Smartclass releases (v0.4, v0.4.5) on personal side. Next week’s MRR exchange-rate work is still zero-progress (3-week carry-over).
Work
Internal
DONE — Ingest full Calendly data into BigQuery (DAT-283, #P2 ) — closed Apr 28.
- BI-layer rollout PR internal-aml-project#78 merged Apr 28: migrated
dts_106_sales_leadsandaml_visit_trial_funnelto the newfct_calendly_bookingsmodel (grain = event × attendee × rep); 4 dashboards re-mapped (rep_calls,[sales] Level 0 - Deals drill-down, Quinnsales_pipeline, Vincent archived); deleted three legacy models (domain_calendly_demo_call_bookings,dim_demo_calls,dim_onboarding_calls). - Semantic shift: consolidated
count_demo_calls/count_onboarding_callsinto a singlecount_callsmetric (count_distinct(event_id)) — group calls now count once instead of per-invitee. Filter onprimary_call_category('Sales'/'Retention') for demo vs onboarding. - Shipped a new AI skill
analyze_rep_calls.skill.amlso chat queries auto-route todts_106_sales_leadsand the right metric/filter (Ampcode). - Stakeholder comms (Ampcode plan): #data announcement, per-stakeholder DMs to Vincent, Dave, Quinn, anh Dong, Thuan; closed the year-old Vincent thread with a 5-use-case briefing on the new
Rep Callsdashboard. Posted in #data-lead-analytics. - Companion to dbt PR #853 (already merged in W17).
- BI-layer rollout PR internal-aml-project#78 merged Apr 28: migrated
DONE — Fix Tenant Lookup ‘User List’ widget (DAT-585, #P2 ) — closed Apr 27.
- PR internal-aml-project#77 merged Apr 27. Root cause (Ampcode):
domain_holistics_users.tenant_skey > domain_holistics_tenants.skeywas disabled in Dec 2023 to avoid join ambiguity; the User List widget added Jun 2025 was unaware and routed throughfct_activities.owner_id, leaking internal admins (dong.ln, quinn, …) on impersonation/trial-extension activity. - Fix: re-enable the relationship in
tenants_features_usage.dataset.aml. Verified via dependency analysis across 8 dashboards that activity-anchored widgets (v_vg28,v7–v11) still pick the direct path; user-anchored widget now joinsusers → tenantsdirectly. Triggered by Slack report.
- PR internal-aml-project#77 merged Apr 27. Root cause (Ampcode):
WAITING (round 1 done) — Review DAT-584 (dbt#860, #P2 ).
- PR fixes the
deploy_dbdocsflow that broke after the Calendly consolidation in PR #853 (stalerelationships.dbmlreferences to removedfct_demo_call_bookings.event_uuid/fct_sales_leads.demo_call_skey). - Concern flagged in PR:
relationships.dbmlis manually maintained with no CI validation — proposed adding a CI check against the dbt catalog so future renames fail at PR time, not at runtime indeploy_dbdocs.
- PR fixes the
IN-PROGRESS — Review CircleCI PRs for anh Dong (DE-214, #P1 ).
- Prefect PR #397: review done.
- dbt PR #858 (DAT-581 — CircleCI mart layer): drafted detailed review notes locally via Ampcode but didn’t post to PR — slipped due to BuyCo + Wamly P1 escalations on Wed. Findings ready to ship Mon W19:
- Missing
unique/not_nulltests oncircleci_jobs.idandjob_key;circleci_testshas no row-grain test despitecross join unnest(metadata.test_metadata)fanning out (rspec-retry → up to 32 attempts/test). Recommend composite unique on(job_key, spec_file, spec_name, attempt_number)+ document grain. - Clustering:
cluster_by = ['name']is fine (129 distinct names / 1.7M rows). Suggested['project_name', 'name']for cross-project pruning (non-blocking). - Partition-key change
last_created_at → job_started_atrequires--full-refresh; companion Prefect PR includes the backfill flow. cross join unnestsilently drops ~5.9% rows wheretest_metadatais empty (failed test suites). RecommendLEFT JOIN UNNESTor expose ahas_test_resultsflag.- Selector drift: removing
dom_circleci__*breaksdom_circleci__tests+selector in the Prefect backfill — needs rename.
- Missing
TODO — 1Win duplicate-customer check (Slack, #P2 ). Quinn DM Apr 28: “I am confused about 1win. It seems that in our zoho billing, they were recorded as different customers.” Need to investigate whether 1Win has multiple Zoho customer records and reconcile with the churn / MRR pipeline. Not yet started.
NOT STARTED (carry-over W16/W17/W18) — MRR exchange rate work (DAT-576, #P1, manager priority). Now 3 weeks open; per [[Priority Rules]] this triggers the forcing-function rule. Action committed for next week: timeboxed Mon AM design session + Tue Linear scoping comment, or formally hand back to anh Triet for re-scoping.
TODO — Set up GitHub App for
bi.holistics.io(#P2 ) — captured forward in [[2026-05-25]]. Net-new item, not yet scoped.Presales
DONE — BuyCo ticket triage (Slack, #P1, customer [[BuyCo]]) — closed Apr 29. Stakeholders: Xairo (PM, main contact), Luc (Head of Data), Ahlam (Sr Data Eng), Vadi (BI Analyst), Rodolphe (Data Analyst); stack = dbt Core + MotherDuck.
- Watched the demo recording — captured 6 questions/observations from the call: caching mechanics with MotherDuck push-down (3:34), AQL UX friction even with SQL background + AI not reliable (6:54), filter hide/show toggle (48:30), AML/AQL open-source vision question (1:06:51), customer theming (1:10:42), and the recurring “give us a sample best-practice project to learn from” ask (1:21:30).
- Decomposed Chukwudi’s open-issues Notion page into 14 items, replied in 14 separate Slack threads in
#holistics-buyco-externalplus a dedicated AMQL-vision reply. Triage outcome (Ampcode triage, Ampcode product routing):- Workarounds shipped (8 items): column auto-size dropdown (3, 8, 12), conditional formatting with dummy condition for fixed coloring (4), drill-through / text widget HTML+CSS for action buttons (6), filter mapping for cross-tab filtering (7), Markdown/HTML in text widgets (9), default cache settings to reduce warehouse hits (13).
- Product gaps formally routed to PMs / squad
#C0967GBSKRP(4 items): bulk formatting (1), custom format save/reuse (2), always-color column (4), select-all field picker (11). Vy Huynh + Hien Nguyen (Amyra) confirmed item 1+2 overlap with the in-flight “data format enhancement” project; Di Hoang flagged the Field-vs-Viz format complexity needs a discovery session. - Investigations open (2 items): drilldown perceived as needing refresh (10) — requested screen recording to confirm bug vs UX confusion; date functions / period comparison (14).
- AMQL vision reply (Item 1.06:51 from the call): framed AQL as “SQL++” (compiles to SQL); not open-sourcing the language; no native cube.dev DSL translator yet.
- Anh Huy’s framing: “active prospect that’s evaluating us (high chance of conversion), please work with some urgency.”
- LEARNING: For vague / overwhelming tasks (the 14-item Notion page felt blocking), time-block + decompose into the smallest concrete next step, then act. Captured in [[2026-04-30]] after the Wait But Why procrastination article.
TODO — Onboarding call with Wamly (Slack, #P1, customer [[Wamly]]) — slipped into next week. Re-scheduled in [[2026-05-04]] .
- Deal context (Ampcode prep): South African SaaS recruitment/HR platform, ~120 enterprise clients, replacing QuickSight on Redshift. Trial expires Tue May 6 (this is W19 — time-sensitive). Win prob ~40%. Champion: Farren Maré (COO, decision-maker); technical: Stephen Roberts; owner: Wudi.
- 4 use cases: internal BI (~10 builders), standalone shareable links with RLS+password (knockout if drill-down missing), embedded analytics (~6 months out), client self-serve (Phase 3).
- Pricing: ~150 external + 30 internal users, ~€2,400/month base + ~€18/user/month (8% discount on first 150). Future embedded tiers €36K/€72K/€144K/yr.
- Watch-out (Vincent flagged): do NOT mention internal stance that Holistics won’t support interactions on shareable links. Pivot drill-down has 4 levels (project → candidate → stage → candidate URL) — this is THE critical gap. Discovery recording timestamps 11:30 + 15:51 cover the knockout discussion.
Personal / Tooling
DONE — Set up CLI client for Cloudflare R2 upload (Apr 27, P3, [[Personal]]).
rcloneconfigured against thesecondbrainR2 bucket;r2upzsh helper auto-routes uploads tor2:secondbrain/YYYY/MM/<md5>.<ext>, returns amedia.secondbrain.lelouvincx.comURL, and copies it to clipboard. Streamlines image attachments in Logseq notes (Ampcode). All week’s images (procrastination, ggsql, bonsai) were uploaded via this path — instant feedback that the tool was worth the setup.DONE — Install the official Holistics skill (Apr 28, P2, [[Personal]]). Installed holistics/skills marketplace via Claude Code (
holistics-reporting+holistics-development). Found and fixed a YAML frontmatter bug — unquoted colons indescriptionbroke strict loaders like Amp — merged upstream as holistics/skills#4 bumping plugin to0.0.4(Ampcode).DONE — Install RTK rewrite hook (Apr 30, P3, [[Personal]]) — Ampcode. Ported the Claude-Code shell hook to an Amp Plugin in TypeScript at
~/.config/amp/plugins/rtk-rewrite.ts. Listens ontool.callforBashand uses themodifyaction to substitutefind/ls/grep/...with theirrtkequivalents (exit-code protocol: 0 auto-allow, 1 passthrough, 3 ask+rewrite). RequiresPLUGINS=allenv var (Plugin API still opt-in). Smoke-tested withamp -x 'Use the Bash tool to run: ls -la /tmp'.DONE — Install Caveman skill and use for a while (May 3, P3, [[Personal]]) — GitHub source, Ampcode. Ultra-compressed agent communication mode (~75% token reduction). Installed via the standard
agent-skills/remote-skills.yamlmechanism +sync-skills.sh --remote(PR agent-skills#16). Intensity levels:lite/full(default) /ultra/ wenyan-{lite,full,ultra} for classical Chinese. Useful for high-volume runs; this Friday report deliberately stays in verbose mode for human readers.DONE — Smartclass v0.4 — image-based answer extraction (May 3, P1, [[Smartclass]]). Headline call: skipped Tesseract.js OCR in favor of multimodal LLM (Grok 4.1 Fast via OpenRouter). Rationale: better handwriting handling, zero client-side bundle (~2MB WASM saved), schema-aware extraction, ~$0.0007/submission. Architecture: students upload/capture a photo → worker proxies to vision model with exercise schema → returns
{q_id, sub_id?, answer, confidence}→ frontend pre-fills form for review. Originals stored in R2 indefinitely for teacher audit. New tablesubmission_files, new endpointPOST /api/submissions/:id/extract(20MB cap), models = grok-4.1-fast (default) / gemini-2.5-flash / gpt-4o-mini. PRs A–D (Planning · PR #53 · PR #54 · PR #55).DONE — Smartclass v0.4.5 — exercise UX polish (May 3, P1, [[Smartclass]]). Inserted between v0.4 and v0.5 (lectures), driven by Shub.edu.vn benchmarks. Scope: pre-start landing page (submission created on “Start” click instead of mount), two-column take layout with sticky sidebar / mobile bottom-sheet, 5-column question nav grid with status dots, results summary route at
/student/submissions/:id/summary, review-page sidebar with per-question status table, skipped-vs-incorrect visual distinction (grey−vs red✗), MCQ deselect button, default 150% root font-size (reclaim margin whitespace), sharedfile-dropzone.jsxprimitive, model allowlist trimmed to mistral-small-3.2-24b-instruct (new default) + grok-4.1-fast. Mobile timer regression risk mitigated: timer still derives from server-sidestarted_at;sessionStoragepersistence moved to/takemount; integration test added in PR D (Mobile timer fix Ampcode · PR #56–#59 review · Planning). Two same-day releases on the holiday weekend — unusually high personal-project velocity.DONE — Set up Drata and remove Vanta (Apr 23, P1, Misc) — carry-in from W17. Notion.
DONE — Tax checking (Apr 23, P1) — carry-in from W17.
Learning & Notes
LEARNING — For vague tasks, time-block and force a concrete first step. Triggered by re-reading Wait But Why — How to Beat Procrastination. Quote that landed: “Procrastinators love planning. But when procrastinators plan, they like to do it in a vague way that doesn’t consider details or reality too closely, and their planning leaves them perfectly set up to not actually accomplish anything.” Applied to the BuyCo 14-item triage — instead of “review BuyCo Notion page” I broke it into 14 micro-tasks (1 Slack thread each) and shipped them in a single Wednesday afternoon. Direct evidence the principle works.
NOTE — Customer communication framing: try framing as “here is the recipe, happy to pair if helpful” instead of “I’ll do it for you”. Directly addresses the W17 Showbie + Basata silence pattern. Capture for next manager 1-on-1 and W19 presales touch-points.
NOTE — Wes Kao newsletter — workplace communication. Subscribed; first read this week was How to Be Concise — central question: “What is the most important thing to say?” Pairs with last week’s “Ask for no, don’t ask for yes”. Added to the recurring reading rotation.
READ — ggsql alpha release (Posit) ([[Data Visualization]]). Declarative dashboard-as-code, similar in spirit to Shaper (noted Feb 24). Example syntax:
VISUALIZE island AS x, species AS color FROM ggsql:penguins DRAW barInteresting because of the LLM-friendly / markdown-embeddable angle (analogous to Mermaid for charts). Worth tracking — could become a referenced pattern in our docs revamp / “vibe analytics” conversation.
READ — Column-level lineage going from differentiator to table stakes. Two LinkedIn posts back-to-back: Adam Lichtenstein on automatic CLL with DuckDB and the dbt-erd author’s post. With coding agents, a single dev can ship a credible v1 over a weekend — see docglow. Implication for Holistics: lineage becomes a hygiene feature, not a moat. Worth raising during product/positioning discussions.
READ — How do you make a chart? (benn.substack) ([[Vibe Analytics]]). Argument: dedicated charting tools may get displaced by “open Claude Code, ask it to make a custom dashboard in JS/Python” — and AI is increasingly good at “interpreting the vibes” (text/audio/image aggregation). Useful framing for Holistics’ AI roadmap and for the AMQL-as-canonical-spec angle (BuyCo asked nearly the same vision question on Wed).
READ — Ask HN: Is building a solo business impossible? + Ampcode reflection thread.
NOTE — Writing is thinking — HN thread. If I outsource journal writing to an LLM I stop thinking. Self-rule: daily journals are 100% me; LLM is fair game for boilerplate / first drafts only.
NOTE — The Beauty of Bonsai Styles (Longwood Gardens) — types: Chokan (formal upright), Moyogi (informal upright), Shakan (slanting), Kengai (cascade), Yose-ue (forest). Personal favourites: Chokan and Yose-ue.
NOTE — Health is going down. Sat May 3 badminton: short 30-min session and breathing was already laboured. Compounding signals (W17 cold + low energy this week). Intervention: bring back short night jogs (post-work, lower-temp window), eat before exercise.
NOTE — Idea: auto-export a dashboard PNG and post to GitHub PR on every dashboard change. Blocked by absence of a public PNG-export endpoint in Holistics API docs — file as a product feedback item.
NOTE — Product feedback collected on Apr 28 (3 separate items): PR link loss when toggling open→draft, YAML parsing error in skills repo, inconsistent manual-filter mapping syntax. All logged in internal Slack threads (1, 2, 3, 4).
Next Week (W19 — May 4–10)
Sourced from [[Backlog]] + carry-overs. Ordered P1 → P3 per [[Priority Rules]].
P1 — Must Do
- Internal — MRR exchange rate (DAT-576) — 3-week carry-over (W16 → W18). Forcing function: Mon AM design session for
dim_exchange_rates+ Tue Linear scoping comment. If still blocked by Wed, escalate to anh Triet for re-scoping. - Internal — Resolve DAT-555 follow-up (carry-over). Captured in [[2026-04-27]].
- Internal — Resolve DAT-556 dbt test failure (carry-over). Root cause already analysed Apr 22 (Ampcode) — apply the fix.
- Internal — Close out CircleCI dbt PR #858 review round 1 for anh Dong. Carry-over from this week.
- Presales — Wamly onboarding call (slipped from W18). Hard deadline: trial expires Tue May 6 — must land call before then. Re-confirm slot Mon AM; support Wudi as note-taker / product feedback capture. Drill-down on pivot is the knockout (4-level project → candidate → stage → URL). Notion deal page.
- Internal — MRR exchange rate (DAT-576) — 3-week carry-over (W16 → W18). Forcing function: Mon AM design session for
P2 — Should Do
- Internal — 1Win duplicate-customer check (DM). Timebox 1h. Carry-over from W18.
- Internal — Lead Funnel by Sales Motion (DAT-560) — 5-week carry-over (since W14). Now that Calendly BI layer is live, re-evaluate; if still blocked, formally backlog with a date. Do not let this drift again.
- Internal — Increase data freshness (DAT-499) — manager P3.
- Internal — BI cleanup: delete
[WIP] Job Queue Performance 3.0; migrate v2 + Report Job Queue Performance Monitoring to 4.0. Carry-over. - Internal — Review DAT-584 round 2 (dbt#860) once author addresses round 1.
- Internal — Set up GitHub App for
bi.holistics.io[[2026-05-25]]. Scope first. - Presales — Track Basata (Taha) follow-up on anh Huy’s dual-dashboard plan (thread).
- Personal — Self-reflection + CV update for 2026 H1 performance review — elevated from P3. PR cycle is coming up; need a reflection draft + refreshed CV before manager check-in. Block out next weekend (Sat May 9 + Sun May 10) for deep-work session.
P3 — Nice to Have
- Docs — Add demo video for local dev — wait for Khai To’s MCP demo. 3-week carry-over (W15) — apply forcing function: 30-min scoping draft this week, otherwise formally backlog.
- Personal — Review and update [[Personal Context]] (new in backlog).
- Personal — Research 1Long alternatives for emergency savings.
- Teaching — Find a football dataset for Duc Anh (carry-over).
- Read — Wes Kao “Levels of detail in communication”.
- Read — Modeling Patterns docs (Presales).
Career & Personal Consulting
Progress Review (Start / Stop / Keep)
- Keep — High-leverage triage on Mon/Tue. Two enterprise-grade items shipped (Calendly BI rollout, Tenant Lookup fix) before the Wed P1 escalations landed. The reorder-on-the-fly to BuyCo + Wamly was correct: customer-facing P1 outranks scoped internal P1.
- Keep — Two Smartclass releases on the holiday weekend. Personal projects shipping is a real signal you have residual energy when context-switching is removed; use this to inform W19 focus blocks.
- Keep — Wait But Why → BuyCo decomposition. You read the article, identified the vague-task pattern in your own work the same day, and applied the fix immediately (14 micro-threads). That’s the rare cycle of insight → action within hours rather than weeks.
- Start — Apply the 3-week forcing function to MRR exchange rate next week. [[Priority Rules]] says: schedule it on a specific day, or formally hand back. Chose Mon AM. Hold the line.
- Stop — Doing the comprehensive triage but skipping the small follow-ups. dbt PR #858 round 1 was the cheapest item on the list and it slipped. Pattern: when a P1 escalation lands, you drop the small P1 task instead of the big P2 task. Next time, ship the 30-min review first, then context-switch.
Workload observations
- Imbalance: Internal (~60%) + Presales (~25%) + Personal/Smartclass (~15%). Personal output is unusually high for a work week — almost entirely on the holiday Sat. Healthy as a one-off; not sustainable as a weekly default if it eats into recovery.
- Carry-over hygiene is degrading. MRR (3w), Lead Funnel (5w), Demo video (3w) are all overdue per [[Priority Rules]]. If next week’s forcing function doesn’t move the needle, the underlying issue isn’t time — it’s scope ambiguity. Worth a 15-min “what’s actually blocking” pass on each item before starting.
- Project-glossary mismatch: this week’s tasks all map cleanly to canonical [[Projects]] (no flags). Backlog has a NEW project signal: [[Smartclass]] is now a recurring P1 contributor — consider giving it a fixed weekly time-box rather than letting it bloom on holidays.
Personal well-being
- Health signal is real. Sat badminton breathlessness + W17 cold + low Mon–Wed energy = a 3-week downward trend. Reintroduce: short night jogs (3x/week, post-work / lower-temp window), pre-workout meal rule, no late-night gaming (W17 commitment — verify it held).
- Holiday weekend was productive but not restful. Two Smartclass releases on May 3 means you traded rest for shipping. Next weekend (May 9–10) is now booked for the H1 self-reflection + CV refresh — that’s another non-rest weekend. Keep at least the Sat morning slow + skip Smartclass commits to avoid two-in-a-row burn signal.
Career development
- Pattern of compounding small principles: dbt deprecation 3-phase rule (W17), customer comms reframe (W18), vague-task time-block (W18). These are turning into a personal “playbook” — consider promoting them out of journals into a permanent [[Principles]] page so you (and future juniors / Thuan) can reference them.
- What “compounding” means here: each principle is small, cheap to write down (one trigger + one response), and pays back every time the trigger reoccurs. The asset isn’t any single rule — it’s the growing index. Recurring frictions (a deprecation, a customer going silent, a vague Notion page, a low-energy week) get converted from “think it through again” into a reflex. The cost of capture is one journal bullet; the payoff is N future incidents.
- The W17 → W18 linkage is the real signal, not the count. Each rule was forged in a specific incident, then validated within days when the next occurrence appeared:
- dbt deprecation 3-phase rule ([[Weekly Report - 2026-W17]], Ampcode T-019da543). Phase 1 deprecate in code, phase 2 remove the
.sql, phase 3 drop the table. Don’t sit between 2 and 3 — AML references BQ physical names, so removing the.sqlonly stops refresh and leaves the table silently misleading consumers. Trigger re-fired this week during the Calendly cleanup (3 legacy models deleted in PR internal-aml-project#78) — applied without re-deriving the reasoning. - Customer comms reframe ([[2026-04-27]]). “Here is the recipe, happy to pair if helpful” > “I’ll do it for you”. Forged from the W17 Showbie + Basata silence pattern (both went quiet after we volunteered hands-on work). Already shaped the BuyCo 14-thread triage tone this week — replies were structured as workarounds + screen-recording asks, not “I’ll log in and fix it for you”.
- Vague-task time-block + decompose ([[2026-04-30]], Wait But Why). Insight on Wed AM, applied Wed PM to the 14-item BuyCo Notion page. Cycle of insight → action in hours, not weeks. That’s the rare case worth noticing — most reading doesn’t convert, this one did because the trigger was already on the desk.
- dbt deprecation 3-phase rule ([[Weekly Report - 2026-W17]], Ampcode T-019da543). Phase 1 deprecate in code, phase 2 remove the
- Adjacent principles already canonical — these prove the pattern works at the page level, not just journal-bullet level:
- [[Priority Rules]] — 3+ week carry-over forcing function (elevate-and-schedule OR formally backlog). Already firing on MRR exchange rate next week.
- [[Health Rules]] — sleep > productivity, illness = hard stop on day 2, no gaming after 18:00 on weeknights, eat-before-exercise, 3x night jogs, weekend discipline.
- W18 additions still living in the report: “writing is thinking” (journals 100% me, LLM only for boilerplate) and “small P1 ships before big P2 context-switch” (forged from the dbt PR #858 slip when BuyCo + Wamly P1 escalations landed).
- Concrete proposal — create [[Principles]] as a triage page, not a final home. Confirmed this is needed, but it is not the ultimate solution. Treat [[Principles]] as the inbox / staging area for heuristics gained from experience: anything I notice once gets dropped here in a low-friction format. Once a heuristic is mature (survives 2+ occurrences and has a clear domain), route it to the dedicated page:
- prioritization / scheduling → [[Priority Rules]]
- sleep / illness / movement / energy → [[Health Rules]]
- (future) work-craft pages may emerge — e.g., a [[Communication Rules]] for the customer-comms reframe + Wes Kao learnings, a [[Code Review Rules]] for the small-P1-first heuristic.
- Format per entry in [[Principles]]: one-line trigger, one-line response, backlink to the journal note where it was forged, and a status field —
triage(just captured) →routed → [[Page]](moved out) →archived(didn’t survive second use). - Bar for promotion out of triage: a heuristic must fire a second time in real work before it earns a spot on a dedicated page. Stops the index from bloating with one-off observations dressed up as principles.
- Some heuristics belong outside the second-brain entirely — they should contribute back to team-owned docs:
- dbt deprecation 3-phase rule → propose adding to the dbt development docs (holistics/dbt README or contributing guide). It’s not a personal heuristic — it’s a team correctness rule and should outlive me.
- Customer comms reframe (recipe-not-IOU) → propose adding to presales comms playbook / a CS onboarding doc. Directly addresses the W17 silence pattern that is not unique to my threads.
- Small P1 ships before big P2 context-switch — could land in a team on-call / escalation handling note.
- Routing to team docs is a higher-leverage move than keeping them personal: it converts a private heuristic into a piece of team infrastructure, and the writing exercise itself is career-visible.
- Why this matters for career development specifically — when the PR conversation comes up (booked May 9–10), “here is my playbook of recurring patterns, and here is which ones I’ve upstreamed to team docs” is a stronger artifact than a list of shipped tickets. It signals systems-thinking and is directly transferable to Thuan / future juniors.
- Risks to watch:
- Principles ossifying into rules nobody re-evaluates → quarterly re-read during Friday wrap-up; demote anything that hasn’t fired in 90 days.
- Triage page becoming a graveyard → if an entry sits in
triagestatus > 60 days without a second use, archive it. The page is for active heuristics, not aspirations.
- AMQL-vision question came up again (BuyCo Wed call). This is now the 3rd customer asking the same vision question. Worth proposing a one-pager to anh Triet / Vincent on the canonical AMQL story we want presales/CS to tell — would be a non-trivial career-visibility artifact.
- The “writing is thinking” rule — keep journals AI-free. The reflection muscle is the differentiator. Use AI for boilerplate, not for thought.
- Pattern of compounding small principles: dbt deprecation 3-phase rule (W17), customer comms reframe (W18), vague-task time-block (W18). These are turning into a personal “playbook” — consider promoting them out of journals into a permanent [[Principles]] page so you (and future juniors / Thuan) can reference them.
Recommended resources to learn
Wait But Why — How to Beat Procrastination — re-read with the carry-over list in front of you. The “Instant Gratification Monkey” framing maps directly to MRR exchange rate.
Wes Kao — How to Be Concise + Levels of detail in communication — pair for the customer-comms reframe and PR-description / status-update style.
ggsql alpha release (Posit) + Shaper docs + VegaLite — survey of declarative chart-as-code DSLs. Useful prior art if you ever propose a similar surface for Holistics or for the docs/blog.
How do you make a chart? — benn.substack — pair with our internal AI roadmap thinking.
Adam Lichtenstein — Automatic Column-Level Lineage with DuckDB + docglow — quick read; sets the bar for “how cheap is CLL now”.
Holistics API docs — re-skim to confirm the dashboard-PNG-export gap; if confirmed, file as a feature request.
YouTube — search “Olympic & WTA player breathing drills” — concrete drills for the cardio-recovery commitment. (Or any 8-week couch-to-5k plan.)
Book — Atomic Habits — environment design chapter — re-skim for the no-late-night-gaming + morning-run habit stacking. Repeat from W17 — keep it on the queue until the habits stick.
Cal Newport — time-blocking podcast episodes — for next week’s Mon AM MRR forcing-function block.