There is a particular kind of learning that only happens when you are forced to slow down and study the fundamentals. Today was that kind of day — spent reviewing and reflecting on the data analytics training slides. It was not packed with grand revelations, but full of small, precise details that revealed the discipline that serious data work quietly demands.
Through these slides, I touched topics ranging from performance expectations for data analysts at Vatico, to
defensive SQL edge cases (like division-by-zero handling with NULLIF), data modelling pipelines (using
dbt’s ref() and source() functions), and dashboard design philosophy (a dashboard is not a
dump of data — it is an insight to gather). On the surface, these topics feel unrelated. But running through
all of them was the same idea: the visible output is never the whole story. What matters is what happens underneath.
What Excellence Actually Looks Like Here
The first part of the day gave me the clearest picture yet of what Vatico expects from its data analysts. It is not an expectation for any intern to hit IC3 performance; rather, these guidelines and key elements are presented as benchmarks for us to strive toward and improve every day. To provide a clear, grounded view of these performance standards, both IC2 baseline expectations and IC3 aspirations are outlined below.
IC2 Expectations: Intermediate Baseline
0–1 accuracy issues/mo; 100% proactive error and gap communication; statistical significance applied.
90% delivered on agreed timelines; ≤ 10% projects exceeding 14 working days; proactive ETA delay communication.
Meeting notes/Trello updates after discussions; confirmed stakeholder understanding.
100% accurate metrics, no duplicate data, clear instructions on what each dashboard is for and who it serves.
Every data request starts with an approved skeleton before any pulling begins; max 1–2 logic redos; queries < 2 hours.
IC3 Expectations: The Autonomy Standard
The core of IC3 is not extra process, but autonomy. Rather than over-expounding, the target rests on four essential pillars:
Scoping and completing tasks end-to-end without requiring hand-holding.
Uncovering key business problems independently before being assigned.
Managing competing requests and prioritizing tasks independently.
Proactively engaging stakeholders and seeking alignment to guide decisions.
SQL That Defends Itself
Another key lesson of the day came from a slide on common SQL errors — specifically, division by zero. I have encountered the error before, but I had never thought carefully about the idiomatic solution until today.
NULLIF(expr, 0) returns NULL when the expression equals zero — and
NULL instead of zero means the division never crashes. The query protects itself by refusing to
divide.
Paired with this was a subtler trick: multiplying a value by 1.00 before dividing. In SQL, integer
division truncates — 1 / 2 yields 0, not 0.5. By forcing the calculation into
decimal space first, you preserve precision that would otherwise silently vanish.
-- Safe division with decimal precision
1.00 * quantity_decrease / NULLIF(sum_of_drop, 0) * 100
-- Without NULLIF: crashes when sum_of_drop is 0
-- Without 1.00 *: integer truncation silently loses decimal places
What I appreciated about this is that both patterns are defensive. They do not change what the query is trying to compute — they simply ensure it computes it honestly, even in edge cases. Good SQL, I am beginning to understand, anticipates failure.
dbt and the Discipline of ref() vs. source()
Following that, we covered how dbt references tables using ref() and source() instead of
hardcoding database queries.
ref() is used when referencing models within your dbt project across schemas (examples of
schemas are staging and report, with examples of databases being bb_sg and
va_vn). source() is used when dbt needs to reference an external table from another
raw schema — where the source_name acts as the schema name during test and query execution.
For instance, in a dbt project:
{{ ref('stg_orders') }}: Refers to another model inside the same project. In Vatico’s workflow, when building a table in thereportschema, usingref()allows dbt to locate and connect to another table within the project/schema (such as anotherreporttable).{{ source('raw_sales', 'orders') }}: Directs dbt to pull raw data from an external schema/project. Here,raw_salesacts as the schema name when tests and queries run against the warehouse.
The core rule is clear: use ref() for project models (like staging and
report tables) so dbt manages lineage automatically, and use source() whenever pointing to
external tables in another schema.
A Dashboard Is Not a Dump of Data
A dashboard is an insight to gather, not a data dump. Every design choice either clarifies decision-making or obscures it. Below are visual examples of how intentional design transforms raw data into instant business clarity:
Replacing generic headers like “Sales Data Table” with “Monthly Spend of AWS” instantly communicates the core question the data answers.
Using green / red status highlights on variance columns to surface performance at a glance, rather than forcing stakeholders to scan raw numbers.
What Can Be Improved
- English translations for CRM and payment request flows — The onboarding materials reference these processes, but the guidance for how stock movements should be recorded in CRM remains fully in Vietnamese. For a non-native speaker, or for any new intern trying to self-onboard, this creates unnecessary friction at a stage where clarity matters most.
- A consolidated day-one link page — The materials needed on the first day are spread across several documents. A single curated page — access checklist, tool links, key contacts — would reduce the time an intern spends hunting and let them focus on learning faster.
- Clearer task ordering for dependent work — Some onboarding tasks need input or access from other team members. It is not always obvious which tasks are waiting on someone else. Highlighting these dependent tasks early, and suggesting interns start them first, helps new joiners organize their work much better from day one.
None of these are complaints — they are observations from the vantage point of someone new enough to notice the gaps that familiarity tends to paper over. The foundation is strong. These are suggestions for the last mile.
Edit (as of 21 Jul 2026): All of these onboarding resources and improvements should already be implemented and available to new interns. If you do not have access to them yet, please ask your supervisor first.

