Mark Heath (@mheath73) header
Mark Heath (@mheath73) profile picture

Amazingly, all tweets are my own.

Sydney, New South Wales
Joined November 2011
Photo by Mark Heath (@mheath73)Photo by Mark Heath (@mheath73)Photo by Mark Heath (@mheath73)Photo by Mark Heath (@mheath73)Photo by Mark Heath (@mheath73)Photo by Mark Heath (@mheath73)Photo by Mark Heath (@mheath73)Photo by Mark Heath (@mheath73)Photo by Mark Heath (@mheath73)
Woohoo
3
Mark Heath retweeted
Every week someone tells me they vibe-coded their app over the weekend and don't need developers anymore. Before it touches a paying customer, make sure it includes: > a schema someone designed, instead of one the AI improvised table by table > login that still works when someone puts a plus sign in their email > password reset links that expire and work once > MFA, plus a recovery path for the user who lost their phone > sessions that time out, and a way to kill every session for one user > SSO for the enterprise customer who won't sign without it > SAML, because that customer's IT team doesn't do magic links > SCIM, so a fired employee loses access the moment IT offboards them > roles and permissions deeper than "admin" and "everyone else" > checks that stop user A from reading user B's data by changing one number in the URL > tenant isolation, so one customer's bug never shows another customer's records > an admin "log in as this user" button for support, with an audit trail on every use > rate limits on login, so nobody can guess passwords at scale > lockouts that stop attackers without locking out your CFO the night before the board meeting > database migrations that run forward and roll back > migrations that don't lock the main table at 2pm on a Tuesday > indexes, because the query that was instant on 50 test rows times out on 5 million real ones > connection pooling, so a traffic spike doesn't exhaust the database > backups every night > a restore from those backups, tested, because a backup you've never restored is a hope > point-in-time recovery for the day someone runs a delete without a where clause > soft deletes, so "I deleted it by accident" is a support ticket and not an incident > validation on the server, not just in the form > timezones stored right, so the 9am reminder doesn't fire at 4am > the customer with an apostrophe in their last name > emoji, accents and right-to-left text in every field > money stored as integers, because 0.1 + 0.2 doesn't equal 0.3 in floating point > currency, rounding and tax rules for every country you sell into > a data model that survives your second customer asking for "one small change" > idempotency keys, so a retried payment doesn't charge the card twice > deduplication for the user who clicks submit four times > pagination that still works on page 400 > exports, because sooner or later every customer wants their data in a spreadsheet > imports that survive the CSV someone saved in 2009 > retention rules, and code that deletes what your contract says you'll delete > secrets out of the code, out of the repo and out of the AI chat history > rotating every key the AI pasted into a config file last month > confirming every package the AI installed exists and is the one you meant > dependency scanning, because the AI pulled in libraries nobody reviewed > input sanitization everywhere a user can type > protection against SQL injection, XSS, CSRF and the rest of the OWASP list > file uploads that get scanned, size-limited and stored where they can't execute > CORS rules that aren't "allow everything" > security headers on every response > encryption at rest and in transit > least-privilege access for everyone, including the AI agent holding production credentials > logs that record who did what, without recording passwords, tokens or card numbers > a penetration test before your enterprise customer's security team runs their own > answers to the security questionnaire every enterprise buyer sends, with evidence behind each one > a disclosure process for the day a stranger emails you a vulnerability > a plan for the day a laptop with production access gets stolen > SOC 2, which means policies, evidence and an auditor, not a checkbox > HIPAA, the moment a single patient record touches your system > a BAA with every vendor that touches that data, including your AI model provider > audit trails that show who viewed a record, not just who changed it > PCI scope, and card numbers kept out of your database > GDPR deletion requests that reach every table, backup and log > data residency for the customer whose contract says EU only > quarterly access reviews someone signs off on > dev, staging and production environments that match each other > infrastructure written as code, so the setup lives somewhere other than one person's memory > a deploy pipeline that runs the tests before anything reaches customers > one-click rollbacks, because Friday deploys happen > zero-downtime deploys, because your customers don't have maintenance windows > feature flags, so you can ship the code without shipping the feature > autoscaling for the Monday morning spike > a CDN, so the app loads fast in Singapore too > DNS, SSL certificates, and renewals that don't expire on a Sunday > background job queues, so slow work doesn't freeze the page > retries with backoff, so one flaky API call doesn't become a lost order > a dead-letter queue for the jobs that fail every retry > cron jobs that don't run twice the day you add a second server > caching, and clearing that cache when the data changes > SPF, DKIM and DMARC, so your password resets don't land in spam > bounce and complaint handling on every transactional email > storage rules, so you stop paying to keep 2021's temp files > cost alerts, so a runaway agent loop shows up the same day and not on the invoice (we learned this one for $1,382.59) > a disaster recovery plan, written down and tested once a year > a second region, if your contract promises uptime one region can't deliver > structured logs you can search at 3am > error tracking that groups the same bug instead of sending you 4,000 emails > uptime checks from outside your own network > alerts that page a human, tuned until they stop paging for nothing > dashboards for latency, error rate and throughput > tracing for one slow request across every service it touches > an on-call rotation, and a person who picks up > runbooks, so the engineer on call knows what "queue depth critical" means > postmortems that change something > a status page customers check before they email you > unit tests written by someone who knows what the logic should do > integration tests for every third-party API you depend on > end-to-end tests for signup, checkout and the other flows that make you money > load testing before the launch email goes out > test data that looks like production without being production data > regression tests, so fixing bug 41 doesn't bring back bug 12 > testing on the five-year-old laptop your biggest customer's ops team still uses > accessibility compliance, because the enterprise contract requires it > subscriptions, upgrades, downgrades and proration > failed-payment retries and dunning emails > invoices with the customer's PO number on them, because procurement won't pay without it > sales tax and VAT > refunds, credits and partial refunds > usage metering that matches what you bill, to the cent > annual contracts with custom terms your billing logic never planned for > revenue reports your finance team can reconcile > webhooks that verify signatures > webhooks that retry, with a log of every failed delivery > a versioned API, so you can change it without breaking your customers' integrations > API keys customers can create and revoke > API rate limits that protect you without blocking real integrations > a plan for the day a third-party API changes its response format without telling you > OAuth token refresh, because tokens expire at the worst possible moment > a sandbox where customers can test their integration > protection against prompt injection in every field that reaches the model > customer and patient data kept out of prompts that leave your network > a model spend cap per customer, so one heavy user can't run up your bill > evals, so you find out when a model update makes your answers worse > a fallback for the afternoon your model provider goes down > a migration plan for the day your model gets deprecated > prompt and output logs for debugging, minus whatever you're not allowed to keep > a human approval step for anything the AI does that can't be undone > pages that load on hotel wifi > empty states, loading states and error states on every screen > error messages a customer can act on, instead of "something went wrong" > forms that keep what people typed when one field fails validation > emails that render in every mail client your customers use > notifications people can turn off > undo > keyboard navigation and screen reader support > translations, with dates and numbers formatted for each locale > a back button that does what people expect > code a human can read > code review on every change > a branching strategy, so two people can work without overwriting each other > monthly dependency upgrades, so you're never two major versions behind > framework upgrades before the old version stops getting security patches > deleting the dead code the AI left behind from its first three attempts > splitting up the 2,000-line file the AI kept appending to > architecture decisions written down, with the reasons > a README that gets a new engineer running locally in under an hour > documentation for whoever inherits this > an admin panel for your ops team > support tooling, so customer success can answer questions without pinging engineering > a changelog customers can read > terms and a privacy policy that match what the code does > every account, domain and repo in the company's name, not the name of whoever built the prototype > a bus factor higher than one Oh, and besides keeping all of this working every day, forever… your vibe-coded app will still need people who know what they're doing: > reading every line the AI wrote before it ships (a senior engineer) > designing the data model before your second customer breaks it (a backend engineer) > explaining why the AI's fix for one bug created two new ones (a senior engineer, again) > deploys, rollbacks, servers and the cloud bill (a DevOps engineer) > answering the page at 3am when payments stop (whoever's on call) > patching the framework the week a vulnerability goes public (security) > walking an auditor through how patient data moves (security and compliance) > testing what the AI says it tested (QA) > running a migration on a live database without losing a row (a backend engineer) > saying no to the feature that breaks three others (a tech lead) > turning "works on my laptop" into "works for every customer at once" (an architect) > debugging the code when the AI that wrote it can't (a senior engineer) > remembering why it's built this way, a year from now (someone who was there) …wishing them the best 🫡
708
788
201
8,775
788,739
Mark Heath retweeted
A new review of Women, Gardens, and Agency in Imperial Russia is out on H-SHERA. Alexandra Helprin finds that the book shows how Pavlovsk "did political work" for Maria Feodorovna. h-net.org/reviews/showrev.ph…
1
4
116
1/2 A German princess with no throne spent fifty years building a garden and used it to influence Russian politics. I've spent years with her story and would love to share it with you.
1
2
6
131
2/2 I’ll be talking with Prof Alexander Martin about gardens, plants and monuments as spaces of women’s agency, politics and diplomacy in Imperial Russia. Free and online — all welcome!
1
3
42
Congratulations on the win in Scotland. Wonderful. @JennyShin_LPGA
9
Mark Heath retweeted
Woke up to wonderful news: my first book review is out in Russian Review! So honoured — the reviewer highlighted how the book uses Pavlovsk Park to trace Maria Feodorovna's political agency, drawing on sources rarely used this way before. Link - onlinelibrary.wiley.com/doi/…
1
2
9
130
Mark Heath retweeted
1/3 What can a damaged, seemingly ordinary sabre tell us about diplomacy? On 3 July I'll be speaking at the ANU Mongolia Institute about Prince Bambar's sabre, a diplomatic gift awarded by Catherine II and later presented to the Qianlong Emperor.
1
1
7
76
Women, Gardens, and Agency in Imperial Russia: Empress Maria Feodorovna's Pavlovsk Park by @KatjaHeath reveals how royal gardens became tools of female power, diplomacy, and influence at the Russian court. Discover the book 👉 bit.ly/4eoYAvL
1
4
8
300
Mark Heath retweeted
1/ During a recent visit to Pavlovsk, I came across this engraving by J.A. Roy in the collection of Empress Maria Feodorovna. The sitter, Prince Alexander Kurakin, looked visibly injured. Since portraits of wounded or sick people are rare, I decided to investigate.
1
1
5
75
My book is officially out today! Women, Gardens, and Agency in Imperial Russia: Empress Maria Feodorovna's Pavlovsk Park — exploring how a royal consort used her garden as a tool of political power in imperial Russia. bloomsbury.com/au/women-gard…
3
4
12
431
Well played today @kempgolf . You're an inspiration.
1
1
84
Mark Heath retweeted
Good to see my work with @EmmaGleadhill on weeping willows and Napoleon’s memory in Australia being taken up in Dubbo Photo News: dubbophotonews.com.au/news/h…
1
1
6
74
Mark Heath retweeted
I have a soft spot for children's books. I had a wonderful time at Pamela Allen's exhibition at the State Library of NSW, and especially liked her images of Sydney.
1
5
73
1/2 New article published! Co-written with @EmmaGleadhill This piece traces how Napoleon’s wish to rest beneath Australian acacias was replaced by the weeping willow as a symbol of mourning, and how this botanical myth spread across Australia and back to St Helena.
1
3
7
212
1/2 First book proofs! Women, Gardens, and Agency in Imperial Russia is finally becoming real. This project asks us to look beyond sovereigns and recognise how a non-regnant consort like Maria Feodorovna used gardens to intervene in politics.
1
2
5
127
The review is great, the book even better!
1/8 Excited to share my review of Rosalind Blakesley’s "Women Artists in the Reign of Catherine the Great" in the latest issue of Slavonic & East European Review. muse.jhu.edu/pub/427/article…
1
45
A must read for any history buff. Some really cool insights.
My copy of Napoleonic Objects and Their Afterlives has arrived! My chapter with @EmmaGleadhill follows the Napoleonic collection Dame Mabel Brookes assembled in the early 20th century, now quietly housed in the Mornington Peninsula Regional Gallery.
2
32
People of all professions, including those in the business and corporate sphere, have signed our petition, leaving comments about the enduring social, political, and economic value of the BA. Sign the petition, read the comments, leave your own in support! openpetition.org/au/petition…
5
10
397
1/ This Wednesday at 9am at the AHA in Townsville, I’ll be presenting a collaborative paper with @EmmaGleadhill on the history of Napoleonic willows in Australia. It’s a story about memory, misidentification, and botanical imperialism.
2
2
4
232
Mark Heath retweeted
Universities: “we are committed to social, cultural, and moral service” Also universities: “we are replacing our philosophy, ethics, history, and literature departments with an expanded business/crypto double major”
7
226
12
1,263
32,704