<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Zhuifeng Notes</title><link>https://0607501b.wangpeng.pages.dev/en/</link><description>Recent content on Zhuifeng Notes</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sat, 15 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://0607501b.wangpeng.pages.dev/en/index.xml" rel="self" type="application/rss+xml"/><item><title>Bio</title><link>https://0607501b.wangpeng.pages.dev/en/about/bio/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://0607501b.wangpeng.pages.dev/en/about/bio/</guid><description>&lt;h2 id="who-i-am"&gt;Who I am&lt;/h2&gt;&#10;&lt;p&gt;Wang Peng. BSc in Mathematics, MSc in Computer Science. Backend architect at a bank&amp;rsquo;s headquarters (Beijing).&lt;/p&gt;&#10;&lt;p&gt;Day to day I work on the &lt;strong&gt;Enterprise Customer Information Facility (ECIF)&lt;/strong&gt;, &lt;strong&gt;core banking&lt;/strong&gt;, and &lt;strong&gt;distributed systems&lt;/strong&gt;. Familiar with:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;database sharding, RocketMQ account-change notifications;&lt;/li&gt;&#10;&lt;li&gt;accounts / cards / payment settlement / interest / limits;&lt;/li&gt;&#10;&lt;li&gt;data governance and security encryption;&lt;/li&gt;&#10;&lt;li&gt;payment systems (China&amp;rsquo;s second-generation payment system, UnionPay / NetsUnion);&lt;/li&gt;&#10;&lt;li&gt;AML / KYC / CRS.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="what-im-doing"&gt;What I&amp;rsquo;m doing&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Goal: grow from a bank technical expert toward CIO;&lt;/li&gt;&#10;&lt;li&gt;building a personal brand on the side — the WeChat column &lt;em&gt;金融科技百分百&lt;/em&gt; (Fintech 100%) — writing on banking systems, fintech, payments, distributed systems, and IT architecture;&lt;/li&gt;&#10;&lt;li&gt;this site (Zhuifeng Notes) is where I consolidate technical columns, blog, and docs.&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Writing &amp; Columns</title><link>https://0607501b.wangpeng.pages.dev/en/about/writing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://0607501b.wangpeng.pages.dev/en/about/writing/</guid><description>&lt;p&gt;On this site I write three kinds of columns, matching different focuses of my banking work:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://0607501b.wangpeng.pages.dev/en/architecture"&gt;Architecture&lt;/a&gt;: ECIF, core banking, distributed architecture, and DDD;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://0607501b.wangpeng.pages.dev/en/banking"&gt;Banking&lt;/a&gt;: payment clearing, interest and limits, accounts/cards, AML/KYC/CRS;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://0607501b.wangpeng.pages.dev/en/data"&gt;Data&lt;/a&gt;: data governance, encryption and security, sharding, messaging and stream processing.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;I also run the WeChat column &lt;em&gt;金融科技百分百&lt;/em&gt; (Fintech 100%), sharing hands-on practice and thoughts on banking systems, fintech, payments, distributed systems, and IT architecture.&lt;/p&gt;</description></item><item><title>Contact</title><link>https://0607501b.wangpeng.pages.dev/en/about/contact/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://0607501b.wangpeng.pages.dev/en/about/contact/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;WeChat column: 金融科技百分百&lt;/li&gt;&#10;&lt;li&gt;Email: (to be added)&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>First post — why "Zhuifeng Notes"</title><link>https://0607501b.wangpeng.pages.dev/en/blog/welcome/</link><pubDate>Sat, 15 Aug 2026 00:00:00 +0000</pubDate><guid>https://0607501b.wangpeng.pages.dev/en/blog/welcome/</guid><description>&lt;p&gt;After years of building banking system architecture, most of what I&amp;rsquo;ve learned — the pitfalls, the hard-won insights — lived scattered across notes and chat logs. This site is where I organize them.&lt;/p&gt;&#10;&lt;h2 id="what-ill-write"&gt;What I&amp;rsquo;ll write&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Architecture&lt;/strong&gt;: ECIF, core banking, distributed architecture, and how Domain-Driven Design (DDD) lands in banking.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Banking&lt;/strong&gt;: payment clearing, interest and limits, accounts/cards, AML/KYC/CRS.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Data&lt;/strong&gt;: data governance, encryption and security, sharding, messaging and stream processing.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="who-its-for"&gt;Who it&amp;rsquo;s for&lt;/h2&gt;&#10;&lt;p&gt;Peers, engineers moving into fintech, and anyone curious about &lt;em&gt;why&lt;/em&gt; banking systems are designed the way they are.&lt;/p&gt;</description></item><item><title>Applying DDD Aggregates in a Banking ECIF</title><link>https://0607501b.wangpeng.pages.dev/en/architecture/ddd-aggregate/</link><pubDate>Wed, 12 Aug 2026 00:00:00 +0000</pubDate><guid>https://0607501b.wangpeng.pages.dev/en/architecture/ddd-aggregate/</guid><description>&lt;p&gt;In an ECIF, the concept of &amp;ldquo;customer&amp;rdquo; is huge: retail, corporate, and interbank clients each have different attributes, relationships, and lifecycles. Forcing them into one giant &lt;code&gt;Customer&lt;/code&gt; entity makes the code rot fast.&lt;/p&gt;&#10;&lt;h2 id="slice-by-bounded-context"&gt;Slice by bounded context&lt;/h2&gt;&#10;&lt;p&gt;Split the customer across bounded contexts:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Party (master data)&lt;/strong&gt;: unified natural-person / institution identity and base attributes.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Profile&lt;/strong&gt;: risk appetite, marketing tags — high read/write churn.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Relationship&lt;/strong&gt;: shareholding, guarantee, and group relationships.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="where-the-aggregate-root-goes"&gt;Where the aggregate root goes&lt;/h2&gt;&#10;&lt;p&gt;Each context defines its own aggregate root. In Party, &lt;code&gt;Party&lt;/code&gt; is the root; &lt;code&gt;Address&lt;/code&gt; and &lt;code&gt;Contact&lt;/code&gt; are value objects, keeping cross-aggregate calls out of the consistency boundary.&lt;/p&gt;</description></item><item><title>ECIF in one read — why customer data must be centralized</title><link>https://0607501b.wangpeng.pages.dev/en/banking/ecif-overview/</link><pubDate>Mon, 10 Aug 2026 00:00:00 +0000</pubDate><guid>https://0607501b.wangpeng.pages.dev/en/banking/ecif-overview/</guid><description>&lt;p&gt;Before ECIF, branches, internet banking, and the card center each kept their own customer records. The same person appeared with different names, IDs, and contacts across systems — making both marketing and risk control impossible.&lt;/p&gt;&#10;&lt;h2 id="what-ecif-solves"&gt;What ECIF solves&lt;/h2&gt;&#10;&lt;p&gt;ECIF (Enterprise Customer Information Facility) consolidates customer master data scattered across business systems into one place, exposing a &lt;strong&gt;single customer view&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Unique identity&lt;/strong&gt;: a Party ID unifies natural persons / institutions, not the ID number.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Primary/secondary&lt;/strong&gt;: supports one person many accounts, one account many cards, with unique master data.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Service-oriented&lt;/strong&gt;: other systems query via interfaces instead of keeping their own copies.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="key-technical-trade-offs"&gt;Key technical trade-offs&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Read/write split&lt;/strong&gt;: master writes are strongly consistent; queries can hit cache / read replicas.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Auditable changes&lt;/strong&gt;: customer changes are traced to satisfy regulatory audits.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;ECIF is not &amp;ldquo;yet another database&amp;rdquo; — it is the bedrock of bank digitalization.&lt;/p&gt;</description></item><item><title>Bank Data Governance — metadata before quality</title><link>https://0607501b.wangpeng.pages.dev/en/data/data-governance/</link><pubDate>Sat, 08 Aug 2026 00:00:00 +0000</pubDate><guid>https://0607501b.wangpeng.pages.dev/en/data/data-governance/</guid><description>&lt;p&gt;Many bank data-governance programs degenerate into &amp;ldquo;fill in the metadata, assign owners.&amp;rdquo; To get results, governance must be built into the data production pipeline.&lt;/p&gt;&#10;&lt;h2 id="do-two-things-first"&gt;Do two things first&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Metadata &amp;amp; lineage&lt;/strong&gt;: where a field comes from, which jobs transform it, where it flows — must be tracked automatically.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Quality rules built-in&lt;/strong&gt;: non-null, uniqueness, consistent definitions act as ETL/lakehouse &lt;em&gt;gates&lt;/em&gt;; bad data never lands.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="security--encryption"&gt;Security &amp;amp; encryption&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Encryption at rest&lt;/strong&gt;: sensitive fields (ID numbers, card numbers) encrypted on disk.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Dynamic masking&lt;/strong&gt;: query-side masking by role; dev environments never see plaintext.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;The goal of governance isn&amp;rsquo;t a pretty report — it&amp;rsquo;s giving downstream systems confidence to use the data.&lt;/p&gt;</description></item></channel></rss>