Screen Shot 2558-11-25 at 6.01.00 PM
วันนี้นั่งดู VDO จากงาน Android Dev Summit
เจอคำหนึ่งที่น่าสนใจคือ Lava Flow
เกิดความสงสัยว่ามันคืออะไร ?
จึงได้ลองหาข้อมูลเพิ่มเติม
ทำให้รู้ว่า มันคือรูปแบบของปัญหาอย่างหนึ่ง
ซึ่ง developer ทุก ๆ คนน่าจะเคยเจอ และ เคยทำกันมาบ้าง

Lava flow คืออะไร ?

หรือเรียกว่า Lava Layer
หรือเรียกว่า Dead code
หรือเรียกว่า Vendor lock-in

คือ anti-pattern สำหรับการพัฒนา software
คือ คำที่ใช้อธิบายรูปแบบของปัญหาที่พบมากในการพัฒนา software

มันเป็นอาการของ code ที่ทำงานซ้ำ ๆ ที่กระจายอยู่ทั่วไป หลายที่ในระบบ
มันเป็นอาการของทีมพัฒนาที่ไม่รู้ และ ไม่เข้าใจ
ว่า code ทำงานอย่างไรกันแน่ ?
ว่า code มีรูปแบบอย่างไร ?
ว่าใช้เทคโนโลยีอะไรบ้าง ?
ว่าเทคโนโลยีที่ใช้อยู่มันแก้ไขปัญหาเดิมซ้ำ ๆ หลายที่

โดยรูปแบบนี้จะพบได้มาก จากระบบที่เรียกว่า Enterprise

และจาก

  • ระบบมีขนาดที่ใหญ่
  • ระบบมีความเป็นความตายรออยู่
  • ระบบที่ใช้งานมานาน ๆ ซึ่งมักเรียกว่า Legacy system
  • ทีมพัฒนามีอัตราการ turn-over ที่สูงมาก ๆ

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

เมื่อมีการเพิ่ม แก้ไข feature ต่างๆ
คนทำไว้ก็ไม่อยู่
คนอยู่ทำก็ไม่รู้เรื่อง
สิ่งที่เลือกทำถ้าต้องแก้ไขของเดิมคือ Work around ไป
เพื่อให้มันทำงานได้
แต่ถ้าหาไม่เจอก็เขียนใหม่มันไปเลย
แทนที่จะทำการแก้ไข code ให้ดีขึ้นก่อนแก้ไข !!

บ่อยครั้งจะทำการเขียน comment ใน code ไว้
เช่น Do not delete this code เป็นต้น

บ่อยครั้งจะเขียน code เพิ่มเข้าไป
ไม่อยู่บนสุดของ method
ก็อยู่ล่างสุดของ method
โดยไม่ทำการลบ code เก่า

ตัวอย่างของ code ส่วนของ Data Access Layer ของระบบ

แสดงดังรูป

LavaLayer[5]

คำอธิบาย
จะเห็นได้ว่า แต่ละ version ก็มีรูปแบบที่ต่างกันไป
ทั้งการออกแบบ และ เทคโนโลยีที่ใช้
แต่ทุก ๆ version ยังคงอยู่ และ ถูก deploy ขึ้น production เสมอ
สังเกตไหมว่า ใน version ที่ 4 นั้น
มี 4 วิธีในการแก้ไขปัญหาเดียวกัน !!

ผลที่ตามมา คืออะไรล่ะ ?
ยิ่งนับวันระบบมีความซับซ้อนมากขึ้น
ยิ่งนับวันระบบมีความยุ่งเหยิงมากขึ้น
นั่นคือ โครงสร้าง และ architecture ของระบบยิ่งแย่ลงไปเรื่อย ๆ

นี่แหละที่เราเรียกว่า ระบบปะผุ

code ที่มีอยู่แล้วกลายเป็นเพียง history เท่านั้น
ถ้าต้องการแก้ไข หรือ เพิ่มอะไรเข้าไป
เราจะเขียน ontop อย่างเดียว ไม่ไปยุ่งกับของเก่า
แล้วในที่สุดมันจะกลายเป็น spaghetti code + dead code

นั่นหมายถึง Developer ชอบเขียนใหม่มากกว่าปรับปรุงให้ดีขึ้น
หรือรู้ว่าต้องปรับปรุง แต่ไม่สามารถหาเหตุผลเพื่ออธิบายให้ฝ่าย business เข้าใจได้
หรือว่าคุยกับฝั่ง business แล้วไม่รู้เรื่อง
หรือมีปัญหาเรื่องพูดคุย และ สื่อสารกัน

มี Developer คนไหน เผชิญกับ Lava flow อยู่บ้าง ?
หรือว่ากำลังสร้างมันขึ้นมา !!

Reference Websites
http://www.antipatterns.com/lavaflow.htm
http://mikehadlow.blogspot.no/2014/12/the-lava-layer-anti-pattern.html?m=1
http://perldesignpatterns.com/?LavaFlow
http://mikehadlow.blogspot.com/2014/12/the-lava-layer-anti-pattern.html
http://www.infoq.com/news/2015/01/lava-layer-antipattern
http://robkent.com/blog/?p=88