Wen Yang Ho

Engineering leader who still builds.

VP of Engineering at Mortgage Automator, a lending SaaS, in Toronto. On call since 2019. Since late 2025 I also design and ship agent systems myself. The cards on this page are written the way I write runbooks: what triggers it, the steps, the limits.

Activity log

Week of Oct 19 · 160 commits · Webtoon art pipeline 84

Weekly commits across my repositories from October 2025, by area, plus leadership milestones from 2019. Agent tooling and research started before git history; those weeks are hatched.20192025OCT 25JAN 26APRJULOCTLeadershipJoined Mortgage Automator, 2019-09VP of Engineering, 2024-02PE recapitalization, due diligence, 2024-05VP, recapitalizationAgent toolingOct 6, 2025: work before git historyOct 13, 2025: work before git historyOct 20, 2025: work before git historyOct 27, 2025: work before git historyNov 3, 2025: work before git historyNov 10, 2025: work before git historyNov 17, 2025: work before git historyNov 24, 2025: work before git historyDec 1, 2025: work before git historyDec 8, 2025: work before git historyDec 15, 2025: work before git historyDec 22, 2025: work before git historyDec 29, 2025: work before git historyJan 5, 2026: work before git historyJan 12, 2026: work before git historyJan 19, 2026: work before git historyJan 26, 2026: work before git historyFeb 2, 2026: work before git historyFeb 9, 2026: 17 commits (MIDI MCP server 17)Feb 16, 2026: 3 commits (MIDI MCP server 3)Feb 23, 2026: 0 commitsMar 2, 2026: 0 commitsMar 9, 2026: 0 commitsMar 16, 2026: 0 commitsMar 23, 2026: 0 commitsMar 30, 2026: 59 commits (CompanyMaestro 59)Apr 6, 2026: 0 commitsApr 13, 2026: 9 commits (Waverunner 9)Apr 20, 2026: 2 commits (Waverunner 2)Apr 27, 2026: 0 commitsMay 4, 2026: 0 commitsMay 11, 2026: 0 commitsMay 18, 2026: 0 commitsMay 25, 2026: 0 commitsJun 1, 2026: 0 commitsJun 8, 2026: 0 commitsJun 15, 2026: 0 commitsJun 22, 2026: 0 commitsJun 29, 2026: 0 commitsJul 6, 2026: 0 commitsJul 13, 2026: 2 commits (Waverunner 2)Jul 20, 2026: 1 commits (CompanyMaestro 1)Jul 27, 2026: 0 commitsAug 3, 2026: 0 commitsAug 10, 2026: 0 commitsAug 17, 2026: 0 commitsAug 24, 2026: 0 commitsAug 31, 2026: 0 commitsSep 7, 2026: 0 commitsSep 14, 2026: 0 commitsSep 21, 2026: 0 commitsSep 28, 2026: 0 commitsOct 5, 2026: 0 commitsOct 12, 2026: 6 commits (Motherbrain 6)Oct 19, 2026: 17 commits (Motherbrain 17)AI productsOct 6, 2025: 0 commitsOct 13, 2025: 0 commitsOct 20, 2025: 0 commitsOct 27, 2025: 0 commitsNov 3, 2025: 0 commitsNov 10, 2025: 0 commitsNov 17, 2025: 0 commitsNov 24, 2025: 0 commitsDec 1, 2025: 0 commitsDec 8, 2025: 0 commitsDec 15, 2025: 0 commitsDec 22, 2025: 0 commitsDec 29, 2025: 0 commitsJan 5, 2026: 0 commitsJan 12, 2026: 0 commitsJan 19, 2026: 0 commitsJan 26, 2026: 0 commitsFeb 2, 2026: 0 commitsFeb 9, 2026: 0 commitsFeb 16, 2026: 0 commitsFeb 23, 2026: 0 commitsMar 2, 2026: 0 commitsMar 9, 2026: 0 commitsMar 16, 2026: 0 commitsMar 23, 2026: 31 commits (MarkdownPilot 31)Mar 30, 2026: 0 commitsApr 6, 2026: 0 commitsApr 13, 2026: 0 commitsApr 20, 2026: 0 commitsApr 27, 2026: 0 commitsMay 4, 2026: 0 commitsMay 11, 2026: 0 commitsMay 18, 2026: 0 commitsMay 25, 2026: 0 commitsJun 1, 2026: 0 commitsJun 8, 2026: 0 commitsJun 15, 2026: 0 commitsJun 22, 2026: 0 commitsJun 29, 2026: 0 commitsJul 6, 2026: 9 commits (MarkdownPilot 9)Jul 13, 2026: 175 commits (Mythling 146, MarkdownPilot 16, SellerMaru 13)Jul 20, 2026: 180 commits (SellerMaru 137, Mythling 43)Jul 27, 2026: 166 commits (SellerMaru 166)Aug 3, 2026: 306 commits (SellerMaru 306)Aug 10, 2026: 400 commits (SellerMaru 400)Aug 17, 2026: 362 commits (SellerMaru 362)Aug 24, 2026: 165 commits (SellerMaru 165)Aug 31, 2026: 52 commits (SellerMaru 47, Mythling 5)Sep 7, 2026: 84 commits (Mythling 83, Webtoon art pipeline 1)Sep 14, 2026: 27 commits (Mythling 27)Sep 21, 2026: 59 commits (Webtoon art pipeline 40, MarkdownPilot 17, SellerMaru 2)Sep 28, 2026: 64 commits (Webtoon art pipeline 55, SellerMaru 4, MarkdownPilot 4, vincevangen 1)Oct 5, 2026: 402 commits (Typecraze 228, vincevangen 172, Webtoon art pipeline 1, Mythling 1)Oct 12, 2026: 388 commits (Webtoon art pipeline 226, vincevangen 141, Typecraze 21)Oct 19, 2026: 96 commits (Webtoon art pipeline 84, vincevangen 9, Typecraze 3)Research & evalsOct 6, 2025: 0 commitsOct 13, 2025: 0 commitsOct 20, 2025: 0 commitsOct 27, 2025: 0 commitsNov 3, 2025: work before git historyNov 10, 2025: work before git historyNov 17, 2025: work before git historyNov 24, 2025: work before git historyDec 1, 2025: work before git historyDec 8, 2025: work before git historyDec 15, 2025: work before git historyDec 22, 2025: work before git historyDec 29, 2025: work before git historyJan 5, 2026: work before git historyJan 12, 2026: work before git historyJan 19, 2026: work before git historyJan 26, 2026: work before git historyFeb 2, 2026: work before git historyFeb 9, 2026: work before git historyFeb 16, 2026: work before git historyFeb 23, 2026: work before git historyMar 2, 2026: work before git historyMar 9, 2026: work before git historyMar 16, 2026: work before git historyMar 23, 2026: 152 commits (Quant research platform 152)Mar 30, 2026: 108 commits (Quant research platform 108)Apr 6, 2026: 18 commits (Quant research platform 18)Apr 13, 2026: 33 commits (Quant research platform 33)Apr 20, 2026: 183 commits (Quant research platform 183)Apr 27, 2026: 38 commits (Quant research platform 38)May 4, 2026: 26 commits (Quant research platform 26)May 11, 2026: 7 commits (Quant research platform 7)May 18, 2026: 34 commits (Quant research platform 34)May 25, 2026: 0 commitsJun 1, 2026: 9 commits (Quant research platform 9)Jun 8, 2026: 36 commits (Quant research platform 36)Jun 15, 2026: 14 commits (Quant research platform 14)Jun 22, 2026: 17 commits (Quant research platform 17)Jun 29, 2026: 21 commits (Quant research platform 21)Jul 6, 2026: 56 commits (Quant research platform 56)Jul 13, 2026: 12 commits (Quant research platform 12)Jul 20, 2026: 2 commits (Quant research platform 2)Jul 27, 2026: 0 commitsAug 3, 2026: 14 commits (Quant research platform 14)Aug 10, 2026: 4 commits (Quant research platform 4)Aug 17, 2026: 5 commits (Quant research platform 5)Aug 24, 2026: 10 commits (Quant research platform 10)Aug 31, 2026: 9 commits (Quant research platform 9)Sep 7, 2026: 2 commits (Quant research platform 2)Sep 14, 2026: 3 commits (Quant research platform 3)Sep 21, 2026: 6 commits (Quant research platform 6)Sep 28, 2026: 24 commits (Quant research platform 24)Oct 5, 2026: 26 commits (Quant research platform 19, LLM-judge research 7)Oct 12, 2026: 6 commits (LLM-judge research 3, Quant research platform 3)Oct 19, 2026: 21 commits (Quant research platform 21)InfrastructureOct 6, 2025: 0 commitsOct 13, 2025: 0 commitsOct 20, 2025: 0 commitsOct 27, 2025: 0 commitsNov 3, 2025: 0 commitsNov 10, 2025: 0 commitsNov 17, 2025: 0 commitsNov 24, 2025: 0 commitsDec 1, 2025: 0 commitsDec 8, 2025: 0 commitsDec 15, 2025: 0 commitsDec 22, 2025: 0 commitsDec 29, 2025: 0 commitsJan 5, 2026: 0 commitsJan 12, 2026: 0 commitsJan 19, 2026: 0 commitsJan 26, 2026: 0 commitsFeb 2, 2026: 0 commitsFeb 9, 2026: 0 commitsFeb 16, 2026: 0 commitsFeb 23, 2026: 0 commitsMar 2, 2026: 0 commitsMar 9, 2026: 0 commitsMar 16, 2026: 0 commitsMar 23, 2026: 0 commitsMar 30, 2026: 0 commitsApr 6, 2026: 0 commitsApr 13, 2026: 0 commitsApr 20, 2026: 0 commitsApr 27, 2026: 0 commitsMay 4, 2026: 0 commitsMay 11, 2026: 0 commitsMay 18, 2026: 0 commitsMay 25, 2026: 0 commitsJun 1, 2026: 0 commitsJun 8, 2026: 0 commitsJun 15, 2026: 0 commitsJun 22, 2026: 0 commitsJun 29, 2026: 0 commitsJul 6, 2026: 0 commitsJul 13, 2026: 0 commitsJul 20, 2026: 0 commitsJul 27, 2026: 0 commitsAug 3, 2026: 0 commitsAug 10, 2026: 0 commitsAug 17, 2026: 0 commitsAug 24, 2026: 0 commitsAug 31, 2026: 0 commitsSep 7, 2026: 0 commitsSep 14, 2026: 0 commitsSep 21, 2026: 0 commitsSep 28, 2026: 0 commitsOct 5, 2026: 0 commitsOct 12, 2026: 5 commits (serverbeef 3, caddy-behind-cloudflare 2)Oct 19, 2026: 26 commits (serverbeef 16, caddy-behind-cloudflare 10)Weekly commits across my repositories from October 2025, by area, plus leadership milestones from 2019. Agent tooling and research started before git history; those weeks are hatched.2019OCT 25JAN 26APRJULOCTLeadingJoined Mortgage Automator, 2019-09VP of Engineering, 2024-02PE recapitalization, due diligence, 2024-05VP, recapitalizationAgentsOct 6, 2025: work before git historyOct 13, 2025: work before git historyOct 20, 2025: work before git historyOct 27, 2025: work before git historyNov 3, 2025: work before git historyNov 10, 2025: work before git historyNov 17, 2025: work before git historyNov 24, 2025: work before git historyDec 1, 2025: work before git historyDec 8, 2025: work before git historyDec 15, 2025: work before git historyDec 22, 2025: work before git historyDec 29, 2025: work before git historyJan 5, 2026: work before git historyJan 12, 2026: work before git historyJan 19, 2026: work before git historyJan 26, 2026: work before git historyFeb 2, 2026: work before git historyFeb 9, 2026: 17 commits (MIDI MCP server 17)Feb 16, 2026: 3 commits (MIDI MCP server 3)Feb 23, 2026: 0 commitsMar 2, 2026: 0 commitsMar 9, 2026: 0 commitsMar 16, 2026: 0 commitsMar 23, 2026: 0 commitsMar 30, 2026: 59 commits (CompanyMaestro 59)Apr 6, 2026: 0 commitsApr 13, 2026: 9 commits (Waverunner 9)Apr 20, 2026: 2 commits (Waverunner 2)Apr 27, 2026: 0 commitsMay 4, 2026: 0 commitsMay 11, 2026: 0 commitsMay 18, 2026: 0 commitsMay 25, 2026: 0 commitsJun 1, 2026: 0 commitsJun 8, 2026: 0 commitsJun 15, 2026: 0 commitsJun 22, 2026: 0 commitsJun 29, 2026: 0 commitsJul 6, 2026: 0 commitsJul 13, 2026: 2 commits (Waverunner 2)Jul 20, 2026: 1 commits (CompanyMaestro 1)Jul 27, 2026: 0 commitsAug 3, 2026: 0 commitsAug 10, 2026: 0 commitsAug 17, 2026: 0 commitsAug 24, 2026: 0 commitsAug 31, 2026: 0 commitsSep 7, 2026: 0 commitsSep 14, 2026: 0 commitsSep 21, 2026: 0 commitsSep 28, 2026: 0 commitsOct 5, 2026: 0 commitsOct 12, 2026: 6 commits (Motherbrain 6)Oct 19, 2026: 17 commits (Motherbrain 17)ProductsOct 6, 2025: 0 commitsOct 13, 2025: 0 commitsOct 20, 2025: 0 commitsOct 27, 2025: 0 commitsNov 3, 2025: 0 commitsNov 10, 2025: 0 commitsNov 17, 2025: 0 commitsNov 24, 2025: 0 commitsDec 1, 2025: 0 commitsDec 8, 2025: 0 commitsDec 15, 2025: 0 commitsDec 22, 2025: 0 commitsDec 29, 2025: 0 commitsJan 5, 2026: 0 commitsJan 12, 2026: 0 commitsJan 19, 2026: 0 commitsJan 26, 2026: 0 commitsFeb 2, 2026: 0 commitsFeb 9, 2026: 0 commitsFeb 16, 2026: 0 commitsFeb 23, 2026: 0 commitsMar 2, 2026: 0 commitsMar 9, 2026: 0 commitsMar 16, 2026: 0 commitsMar 23, 2026: 31 commits (MarkdownPilot 31)Mar 30, 2026: 0 commitsApr 6, 2026: 0 commitsApr 13, 2026: 0 commitsApr 20, 2026: 0 commitsApr 27, 2026: 0 commitsMay 4, 2026: 0 commitsMay 11, 2026: 0 commitsMay 18, 2026: 0 commitsMay 25, 2026: 0 commitsJun 1, 2026: 0 commitsJun 8, 2026: 0 commitsJun 15, 2026: 0 commitsJun 22, 2026: 0 commitsJun 29, 2026: 0 commitsJul 6, 2026: 9 commits (MarkdownPilot 9)Jul 13, 2026: 175 commits (Mythling 146, MarkdownPilot 16, SellerMaru 13)Jul 20, 2026: 180 commits (SellerMaru 137, Mythling 43)Jul 27, 2026: 166 commits (SellerMaru 166)Aug 3, 2026: 306 commits (SellerMaru 306)Aug 10, 2026: 400 commits (SellerMaru 400)Aug 17, 2026: 362 commits (SellerMaru 362)Aug 24, 2026: 165 commits (SellerMaru 165)Aug 31, 2026: 52 commits (SellerMaru 47, Mythling 5)Sep 7, 2026: 84 commits (Mythling 83, Webtoon art pipeline 1)Sep 14, 2026: 27 commits (Mythling 27)Sep 21, 2026: 59 commits (Webtoon art pipeline 40, MarkdownPilot 17, SellerMaru 2)Sep 28, 2026: 64 commits (Webtoon art pipeline 55, SellerMaru 4, MarkdownPilot 4, vincevangen 1)Oct 5, 2026: 402 commits (Typecraze 228, vincevangen 172, Webtoon art pipeline 1, Mythling 1)Oct 12, 2026: 388 commits (Webtoon art pipeline 226, vincevangen 141, Typecraze 21)Oct 19, 2026: 96 commits (Webtoon art pipeline 84, vincevangen 9, Typecraze 3)ResearchOct 6, 2025: 0 commitsOct 13, 2025: 0 commitsOct 20, 2025: 0 commitsOct 27, 2025: 0 commitsNov 3, 2025: work before git historyNov 10, 2025: work before git historyNov 17, 2025: work before git historyNov 24, 2025: work before git historyDec 1, 2025: work before git historyDec 8, 2025: work before git historyDec 15, 2025: work before git historyDec 22, 2025: work before git historyDec 29, 2025: work before git historyJan 5, 2026: work before git historyJan 12, 2026: work before git historyJan 19, 2026: work before git historyJan 26, 2026: work before git historyFeb 2, 2026: work before git historyFeb 9, 2026: work before git historyFeb 16, 2026: work before git historyFeb 23, 2026: work before git historyMar 2, 2026: work before git historyMar 9, 2026: work before git historyMar 16, 2026: work before git historyMar 23, 2026: 152 commits (Quant research platform 152)Mar 30, 2026: 108 commits (Quant research platform 108)Apr 6, 2026: 18 commits (Quant research platform 18)Apr 13, 2026: 33 commits (Quant research platform 33)Apr 20, 2026: 183 commits (Quant research platform 183)Apr 27, 2026: 38 commits (Quant research platform 38)May 4, 2026: 26 commits (Quant research platform 26)May 11, 2026: 7 commits (Quant research platform 7)May 18, 2026: 34 commits (Quant research platform 34)May 25, 2026: 0 commitsJun 1, 2026: 9 commits (Quant research platform 9)Jun 8, 2026: 36 commits (Quant research platform 36)Jun 15, 2026: 14 commits (Quant research platform 14)Jun 22, 2026: 17 commits (Quant research platform 17)Jun 29, 2026: 21 commits (Quant research platform 21)Jul 6, 2026: 56 commits (Quant research platform 56)Jul 13, 2026: 12 commits (Quant research platform 12)Jul 20, 2026: 2 commits (Quant research platform 2)Jul 27, 2026: 0 commitsAug 3, 2026: 14 commits (Quant research platform 14)Aug 10, 2026: 4 commits (Quant research platform 4)Aug 17, 2026: 5 commits (Quant research platform 5)Aug 24, 2026: 10 commits (Quant research platform 10)Aug 31, 2026: 9 commits (Quant research platform 9)Sep 7, 2026: 2 commits (Quant research platform 2)Sep 14, 2026: 3 commits (Quant research platform 3)Sep 21, 2026: 6 commits (Quant research platform 6)Sep 28, 2026: 24 commits (Quant research platform 24)Oct 5, 2026: 26 commits (Quant research platform 19, LLM-judge research 7)Oct 12, 2026: 6 commits (LLM-judge research 3, Quant research platform 3)Oct 19, 2026: 21 commits (Quant research platform 21)InfraOct 6, 2025: 0 commitsOct 13, 2025: 0 commitsOct 20, 2025: 0 commitsOct 27, 2025: 0 commitsNov 3, 2025: 0 commitsNov 10, 2025: 0 commitsNov 17, 2025: 0 commitsNov 24, 2025: 0 commitsDec 1, 2025: 0 commitsDec 8, 2025: 0 commitsDec 15, 2025: 0 commitsDec 22, 2025: 0 commitsDec 29, 2025: 0 commitsJan 5, 2026: 0 commitsJan 12, 2026: 0 commitsJan 19, 2026: 0 commitsJan 26, 2026: 0 commitsFeb 2, 2026: 0 commitsFeb 9, 2026: 0 commitsFeb 16, 2026: 0 commitsFeb 23, 2026: 0 commitsMar 2, 2026: 0 commitsMar 9, 2026: 0 commitsMar 16, 2026: 0 commitsMar 23, 2026: 0 commitsMar 30, 2026: 0 commitsApr 6, 2026: 0 commitsApr 13, 2026: 0 commitsApr 20, 2026: 0 commitsApr 27, 2026: 0 commitsMay 4, 2026: 0 commitsMay 11, 2026: 0 commitsMay 18, 2026: 0 commitsMay 25, 2026: 0 commitsJun 1, 2026: 0 commitsJun 8, 2026: 0 commitsJun 15, 2026: 0 commitsJun 22, 2026: 0 commitsJun 29, 2026: 0 commitsJul 6, 2026: 0 commitsJul 13, 2026: 0 commitsJul 20, 2026: 0 commitsJul 27, 2026: 0 commitsAug 3, 2026: 0 commitsAug 10, 2026: 0 commitsAug 17, 2026: 0 commitsAug 24, 2026: 0 commitsAug 31, 2026: 0 commitsSep 7, 2026: 0 commitsSep 14, 2026: 0 commitsSep 21, 2026: 0 commitsSep 28, 2026: 0 commitsOct 5, 2026: 0 commitsOct 12, 2026: 5 commits (serverbeef 3, caddy-behind-cloudflare 2)Oct 19, 2026: 26 commits (serverbeef 16, caddy-behind-cloudflare 10)

1 to 402 commits a weekbefore git historyUpdated Oct 19, 2026

Leading engineering at Mortgage Automator

Sep 2019 to now

Trigger Mortgage Automator is a loan origination and servicing SaaS for private lenders in Canada, the US, Australia and New Zealand. I joined as a senior engineer in 2019 and have been VP of Engineering since February 2024.

  1. Led engineering through technical due diligence for the May 2024 majority recapitalization by BVP Forge, the private-equity arm of Bessemer Venture Partners.
  2. Led engineering through SOC 2: controls, evidence and changes to how we build and ship.
  3. Built hiring, onboarding and a double code-review system while the team grew to about 20 engineers.
  4. Stayed hands-on: rebuilt the Fund engine to at least 5x faster and moved local development to Docker, which cut setup from 1 to 2 days to under 30 minutes.

ScopeUp to ~20 engineers. 375+ lenders and $20B+ funded on the platform as of 2024.

On callGo-to engineer for incidents, disaster recovery and major migrations.

5x
faster Fund engine
30 min
new-developer setup, from 1 to 2 days
80%
less hiring-process bloat
Read the full runbook

Agent control plane

Running daily · open-source release planned

Trigger About 45 repositories and many Claude Code sessions a day, each one starting from zero and none of them knowing what the others had built.

  1. Session starts: a hook injects a short briefing with the project's status, next steps and what is waiting on me.
  2. Before building anything generic, the agent asks the knowledge map whether another project already has it.
  3. An agent reaching into another project without asking first is blocked once. A retry goes through.
  4. When a turn changed files, the Stop hook asks for a report and the project card updates.

LimitHooks time out fast and fail open. If the server is down, events spool to disk and replay later.

RollbackOne command removes the hooks, MCP server and generated skill and keeps the data.

0.94
recall@5, gated (MRR 0.78, 33 queries)
8
MCP tools
~$0.11
to re-index every project's docs
Read the full runbook

Multi-agent orchestration

Waverunner is public

Trigger One agent at a time was the bottleneck, and every repo was growing its own runner script.

  1. Declare a wave of tasks once in a config file.
  2. Each task runs in its own git worktree, so agents never step on each other's files.
  3. Mix parallel batches with sequential barriers, and Claude and Codex in the same wave.
  4. Keep the assembled prompts, logs and outputs for review before anything merges.

LimitTasks in one batch must be independent. Anything that depends on another task goes behind a barrier.

RollbackEvery task is a branch in its own worktree. Rejecting one means deleting it.

Cross-family LLM judges

Research

Trigger I wanted to know whether an LLM can rank short-video openings before they are published, and how far to trust it.

  1. Read the evidence first. On the Upworthy headline benchmark, prompted GPT-4 picked the winner 38% of the time against a 33% baseline.
  2. Judge in blind pairs, in both orders, and keep only picks that survive the swap.
  3. Use a panel across Claude, Gemini and Qwen, and count effective votes instead of raw votes.
  4. Test on five real Shorts with known view outcomes before trusting it on my own.

LimitFive videos is a smoke test, and topic familiarity confounds the result. The judge is a filter for wide margins, not a ranker.

DecisionKeep it as a pruning filter; let real retention data decide the close calls.

Agent-safe infrastructure

Public · this site runs on it

Trigger Agents deploy my apps. They should never hold root on a server or the keys to my DNS.

  1. Harden a fresh Ubuntu server in one script: key-only SSH on a random port, firewall, fail2ban, automatic updates and a verify mode.
  2. Run one shared Caddy per server. Projects never open ports; they join a Docker network and Caddy routes to them.
  3. Accept web traffic only from Cloudflare, so the server's real address is never in DNS.
  4. Every script checks state first, can be re-run and takes --dry-run. All of them run as an unprivileged deploy user.

LimitDNS changes run from my workstation with a scoped token. The server never holds it.

RollbackA site-remove script takes a project off the proxy. A full server rebuild was tested in October 2026.

Also building

The other career

I was a professional pianist for many years: principal accompanist at the School of the Arts, Singapore, then pianist at Canada's National Ballet School, writing software for clients at night until I moved to engineering full time in 2019. I hold a B.Eng. in Computer Engineering from the National University of Singapore and a Master of Music from the Royal Conservatoire of Scotland.