Six roles.
One connected business.
DevOps, paid social, data analysis, technical SEO, SEO assistance and accounts payable. Workflows, metrics, traps and short exercises.
Six roles, one operating system
A practical refresh for Tony | Notion Paper | 05 October 2026
Use this as a domain map, then work through the scenarios. The job post is brief: examples below are illustrative architectures and exercises, not claims about the employer. Refreshing vocabulary is useful; professional competence still comes from operating the workflow.
| Role / work mode | What success looks like | Know first |
|---|---|---|
| DevOps / hybrid | Safe releases; dependable, observable infrastructure | IAM, networking, IaC, delivery, recovery |
| Paid social / remote, VN nights | Commercial outcomes and clear client decisions | Funnel, attribution, economics, experiments |
| Data analyst / hybrid | Trusted reporting that changes a decision | Grain, SQL, reconciliation, semantic models |
| Technical SEO specialist / remote | Important pages discoverable and usable | Crawl, render, index, canonical, performance |
| Technical SEO assistant / onsite | Accurate audits, updates and evidence | Crawler exports, CMS hygiene, issue verification |
| Accounts payable / remote | Correct, approved, timely supplier payments | Matching, controls, vendor ledger, reconciliation |
Suggested reading order for a software engineer
DevOps → data analyst → technical SEO → paid social → accounts payable. This order uses your engineering foundations first, then adds commercial measurement and finance operations. It is a suggested learning order, not a ranking of the jobs.
DevOps / infrastructure map
Own the service from network boundary to recovery.
| Tool / concept | Mental model | What to explain |
|---|---|---|
| AWS IAM | Who can do what to which resource | Roles, least privilege, temporary credentials |
| VPC + security groups | Reachability plus allowed traffic | Public/private subnets, routes, ALB-to-app-to-DB rules |
| ECS/Fargate + ECR | Run and distribute containers | Task health, resource limits, image digests |
| RDS + S3 | Database and object storage | Backups, encryption, access, restore testing |
| Terraform + HCP Terraform | Declared infrastructure and controlled runs | Providers, modules, state, locks, plans, drift |
| CloudWatch / telemetry | Evidence of service behavior | Logs, metrics, traces; actionable alarms |
Terraform Cloud was renamed HCP Terraform in 2024 [1]. An HCP workspace groups configuration, variables, state and runs; remote execution is its default mode [2]. Protect state because sensitive values can appear in it. A plan previews proposed changes; it is not proof that a release is safe.
Foundations before service names
- Linux processes, permissions, sockets and exit codes; DNS, HTTP, TLS and connection timeouts.
- Availability versus durability; RTO = acceptable recovery time, RPO = acceptable data loss window. Set both with the business.
- Containers share the host kernel. Docker packages the runtime; Terraform provisions infrastructure; GitHub Actions coordinates automation.
Why start with ECS rather than EKS here?
The post asks for Docker and AWS, but does not require Kubernetes. ECS/Fargate is one plausible lower-operations option. Choose Kubernetes only when its capabilities and team capacity justify the extra work.
DevOps / safe changes and incidents
A green pipeline is one signal; the user journey is the outcome.
Use GitHub Actions OIDC to assume an AWS role with short-lived credentials; constrain the role trust to the intended repository and environment [3]. For containers, multi-stage builds separate compilation dependencies from the runtime image [4]. Pin dependencies, scan artifacts and deploy an immutable image digest.
| Area | Refresh checklist |
|---|---|
| Infrastructure | terraform fmt -check; init; validate; plan. Review replacement/deletion, access changes and state impact. Apply through the agreed workflow. |
| Delivery | Tests → image build → scan → registry → staged deployment → smoke test. Coordinate schema migrations; an old image may not understand a new schema. |
| Incident | State impact and scope; inspect recent changes; correlate logs/metrics/traces; mitigate; verify recovery; document a durable fix. |
| Metrics | Availability and p95/p99 latency; error rate; saturation; change failure rate; deployment lead time; recovery time. Define numerator and time window. |
| AI coding tools | Claude Code/Gemini can draft scripts, IaC and explanations. Review diffs, test commands, isolate execution and restrict permissions [5,6]. The post does not specify which Gemini interface. |
Bash example: a read-only health check
#!/usr/bin/env bash
set -euo pipefail
url="${1:?Usage: check-health URL}"
curl --fail --silent --show-error \
--connect-timeout 3 --max-time 10 "$url"
# Nonzero exit status fails the calling CI step.
Latency doubled after deployment. What first?
Compare affected endpoints, deployment timing, errors and saturation. Check database pools, downstream calls and resource limits. Roll back only if it is a compatible mitigation; verify the actual checkout or login journey, not just /health.
Data analyst / sources and models
Define what one row means before designing the dashboard.
| Term / tool | Working definition |
|---|---|
| POS / ERP | POS records store transactions; ERP integrates business operations such as inventory, purchasing and finance. Reconcile their scope and posting timing. |
| Fact / dimension | Facts store observations and measures; dimensions describe grouping/filtering entities. A star schema supports usable Power BI models [10]. |
| Grain | Example: one posted sales line per source system, store, transaction and line ID. Returns are separate signed events. |
| ETL / ELT | Transform before loading / after loading. Keep source snapshots or change history where repeatability matters. |
| Power Query / DAX | Power Query prepares data; DAX expresses model calculations. Measures depend on report filter context [11]. |
| Tableau | Dimensions/measures, relationships, live/extract data, calculated fields. LOD expressions set a calculation granularity [12]. |
Retail KPI dictionary
- Net sales = gross sales - discounts - returns, on an agreed tax/shipping basis. AOV = comparable sales / eligible orders.
- Gross margin = (net sales - cost of goods sold) / net sales. Distinguish revenue, gross profit and cash collected.
- Inventory turnover = COGS / average inventory cost over the same period. Stockout rate needs a defined SKU/store/time denominator.
- Refresh latency, missing/duplicate records and source-to-report reconciliation gaps belong on the reporting health view.
Why did a product join double revenue?
The dimension key was not unique or the relationship multiplied fact rows. Check grain, key uniqueness and join cardinality; do not hide the issue with DISTINCT on the final report.
Data analyst / integration and SQL
A trustworthy metric survives retries, returns and late data.
| Integration concern | Practical response |
|---|---|
| API extraction | Handle pagination, rate limits and bounded retries. Log source, batch ID, row count and watermark. |
| Late records | Use an overlap window plus idempotent upsert; advance the watermark after a successful load. |
| Deduplication | Use stable source/business keys and source version ordering. Arrival time is a fallback, not proof of business chronology. |
| Reconciliation | Compare counts and totals by source, store, date and currency. Check tax, refunds, voids and posting cutoffs. |
| Actionable insight | State the business question, comparison/cohort, likely explanation, proposed action and how success will be measured. |
PostgreSQL: latest version per sales line
WITH latest AS (
SELECT *, ROW_NUMBER() OVER (
PARTITION BY source_system, store_id, txn_id, line_id
ORDER BY source_updated_at DESC, ingested_at DESC
) AS rn
FROM raw_sales_lines
)
SELECT business_date, store_id, currency,
SUM(signed_net_amount) AS net_sales
FROM latest
WHERE rn = 1 AND status = 'posted'
GROUP BY business_date, store_id, currency;
Assumptions: complete row versions; signed_net_amount is already discount-adjusted and negative for returns; business_date comes from the agreed local trading calendar. Ties need a deterministic source version/sequence. Never sum currencies without an agreed FX conversion.
Power BI: measures at the agreed grain
Net Sales = SUM(FactSales[SignedNetAmount])
Sales Orders = CALCULATE(
DISTINCTCOUNT(FactSales[GlobalTransactionKey]),
FactSales[EventType] = "SALE"
)
Net Sales per Sales Order = DIVIDE([Net Sales], [Sales Orders])
GlobalTransactionKey must be unique across sources/stores. This ratio includes period returns in its numerator and excludes return-only transactions from the denominator; label it accordingly. It is not automatically cohort-adjusted AOV.
POS says 10m, ERP says 9.7m. Who is wrong?
Neither is established as wrong. Compare transaction scope, returns, tax, cancellations, time zone and posting date. Trace the 0.3m gap to records before correcting a report.
Technical SEO specialist / indexability
Discovery, rendering, indexing and ranking are separate gates.
| Control / concept | Purpose | Common mistake |
|---|---|---|
| robots.txt | Controls crawler access to paths | Blocked crawling does not guarantee deindexing |
| noindex | Requests exclusion from the index | Google must fetch the rule; blocking the URL can hide it [13] |
| Canonical | Signals the preferred duplicate URL | A signal, not a forced selection; keep links/sitemap consistent [14] |
| 301 / 308 | Permanent move to a relevant replacement | Chains or mass redirects to an irrelevant homepage |
| XML sitemap | Helps discover important canonical URLs | Submitting it does not guarantee indexing |
| Structured data | Describes supported entities/features | Valid markup does not guarantee a rich result [15] |
| Internal links | Expose relationships and discovery paths | Orphan pages and inaccessible JS-only navigation |
| JavaScript SEO | Compare source HTML with rendered output | A working browser view alone does not prove indexability [16] |
Triage an important missing page
- Confirm its intended audience and whether it should be indexed. Check status/redirect, robots access, noindex and canonical.
- Use GSC URL Inspection to compare the indexed state with a live test. Inspect rendered content, internal links and sitemap inclusion.
- For large stores, review filters, parameter URLs and duplicate templates. Protect valuable category pages while controlling low-value combinations.
Should a filtered URL canonicalize to the category?
Only if it is duplicate or sufficiently similar and the category is the intended representative. A distinct, useful search landing page may deserve a self-canonical and internal links. There is no safe blanket rule.
Technical SEO specialist / tools and performance
Fix the bottleneck that affects useful pages, then verify the result.
| Tool | Use it for | Limit |
|---|---|---|
| GSC | Search clicks/impressions, query/page patterns, indexing and URL Inspection | Search measurement differs from site sessions |
| GA4 | Event-based site/app behavior and key events [17] | Tracking and consent affect what is observed |
| GTM | Manage tags, triggers and variables; preview changes [18] | A deployment tool, not an analytics database |
| Screaming Frog | Status, canonicals, titles, links, directives; compare raw/rendered HTML [19] | A crawl snapshot is not Google's index |
| Ahrefs / Semrush | Competitor, keyword and backlink research | Third-party estimates are not your first-party revenue |
| PageSpeed / CrUX / DevTools | Real-user experience and lab diagnosis | A lab score cannot stand in for field experience |
Core Web Vitals: good thresholds [20]
| Metric | Target | Typical direction of work |
|---|---|---|
| LCP / loading | ≤ 2.5 seconds | Reduce server delay; optimize and prioritize the hero resource |
| INP / responsiveness | ≤ 200 milliseconds | Reduce main-thread work; split long tasks; inspect interactions |
| CLS / stability | ≤ 0.1 | Reserve image/ad dimensions; control late content and fonts |
Evaluate the 75th percentile, separately for mobile and desktop, and meet all three thresholds. Field data measures real experience; lab tools help reproduce causes. Improving these metrics supports user experience but does not promise a ranking position.
Prioritization and proof
Prioritize an accidental site-wide noindex or broken commercial template before polishing isolated metadata. Size impact by important URLs, traffic/revenue exposure and confidence; compare against effort and release risk. Give developers a reproducible ticket and verify the rendered page after deployment.
GSC clicks rose but GA4 sessions fell. Is tracking broken?
Possibly, but first align dates, time zones, search/property scope and organic channel definitions. Clicks and sessions are different units; consent, redirects and event collection can also create a gap.
Technical SEO assistant / execution playbook
Turn an audit into accurate, reviewable work.
| Task | What to capture | When to escalate |
|---|---|---|
| Crawler audit | URL, status, title, canonical, directive, inlinks; configuration and timestamp | Unexpected patterns across a template |
| Broken links | Source page, broken target, appropriate replacement | No equivalent destination or uncertain content intent |
| CMS changes | Approved title/description, heading, alt text, slug; before/after evidence | URL changes needing redirects; theme/template edits |
| GSC review | Affected URLs, inspection finding, date, intended indexability | Blocking/indexing behavior differs from the brief |
| Release verification | HTTP response, source/rendered HTML, mobile sample and recrawl | Fix creates new noindex, canonical or rendering errors |
Example ticket that a developer can use
Specialist versus assistant
The specialist diagnoses systemic causes and sets priorities and rules. The assistant gathers evidence, executes approved changes and verifies them. This is a useful working distinction; the actual boundary must be confirmed with the employer.
- Before a CMS edit: know the page purpose and approval scope. Keep the existing URL unless a move is explicitly planned.
- After the edit: inspect the live result, not just the CMS preview. Save evidence and report exceptions.
- Routine quality: reproducible exports, clear issue names, accurate URL lists, no duplicate tickets and traceable changes.
You find 500 missing meta descriptions. Is that the top priority?
Not without impact analysis. Check important pages and templates, then compare with broken status codes, blocked indexing or wrong canonicals. Counts alone do not set priority.
Accounts payable / payment controls
Match the obligation, approve the expense, reconcile the payment.
| Term | Working meaning |
|---|---|
| AP vs AR | AP: money owed to suppliers. AR: money owed by customers. An invoice, expense and cash payment are different events. |
| PO / receipt / invoice | Purchase order records authorization; receipt records delivery; supplier invoice requests payment. |
| Two-way / three-way | In D365, two-way matches invoice/PO price; three-way also checks receipt quantity, within policy tolerances [21]. |
| Non-PO invoice / expenses | Route through approved coding and review; do not invent a purchase receipt to bypass the process. |
| Vendor reconciliation | Compare supplier statements with open ledger items, payments, credit notes and timing differences. |
| D365 / ERP | Vendor master, posting profiles, dimensions, invoice workflows, payment proposals, settlement and reporting [22]. |
Illustrative exception
PO: 100 units at $10; received: 80; invoice: 100 at $10. Three-way matching exposes the quantity discrepancy. Investigate delivery or recording errors; follow the exception policy before payment. Invoice entry alone is not payment approval.
Controls and operational metrics
- Detect duplicates by vendor, legal entity, invoice number and amount/date checks. Independently verify bank-detail changes.
- Separate vendor changes, invoice approval and payment release; retain audit evidence and resolve rejected payments.
- Monitor overdue items, cycle time, exceptions, duplicate payments, on-time payments and unreconciled balances. Define each population.
- Month-end: review unposted invoices, cutoff, received-not-invoiced items and accruals with finance. Tax/accounting treatment depends on company and jurisdiction.
Supplier says an invoice is unpaid, but ERP says settled. What next?
Check remittance, bank status, beneficiary, invoice allocation, credit notes, rejected/reversed payments and timing. Settlement in a ledger is not proof that cash reached the supplier.
Cross-role diagnosis / follow the evidence
One symptom can belong to several domains. Assign ownership after locating the failure.
| Observed symptom | First evidence | Likely owners / next move |
|---|---|---|
| Ad CPA spikes after release | Spend, landing CVR, event delivery, checkout errors | Paid social + DevOps + engineering: distinguish conversion loss from measurement loss |
| Organic traffic drops after migration | Redirects, status, canonicals, noindex, GSC by template | SEO + engineering: inspect affected URL groups and release changes |
| Dashboard revenue doubles | Row counts, keys, joins, load retries | Analyst + data engineer: identify multiplicative joins or duplicate loads |
| Ad revenue exceeds POS revenue | Attribution scope, time basis, tax/returns, online/offline mix | Paid social + analyst: reconcile common orders, not aggregate claims |
| Supplier balance disagrees | Open items, credit notes, payments, cutoffs | AP + finance: reconcile statement-to-ledger records |
| Purchase tracking fires twice | Browser/server event paths, repeated requests | Marketing + engineering: inspect platform-specific deduplication and retry behavior |
A data contract every team can share
| Field | Example agreement |
|---|---|
| Business event | Posted sale, not add-to-cart or invoice creation |
| Identity / owner | Global order ID; commerce system owns order status |
| Time basis | Business date in Asia/Ho_Chi_Minh; store original UTC timestamp |
| Money basis | Currency explicit; agreed tax/shipping/discount/refund treatment |
| Lifecycle | Created → paid → refunded; updates replay idempotently |
| Freshness / proof | Declared refresh lag; trace records back to authoritative source |
Which single tool gives the full business truth?
None. Agree on authoritative systems per event, then reconcile their handoffs. A polished dashboard cannot repair a missing definition.
Refresh plan / practise the handoffs
Seven sessions of 45-60 minutes: a starting plan, not a promise of job readiness.
| Session | Hands-on task | Evidence you should produce |
|---|---|---|
| 1 / foundations | Explain the six workflows and define shared event/time/money terms | One role map and a 10-term glossary |
| 2 / practical DevOps | Sketch AWS networking; review a Terraform plan; outline CI and rollback | Diagram, plan risks and release checklist |
| 3 / practical analytics | Use synthetic POS rows with returns, duplicates and late updates | SQL plus source-to-report reconciliation |
| 4 / practical SEO | Audit a permitted demo site; compare source and rendered HTML | Five prioritized issues with evidence |
| 5 / practical paid social | Calculate funnel metrics and draft one client update | Metric sheet, hypothesis and decision |
| 6 / practical AP | Match a synthetic PO, receipt, invoice and supplier statement | Exception log and reconciled balance |
| 7 / modern → advanced | Review AI tool permissions; solve a cross-role incident; assess gaps | Reviewed automation draft and incident narrative |
Further exploration after the basics
DevOps: recovery drills, policy as code and cost controls. Analytics: history/CDC, semantic contracts and experimentation. SEO: migrations, large-site crawl control and internationalization. Paid social: incrementality and cohort economics. AP: close processes, exceptions and control design.
Quick evaluation with model answers
1. Is ROAS 4x profitable?
Only with the relevant margin and cost basis; at 25% pre-ad contribution it is simplified break-even. Attribution also does not establish causality.
2. Can robots.txt replace noindex?
No. A crawl block can stop Google from seeing noindex and does not reliably remove a URL from the index.
3. How do you avoid counting a retried POS record twice?
Use a stable business key, deterministic version ordering and idempotent loading; test reconciliation after replay.
4. Why can a rollback fail to recover the service?
Schema, configuration, state or downstream changes may be incompatible with the previous image.
5. Is a supplier invoice sufficient evidence for payment?
No. Apply authorization, matching/exception policies and payment controls.
Sources / keep your knowledge current
Primary references checked 05 October 2026. Numbered notes point to the specific guidance.
Examples, exercises, diagrams, prioritization and reading order are educational synthesis. Numerical examples are invented and explicitly labeled. Tool capabilities and UI labels can change; check linked documentation when implementing.
- HashiCorp: HCP Terraform naminghttps://developer.hashicorp.com/terraform/cloud-docs
- HashiCorp: workspaceshttps://developer.hashicorp.com/terraform/cloud-docs/workspaces
- GitHub: OIDC in AWShttps://docs.github.com/en/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-aws
- Docker: multi-stage buildshttps://docs.docker.com/build/building/multi-stage/
- Anthropic: Claude Code securityhttps://code.claude.com/docs/en/security
- Gemini CLI: sandboxinghttps://geminicli.com/docs/cli/sandbox/
- LinkedIn: Insight Taghttps://business.linkedin.com/advertise/ads/insight-tag
- TikTok: Events APIhttps://ads.tiktok.com/resources/help/article/events-api
- Meta: Pixel setuphttps://www.facebook.com/business/help/952192354843755
- Microsoft: star-schema guidancehttps://learn.microsoft.com/en-us/power-bi/guidance/star-schema
- Microsoft: DAX basicshttps://learn.microsoft.com/en-us/power-bi/transform-model/desktop-quickstart-learn-dax-basics
- Tableau: level-of-detail expressionshttps://help.tableau.com/current/pro/desktop/en-us/calculations_calculatedfields_lod.htm
- Google: noindexhttps://developers.google.com/search/docs/crawling-indexing/block-indexing
- Google: canonical URLshttps://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls
- Google: structured datahttps://developers.google.com/search/docs/appearance/structured-data/intro-structured-data
- Google: JavaScript SEOhttps://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics
- Google: GA4 event-based datahttps://support.google.com/analytics/answer/10089681
- Google: Tag Manager introductionhttps://support.google.com/tagmanager/answer/6102821
- Screaming Frog: JavaScript crawlinghttps://www.screamingfrog.co.uk/seo-spider/tutorials/crawl-javascript-seo/
- Google web.dev: Web Vitalshttps://web.dev/articles/vitals
- Microsoft: D365 invoice matchinghttps://learn.microsoft.com/en-us/dynamics365/finance/accounts-payable/accounts-payable-invoice-matching
- Microsoft: D365 accounts payablehttps://learn.microsoft.com/en-us/dynamics365/finance/accounts-payable/accounts-payable
Paid social / funnel and economics
Buy useful outcomes, then explain what the measurement can and cannot prove.
Illustrative calculation, no universal benchmarks
Spend $1,000; 100,000 impressions; 2,000 link clicks; 50 attributed orders; $4,000 attributed revenue. CPM = $10; link CTR = 2%; CPC = $0.50; click CVR = 2.5%; CPA = $20; ROAS = 4.0x. These orders need not all be new customers or caused by the ads.
If pre-ad contribution margin is 25% of comparable revenue, simplified break-even ROAS = 1 / 0.25 = 4.0x. This assumes the margin includes variable costs and the revenue basis handles refunds consistently; fixed costs and incrementality can change the conclusion.
CTR rises, sales stay flat. What do you check?
Landing visits, site speed, tracking, traffic intent, offer, device mix and checkout conversion. High engagement may be curiosity without purchase intent.