ทุก repository ที่ถูกทิ้งร้าง เคยเป็นความคลั่งไคล้ในช่วงตี 2 มาก่อน คุณรู้จังหวะของมันดี ไอเดียจะผุดขึ้นมาตอนเที่ยงคืน คุณเริ่มวางโครงสร้าง repo ก่อนที่กาแฟจะเย็นชืดเสียอีก เป็นเวลาสิบเอ็ดวันที่คุณ push code ด้วยพลังงานอันล้นเหลือราวกับคนที่เพิ่งค้นพบคำตอบที่ตามหามานาน แล้ว sprint ก็จบลง หรือไม่ก็หม้อต้มน้ำเสีย หรือคุณแค่เปิดโค้ดขึ้นมาดูในเย็นวันอังคาร แล้วความรู้สึกที่เคยมีก็หายวับไป
นักพัฒนาส่วนใหญ่ต่างแบกรับความรู้สึกนี้ไว้ มันไม่ใช่ความเสียใจเสียทีเดียว แต่มันเหมือนกับรายการ "ถ้าหากว่า..." ที่เก็บไว้เงียบๆ โปรไฟล์ GitHub ของคุณกลายเป็นหอจดหมายเหตุแห่งความตั้งใจดี ผู้สร้าง Side Project Cemetery ได้สร้างบางสิ่งขึ้นมาเพื่อเผชิญหน้ากับเรื่องนี้โดยตรง เครื่องมือของพวกเขาเปลี่ยนโปรไฟล์สาธารณะของคุณให้กลายเป็นสุสานใต้แสงจันทร์ ที่ซึ่งทุก repo ที่หยุดนิ่งจะได้รับป้ายหลุมศพ วันที่เสียชีวิต และบางครั้งก็มีมุกตลกทิ้งท้าย
สุสานที่เติบโตขึ้น
Side projects ตายด้วยเหตุผลที่แสนธรรมดา คุณอยากเรียนรู้ framework ใหม่ ก็เลยสร้าง CLI tool ขึ้นมา คุณอยากทำ spreadsheet ให้เป็นอัตโนมัติ ก็เลยเขียน Python wrapper ตัวต้นแบบทำงานได้ดีพอที่จะแก้ปัญหาของคุณได้แล้ว และนั่นคือจุดสิ้นสุด ไม่มีผู้ใช้รออยู่ ไม่มี deadline มาคอยเร่ง ไม่มีผู้จัดการมาคอยถามความคืบหน้า เมื่อไม่มีแรงกดดันจากภายนอก แรงจูงใจจึงต้องแบกรับภาระทั้งหมดไว้เพียงลำพัง และเมื่อแรงจูงใจลดลง โปรเจกต์ก็หยุดชะงัก
ลองไปดู GitHub ของนักพัฒนาทั่วไป แล้วคุณจะเห็นรูปแบบเดิมๆ กราฟการมีส่วนร่วม (contribution graph) ที่เป็นสีสนิมสำหรับ repo หนึ่ง README ที่จบลงด้วย “TODO: write tests.” ประวัติการ commit ที่ขาดหายไปเหมือนตกหน้าผาเมื่อหกเดือนก่อน เราปฏิบัติกับ repo เหล่านี้เหมือนของที่ระลึกที่น่าอาย เราเลื่อนผ่านมันไปอย่างรวดเร็ว ราวกับว่าโค้ดที่ยังทำไม่เสร็จเป็นสิ่งที่ต้องปกปิด Side Project Cemetery กลับเลือกทำในสิ่งตรงกันข้าม มันบอกว่า: ฝังพวกมันให้เหมาะสม ยอมรับการมีอยู่ของมัน แล้วถ้าคุณต้องการ ก็จงปลุกมันขึ้นมาใหม่
สุสานนี้ทำงานอย่างไร
อินเทอร์เฟซนั้นตรงไปตรงมาและเรียบง่าย คุณแค่พิมพ์ชื่อผู้ใช้ GitHub ใดก็ได้ แอปจะเรียกใช้ GitHub REST API ดึงทุก public repository ออกมา และกรองเอาเฉพาะอันที่ไม่มีการ push ในช่วงหนึ่งร้อยแปดสิบวันที่ผ่านมา แต่ละผลลัพธ์จะกลายเป็นหลุมศพ คุณจะเห็นปีที่เกิด ปีที่ตาย และคำจารึกหน้าหลุมศพ (epitaph) ที่สร้างขึ้นจากรายละเอียดของ repo นั้นๆ
คำจารึกบางอันก็ดูนุ่มนวล:
- เขียนด้วย JavaScript. เสียชีวิตจากอาการเหนื่อยล้าของ callback.
บางอันก็ให้มุมมองประวัติศาสตร์ที่ดูใจดีกว่า:
- ยังไม่ตาย. แค่พักงานอย่างจริงจังตั้งแต่ปี 2025.
หากคุณต้องการความมีเอกลักษณ์มากขึ้น คุณสามารถเปิดใช้งานการเชื่อมต่อกับ Gemini (ตัวเลือกเสริม) ได้ AI จะอ่านภาษาและบริบทของ repo เพื่อร่างคำจารึกที่ดูเฉพาะเจาะจง แทนที่จะเป็นแค่ข้อความตามเทมเพลต นอกจากนี้ยังมีตัวเลือกการเชื่อมต่อกับ ElevenLabs ที่จะอ่านคำไว้อาลัยให้ฟัง ซึ่งฟังดูเหมือนเป็นแค่ลูกเล่นจนกระทั่งคุณได้ยิน API wrapper ที่คุณทิ้งร้างไป ถูกบรรยายด้วยน้ำเสียงของผู้บรรยายที่แสนเศร้า เมื่อถึงจุดนั้น ความไร้สาระจะทำลายความรู้สึกผิดลง และความรู้สึกผิดนี่แหละคือสิ่งที่ทำให้ repo นั้นถูกฝังอยู่ใต้ดินมาตลอด
Rekindle: ปุ่มสู้กับความรู้สึกท้อแท้
สุสานเป็นเพียงแค่ครึ่งเดียวของจุดประสงค์ ฟีเจอร์ที่แท้จริงซ่อนอยู่ใต้ป้ายหลุมศพแต่ละอัน นั่นคือปุ่ม Rekindle เมื่อคลิก แอปจะอ่าน README ของคุณ มันจะวิเคราะห์สิ่งที่คุณเขียนเกี่ยวกับจุดประสงค์ของโปรเจกต์ นำมาเปรียบเทียบกับโค้ดที่มีอยู่ และเขียนคำโปรยสั้นๆ เพื่อเตือนความจำว่าทำไมตอนแรกคุณถึงให้ความสำคัญกับมัน จากนั้นมันจะจบด้วยการแนะนำการกระทำเล็กๆ ที่เป็นรูปธรรมหนึ่งอย่างที่คุณสามารถทำได้ในคืนนี้ ไม่ใช่ roadmap ไม่ใช่แผนการ refactor แต่เป็นเพียงงานเดียวที่ใช้เวลาแค่ห้านาที
เรื่องนี้สำคัญเพราะส่วนที่ยากที่สุดของการกลับไปทำโปรเจกต์เก่าไม่ใช่การเขียนโค้ด แต่มันคือการจำให้ได้ว่าคุณทำค้างไว้ถึงไหน และการให้อภัยตัวเองที่หยุดทำไป โปรเจกต์ที่ตายไปนานแล้วจะให้ความรู้สึกว่ามันใหญ่โตมโหฬาร คุณจะทึกทักเอาเองว่าต้องใช้เวลาถึงสามชั่วโมงเพียงเพื่อทำความเข้าใจสถาปัตยกรรม (architecture) อีกครั้ง ปุ่ม Rekindle จะบีบอัดความทึกทักนั้นให้เหลือเพียงรายการสิ่งที่ต้องทำ (todo) เพียงอย่างเดียว เป้าหมายคือทำให้การ commit ครั้งต่อไปของคุณรู้สึกเหมือนอยู่ห่างออกไปเพียงห้านาที เพราะเมื่อคุณมี diff เพียงหนึ่งรายการในประวัติ แรงขับเคลื่อน (momentum) ก็มักจะกลับมา
ทำไมถึงต้องรักษา Stack ให้เรียบง่ายขนาดนี้
ในทางเทคนิค โปรเจกต์นี้ทำตามสิ่งที่ตัวเองสอน มันถูกสร้างขึ้นด้วย vanilla HTML, CSS และ JavaScript ใช้ GitHub REST API ไม่ต้องมีเซิร์ฟเวอร์ ไม่ต้องมีขั้นตอนการ build และไม่มี framework ประจำเดือนที่ต้องคอยดูแล คุณสามารถโฮสต์มันบน GitHub Pages แล้วเดินจากไปได้เลย
ความมินิมอลนั้นคือฟีเจอร์ ไม่ใช่ความขี้เกียจ เครื่องมือเกี่ยวกับการชุบชีวิตโค้ดเก่าไม่ควรต้องพึ่งพาโครงสร้างความสัมพันธ์ (dependency tree) ที่เปราะบางเสียเอง หากผู้สร้างทิ้ง Side Project Cemetery ไปหกเดือน สุสานแห่งนี้ก็จะไม่กลายเป็นผู้อาศัยรายใหม่ในสุสานของตัวเอง โค้ดยังคงอ่านง่าย ไม่ต้องอัปเดต webpack configs ไม่ต้องแพตช์ Docker images มันคือการโต้แย้งอย่างเงียบๆ ถึงความพอดีในการสร้างเครื่องมือ: บางครั้งแค่ static site และ API key ก็เพียงพอแล้ว
เมื่อปุ่มนั้นใช้งานได้จริง
ผู้สร้างยอมรับว่าโปรเจกต์ที่ตายไปแล้วของเขาเองได้เรียกหาเขาในระหว่างการพัฒนา มีโปรเจกต์หนึ่งเป็นพิเศษที่เกิดจากความคลั่งไคล้เพียงชั่วข้ามคืน เขียนขึ้นด้วยความตื่นเต้นจนลืมตัว แล้วก็ถูกลืมเลือนไป เขาใช้ปุ่ม Rekindle กับมัน แอปอ่านไฟล์ README จดจำแนวคิดหลัก และส่งงานที่ต้องทำจริงๆ กลับมาให้เพื่อทำให้เสร็จ มันได้ผล เขาจึงสามารถปล่อยชิ้นส่วนที่ขาดหายไปได้ภายในสัปดาห์นั้นเลย
นี่คือหัวใจสำคัญของเครื่องมือนี้ ความหลงใหลไม่ได้ตายไป แต่มันแค่กำลังงีบหลับอยู่ Repository ส่วนใหญ่ที่ถูกทิ้งร้างไม่ใช่ความล้มเหลวทางวิศวกรรม แต่เป็นความล้มเหลวในการรักษาบริบท (context) คุณทำเส้นเรื่องหลุดหายไปเพราะเส้นเรื่องนั้นอยู่ในหัวของคุณเพียงอย่างเดียว และหัวของคุณก็ย้ายไปสนใจเส้นเรื่องอื่นแล้ว Side Project Cemetery ช่วยดึงบริบทเหล่านั้นออกมาให้เห็นเป็นรูปธรรม มันอ่าน README เพื่อที่คุณจะได้ไม่ต้องพยายามรื้อฟื้นตัวตนในอดีตของคุณขึ้นมาใหม่ตั้งแต่ต้น
ตัวชี้วัดที่แท้จริงไม่ใช่จำนวน Repository ที่คุณชุบชีวิตขึ้นมาได้ แต่คือจำนวนที่คุณเลิกทำตัวรู้สึกผิดเกี่ยวกับมัน สุสานแห่งนี้มอบสถานที่พักผ่อนให้แก่พวกมันจนกว่าคุณจะพร้อม และเมื่อคุณพร้อม มันจะยื่นพลั่วให้คุณพร้อมกับคำสั่งเพียงอย่างเดียวคือ: เริ่มตรงนี้
เลิกปล่อยให้ไอเดียของคุณถูกฝังอยู่แบบนั้น
เยี่ยมชมสุสานได้ที่ https://pyaroslav.github.io/side-project-cemetery/ และอ่านเรื่องราวการสร้างฉบับเต็มบน Dev.to ได้ ที่นี่
