อ่านบทความเรื่อง Scaling Unsplash with a small team
อธิบายว่าทีมพัฒนาระบบ Unsplash นั้นเป็นอย่างไร 
ทำงานและคิดกันอย่างไร ซึ่งเป็นอีกมุมมองที่น่าสนใจดี
จึงทำการสรุปไว้

ระบบUnsplash รองรับจำนวนการใช้งานประมาณนี้

  • เรียกใช้งาน API กว่า 10 ล้าน request ต่อวัน
  • มีการ process event ต่าง ๆ มากกว่า 60 ล้านครั้ง
  • ให้บริการรูปภาพกว่า 60 ล้านรูป

ทีมพัฒนานั้นมีขนาดเล็กมาก ๆ ประกอบไปด้วย

  • Designer 2 คน
  • Fronend 3 คน พัฒนาด้วย React + Webpack และ Express สำหรับทำ Server-sider rendering และ proxy ไปยัง API
  • Backend 3 คน พัฒนาด้วย Rails
  • Data engineer 1 คน

เขียน test ในทุกสิ่งทุกอย่างที่ต้องการหรืออยากรู้

https://twitter.com/lukechesser/status/835548678836338689

หน้าที่หลักของแต่ละคนคือ 
การสร้างและทดลองสิ่งใหม่ ๆ
ทั้งการพัฒนาระบบและ feature ใหม่ ๆ
เพื่อทำให้ทำงานได้ดี และระบบโตไปพร้อม ๆ กัน

กว่า 3 ปีที่ทีมพัฒนาทำการปรับปรุงและทดลองสิ่งใหม่ ๆ
จนได้ principle ที่น่าจะตอบโจทย์ของทีมและบริษัท
ประกอบไปด้วย

1. Build boring, obvious solutions

ก่อนที่จะนำเครื่องมือใหม่ ๆ มาใช้
ก่อนที่จะนำ database ใหม่ ๆ มาใช้
ก่อนที่จะนำ pattern ใหม่ ๆ มาใช้
ก่อนที่จะนำ architecture ใหม่ ๆ มาใช้
คุณทำการปรับปรุงหรือแก้ไขปัญหาต่าง ๆ ดีแล้วหรือยัง ?

ยกตัวอย่างเช่นฝั่ง Backend 
มักจะมีปัญหากับการใช้เครื่องมือพื้นฐานต่าง ๆ
ทำให้ระบบทำงานได้ไม่ดีอย่างที่ต้องการ
แต่ก็พยายามแก้ไขด้วยการทำ caching, batching
รวมไปถึงการทำงานแบบ asynchronous
เพื่อทำให้ระบบทำงานได้ดียิ่งขึ้น

2. Focus on solving user problems, not technology problems

ที่บริษัท Unsplash นั้นคือ product company ไม่ใช่ technology company
ดังนั้นเงินลงทุนต่าง ๆ จะมีเป้าหมายไปที่
การแก้ไขปัญหาของ product และ marketing เป็นหลัก
ว่าผู้ใช้งานมีปัญหาอะไร ก็แก้ไขตามนั้น

ดังนั้นการเลือกใช้เทคโนโลยีต่าง ๆ จึงเป็นสิ่งที่สร้างมาและใช้งานได้อยู่แล้ว
เพียงนำสิ่งเหล่านั้นมาเชื่อมต่อหรือทำงานร่วมกัน
เพื่อแก้ไขปัญหาของผู้ใช้งาน และให้ขยาย community ระบบให้ใหญ่ขึ้น

ดังนั้นจะเห็นว่าระบบของ Unsplash จะใช้ 3-party service เยอะมาก ๆ

เพื่อใช้จัดการปัญหาและงานต่าง ๆ เช่น 

  • Web Server ก็ใช้งาน Heroku
  • CDN caching ก็ใช้ Fastly
  • Elasticsearch cluster ก็ใช้ Elastic cloud
  • เรื่องของ feed data และnotification ก็ใช้ Steam
  • รูปต่าง ๆ ก็ไปเก็บที่ Imgix

ส่วนของ Monitoring system ก็ใช้

  • Centralize logging ใช้ Loggly
  • Metric และค่าต่าง ๆ ของระบบ ใช้ New Relic
  • Exception และ error ต่าง ๆ ใช้ Sentry, StatusPage

3. Throw money at technical problems

ง่าย ๆ คือ ใช้เงินแก้ไขปัญหา technical ไปเลย
โดยจะจ่าย service ต่าง ๆ ที่ใช้งานแบบ premium ไปเลย
เหมือนจะเป็นเครื่องที่ตลก แต่มันเป็นจริงมาก ๆ
เพราะว่า แก้ไขปัญหาที่เกิดซ้ำแล้วซ้ำเล่าทาง technical ได้ดีมาก ๆ
ส่งผลทำให้ทีมพัฒนาไป focus กับงานหรือปัญหาจากผู้ใช้งานได้เต็ม ๆ
ทำให้ระบบโตขึ้นสูงมาก ๆ
ส่วนการ optimize ค่าใช้จ่ายต่าง ๆ
ก็เป็นอีกปัญหาหนึ่งที่ต้องทำและแก้ไข เช่นกัน แต่ใครจะสนใจละ !!

Reference Websites