ไม่พลาดเมื่อสร้างระบบบัญชีสำหรับสตาร์ทอัป
- สำหรับบริษัทฟินเทค การไม่ปล่อยให้กระแสเงินหลุดรอดเป็นเรื่องพื้นฐาน แต่ในสตาร์ทอัปบางแห่งกลับมีกรณีที่เงินหายไปทีละไม่กี่เซนต์ในแต่ละธุรกรรม
- สตาร์ทอัปมักยึดแนวคิดว่า "ทำให้มันใช้ได้ก่อน ทำให้มันถูกต้อง แล้วค่อยทำให้มันเร็ว" จึงไม่ได้สร้างระบบบัญชีแบบบันทึกสองด้าน
- ความผิดพลาดเหล่านี้ทำให้เกิดความไม่พอใจของผู้ใช้ และขัดขวางการเติบโตของบริษัท
- มีความพยายามแก้ปัญหาด้วยการให้ทีมสนับสนุนลูกค้าชดเชยธุรกรรมที่ผิดพลาดด้วยตนเอง
ความสำคัญของระบบบัญชี
- เงินถูกสร้างขึ้นเมื่อมีการเคลื่อนย้าย และการติดตามสิ่งนี้มีความซับซ้อน
- ระบบบัญชีแบบบันทึกด้านเดียวช่วยให้เห็นการไหลของเงิน แต่ไม่สามารถอธิบายเหตุผลของมันได้
- ระบบบัญชีแบบบันทึกสองด้านสามารถแก้ปัญหานี้ได้ โดยติดตามทั้งแหล่งที่มาและปลายทางของเงิน
โมเดลข้อมูลของระบบบัญชีแบบบันทึกสองด้าน
- ระบบบัญชีแบบบันทึกสองด้านประกอบด้วย 3 เอนทิตี ได้แก่ account, entry และ transaction
- account แสดงการเปลี่ยนแปลงของมูลค่า ส่วน entry แสดงการไหลของเงินระหว่าง account
- transaction ช่วยรับประกันว่า entry จะถูกจับคู่กันอย่างถูกต้อง
ระบบบัญชีสองแบบ
- ระบบบัญชีคืออินเทอร์เฟซของสมุดบัญชีที่มองจากภายนอก ส่วนระบบวิศวกรรมคือการทำให้สมุดบัญชีนั้นทำงานจริง
- ระบบบัญชีต้องการความพร้อมใช้งานสูงและเวลาแฝงต่ำ ขณะที่ระบบวิศวกรรมต้องการความสอดคล้องที่เข้มงวดและความถูกต้องของข้อมูล
วิธีการทำงานของ entry
- entry สามารถอยู่ได้ใน 3 สถานะ ได้แก่ pending, discarded และ posted
- entry จะถูกสร้างในสถานะ pending เสมอ และ entry ที่ถูก discarded สามารถถูกแทนที่ด้วย entry ที่ posted ได้
วิธีการทำงานของ transaction
- transaction จะถูกโพสต์ก็ต่อเมื่อ entry ถูก posted หรือ discarded เท่านั้น
- หาก transaction ล้มเหลวบางส่วน ก็สามารถยกเลิกในเชิงความหมายได้ด้วย compensating entry
วิธีการทำงานของ account
- account เชื่อมโยงกับ entry ได้หลายรายการ และยอดคงเหลือรวมต้องตรงกับผลรวมของยอดคงเหลือรายรายการของ entry ทั้งหมด
- วิธีคำนวณยอดคงเหลือรวมจะแตกต่างกันไปตามยอดคงเหลือปกติของ account
บทสรุป
- สมุดบัญชีเป็นตัวอย่างที่ชัดเจนของปัญหาวิทยาการคอมพิวเตอร์ที่ยาก ซึ่งปลอมตัวมาในรูปแบบของเรื่องที่ดูไม่ใช่สายเทคนิค
- การสร้างระบบบัญชีแบบบันทึกสองด้านเป็นเรื่องยากหากไม่มีบริบทที่เหมาะสม แต่เมื่อทำได้ก็จะช่วยให้ตัดสินใจได้ดีขึ้น
1 ความคิดเห็น
ความเห็นจาก Hacker News
ในกรณีของลูกค้า Synapse มีเงินจำนวนมากหายไป ธนาคารต้องควบคุมการไหลของเงินอย่างเข้มงวด แต่ฟินเทคกลับรวบรวมเงินทั้งหมดไว้ในบัญชี FBO และสร้างบัญชีแยกประเภทเพื่อติดตามมัน ในกรณีของ Synapse ยอดคงเหลือลูกค้าที่บันทึกไว้ในบัญชีแยกประเภทมากกว่าเงินที่มีอยู่จริงในบัญชี FBO มีแนวโน้มว่านี่เป็นผลจากบัญชีแยกประเภทที่บกพร่องมากกว่าการฉ้อโกง ขอแนะนำว่าอย่านำเงินไปฝากในบัญชีเงินฝากของฟินเทค และให้ใช้ธนาคารจริงแทน ฟินเทคมักอ้างว่าเงินฝากได้รับความคุ้มครองจากประกัน FDIC แต่สิ่งนี้คุ้มครองเฉพาะกรณีที่ธนาคารต้นทางล้มละลายเท่านั้น
จากการทำงานที่ Google ได้เรียนรู้เรื่องการยอมแลกความน่าเชื่อถือหรือความถูกต้องบางส่วนเพื่อให้ได้ความสามารถในการขยายระบบ เมื่อรองรับคำขอหลายล้านครั้ง บางส่วนอาจล้มเหลวได้ และนี่สะท้อนถึงความต่างของแนวคิดทางวิศวกรรม เวลาที่เปิด Gmail ก็มักเกิดข้อผิดพลาดได้ แต่ผู้ใช้แก้ได้ด้วยการรีเฟรช หากความทนทานของระบบจัดเก็บข้อมูลอยู่ที่ 99.99999% ในลูกค้า 2 พันล้านคน ก็อาจมี 200 คนที่ต้องเจอความไม่สะดวก
เน้นย้ำความสำคัญของความรู้เฉพาะโดเมนในภาวะผู้นำด้านวิศวกรรม หากทำงานในบริษัทการเงิน ก็จำเป็นต้องเข้าใจเรื่องการเงิน และสิ่งนี้ก็เป็นจริงเช่นกันในงานสื่อสารมวลชนหรือพาณิชย์ องค์กรที่ประสบความสำเร็จจะใส่คำถามที่ไม่ใช่ด้านเทคนิคแต่เกี่ยวข้องกับโดเมนเข้าไปในการสัมภาษณ์ทีมเทคนิค
การจ้างคนที่เหมาะสมเป็นสิ่งสำคัญ แทนที่จะจ้างคนที่เก่งด้านโครงสร้างข้อมูลและอัลกอริทึม ควรจ้างคนที่สามารถสร้างสิ่งที่ต้องใช้ได้จริง การที่วิศวกรได้รับการศึกษาในสาขาอื่นด้วยก็อาจเป็นประโยชน์ การแก้ปัญหาและงานวิศวกรรมเกิดขึ้นได้จากความเข้าใจเชิงลึกต่ออุตสาหกรรมและการร่วมงานกับผู้เชี่ยวชาญ
แบ่งปันประสบการณ์การสร้างระบบเรียกเก็บเงินในสตาร์ตอัปด้านอินเทอร์เน็ต/โทรคมนาคม มีการสร้างตรรกะการคิดค่าบริการไว้สองที่ ทำให้ยากต่อการคงการซิงก์ให้ตรงกัน มีการตรวจใบแจ้งหนี้ด้วยมือเพื่อป้องกันข้อผิดพลาด และใช้ตรรกะแบบซ้ำซ้อนเพื่อป้องกันความผิดพลาด ประสบการณ์นี้ทำให้เข้าใจความสำคัญของระบบบัญชีคู่
มีหลายความเห็นที่สนับสนุนระบบบัญชีแบบบันทึกรายการทางเดียว แม้ว่าระบบแบบนี้อาจง่ายกว่า แต่การใช้ระบบบัญชีคู่จะดีกว่า กำลังมองหาแหล่งข้อมูลด้านบัญชีสำหรับโปรแกรมเมอร์
มีความเข้าใจผิดเกี่ยวกับหลักการ "make it work, make it right, make it fast" โดย "make it right" คือขั้นตอนที่สอง และงานจะหยุดอยู่ตรงนั้นจนกว่าระบบจะทำงานได้อย่างถูกต้อง การปรับให้เหมาะที่สุดจะเริ่มหลังจากแก้ทุกปัญหาแล้วเท่านั้น
หากไม่มีการทดสอบ ก็อาจเกิดปัญหาเงินหายไปจากธุรกรรมได้ การมองว่าเรื่องแบบนี้เป็นเรื่องปกติเมื่อสร้างระบบการเงินเป็นสิ่งที่ผิด
หากพยายามสร้างบางส่วนของธนาคารขึ้นมาใหม่ ก็ควรอ้างอิงระบบที่ผ่านการพิสูจน์แล้ว ตัวอย่างเช่น สามารถดูสคีมาธุรกรรมเงินฝากของระบบ core banking ที่ใช้ในสถาบันการเงินขนาดเล็กและขนาดกลางในสหรัฐฯ ได้
ซอฟต์แวร์ที่เกี่ยวข้องกับเงินต้องได้รับการดูแลอย่างระมัดระวังอย่างยิ่ง และต้องตระหนักถึงความผิดพลาดในอดีต เรื่องอื้อฉาวของไปรษณีย์อังกฤษแสดงให้เห็นผลลัพธ์จริงของปัญหาเหล่านี้