เครื่องมือสองตัวที่รู้คนละครึ่งของเรื่องเดียวกัน
Jira รู้ว่ามีงานอะไรค้างอยู่ · ปฏิทินรู้ว่าเวลาว่างตรงไหน · ไม่มีตัวไหนรู้ทั้งสองอย่าง คนเลยต้องเป็นสะพานเองทุกเช้า
ทุกเช้าเปิด Jira ไล่อ่านว่ามีงานอะไร ตัดสินใจในหัวว่าวันนี้จะทำอันไหน แล้วพิมพ์ชื่องานเดิมซ้ำอีกรอบลงปฏิทิน — งานคิดใช้เวลาสองนาที งานพิมพ์ซ้ำใช้เวลานานกว่า และตอนเย็นก็จำไม่ได้อยู่ดีว่าวันนี้แตะอะไรไปบ้าง
ต้องพิมพ์ชื่องานเดิมซ้ำสองที่
ข้อมูลชุดเดียวกันถูกกรอกสองรอบ รอบแรกอ่านจาก Jira รอบสองพิมพ์ลงปฏิทิน ทุกครั้งที่พิมพ์ซ้ำคือโอกาสพิมพ์ผิด และเป็นงานที่ไม่ได้สร้างอะไรใหม่เลย
ลงงานทับช่วงที่มีประชุมอยู่แล้ว
ตอนจัดตารางในหัว มองไม่เห็นว่าบ่ายนี้มีประชุมจองไว้ กว่าจะรู้ก็ตอนปฏิทินเด้งชนกัน แล้วต้องมานั่งเลื่อนใหม่ทั้งวัน
ตอนเย็นเขียน standup ไม่ออก
จำไม่ได้ว่าวันนี้ทำอะไรไปบ้าง ต้องไล่เปิด Jira ย้อนดูทีละใบ ซึ่งบอกได้แค่ว่าสถานะเปลี่ยนตอนไหน ไม่ได้บอกว่าจริง ๆ แล้วลงแรงไปกับอะไร
เครื่องมือสำเร็จรูปต้องเอา token ของบริษัทไปฝากไว้
บริการเชื่อม Jira กับปฏิทินมีให้เลือกเยอะ แต่ทุกเจ้าขอ API token ของที่ทำงานไปเก็บไว้บนเซิร์ฟเวอร์ของเขา ซึ่งเป็นการตัดสินใจที่ไม่ควรทำคนเดียวเพื่อความสะดวกส่วนตัว
ตัดสินใจว่า “ที่เก็บ token” คือข้อจำกัดข้อแรก ไม่ใช่ฟีเจอร์
พอเอาข้อนี้ขึ้นมาเป็นเกณฑ์ตั้งต้น ทางเลือกก็เหลือน้อยลงมากและตัดสินใจง่ายขึ้น
| ทางเลือก | token อยู่ที่ไหน | ต้นทุน | เหตุที่ตก / รับ |
|---|---|---|---|
| บริการเชื่อมอัตโนมัติ | เซิร์ฟเวอร์ผู้ให้บริการ | รายเดือน | ต่อได้เร็วที่สุด แต่ต้องยก API token ของที่ทำงานให้บุคคลที่สามเก็บไว้ถาวร |
| ปลั๊กอินใน Jira | บนระบบของบริษัท | ต้องขออนุมัติ | ปลอดภัยเรื่อง token แต่เป็นการแก้เครื่องมือกลางของทีม เพื่อแก้ปัญหาส่วนตัวของคนคนเดียว |
| เว็บแอปที่ต้อง deploy | เซิร์ฟเวอร์ตัวเอง | ค่าโฮสต์ + ค่าดูแล | ได้อิสระเต็มที่ แต่ต้องดูแลเซิร์ฟเวอร์กับ CI ตลอดไป เพื่อเครื่องมือที่เปิดวันละครั้ง |
| ไฟล์เดียวบนเครื่อง เลือก | ในเครื่องตัวเอง | ไม่มี | ดับเบิลคลิกแล้วรัน ไม่มี deploy ไม่มีบัญชี ไม่มีอะไรออกจากเครื่อง และแก้โค้ดได้ทันทีระหว่างใช้งาน |
ทั้งโปรเจกต์เลยมี ไฟล์ที่ต้องรันแค่ไฟล์เดียว — bash ข้างในมี Python http.server ฝังอยู่ และมี HTML ทั้งแอปฝังอยู่ในนั้นอีกที ไม่มี build step ไม่มี framework ไม่มี node_modules ไฟล์ความลับทั้งสามตัวถูก gitignore ไว้ตั้งแต่ commit แรก
สถาปัตยกรรมทั้งหมดอยู่ในไฟล์ที่ดับเบิลคลิกได้
ไฟล์ .command ทำให้ Finder รันมันได้เหมือนแอป โดยที่ข้างในยังเป็นเชลล์สคริปต์ที่อ่านออกและแก้ได้
ตอนเพิ่มอีเมลเช้าเข้ามา ไม่ได้เอา scope ของ Gmail ไปยัดรวมกับ token ของปฏิทินที่มีอยู่ แต่แยกเป็น token คนละใบ — ถอนสิทธิ์อ่านเมลได้โดยไม่กระทบการลงปฏิทิน และถ้าใบไหนหลุด ความเสียหายจำกัดอยู่แค่ขอบเขตของใบนั้น
วิธีทำงานตอนเช้า — 5 จังหวะ
จากเปิดเครื่องถึงตารางวันนี้ที่อยู่ในปฏิทินแล้ว
ดึงงานของเรามาแสดง
เรียก Jira ด้วย token ในเครื่อง จัดกลุ่มตาม Epic ย่อ-ขยายได้ พร้อมบอกจำนวนงานย่อยในแต่ละกลุ่ม
ติ๊กงานที่จะทำวันนี้
เลือกจากรายการจริง ไม่ต้องพิมพ์ชื่องานซ้ำ ระบบจำโปรเจกต์ที่เลือกล่าสุดไว้ให้ รอบหน้าเปิดมาอยู่ที่เดิม
ตั้งเวลาโดยเห็นของที่จองไว้แล้ว
ช่วงเวลาที่ปฏิทินมีนัดอยู่แล้วจะถูกกันไว้ตั้งแต่ตอนเลือก ไม่ใช่ไปรู้ตอนลงทับไปแล้ว
ลงปฏิทินทีเดียวทั้งชุด
สร้าง event ครบทุกงานที่ติ๊ก แล้วติดป้าย “ลงปฏิทินแล้ว” พร้อมเวลาไว้บนการ์ด กันลงซ้ำรอบสอง
ตอนเย็นกดสร้างร่าง standup
อ่านจาก day-log ของวันนั้น แล้วร่างให้เป็นข้อความพร้อมส่ง ย้อนวันได้ด้วยการระบุวันที่
ห้าเรื่องที่แก้เพราะใช้เองทุกวันแล้วทน ไม่ ไหว
ทุกข้อมาจากการเป็นผู้ใช้คนเดียวของเครื่องมือตัวเอง ซึ่งทำให้เห็นปัญหาที่ผู้ใช้ทั่วไปไม่บ่นแต่เลิกใช้เงียบ ๆ
ร่าง standup ที่เดาจากสถานะใน Jira ออกมาผิดแทบทุกวัน
เวอร์ชันแรกประกอบร่างจาก issue ที่สถานะเปลี่ยนวันนั้น ปัญหาคือสถานะไม่ได้บอกว่าลงแรงไปกับอะไร — งานที่นั่งทำทั้งวันแต่ยังไม่เสร็จจะไม่โผล่เลย ส่วนงานที่แค่กดปิดตอนเช้ากลับขึ้นเป็นพระเอก
dropdown ของระบบสั่งหน้าตาไม่ได้ ทำให้ทั้งแอปดูไม่เหมือนกัน
ใช้ dropdown มาตรฐานของเบราว์เซอร์ แล้วเจอว่าคุมความสูง ฟอนต์ และสถานะที่เลือกอยู่ไม่ได้จริงบน macOS หน้าที่ใช้มันเลยดูหลุดจากหน้าที่เหลือทุกที
ตั้งฟอนต์ให้ทั้งหน้าแล้ว แต่ปุ่มกับช่องกรอกไม่เปลี่ยนตาม
ประกาศฟอนต์ไทยไว้ที่ body เรียบร้อย ตัวหนังสือทั้งหน้าถูกหมด ยกเว้นข้อความในปุ่มและ input ที่ยังเป็นฟอนต์ระบบ ทำให้ดูเหมือนแอปประกอบจากสองที่
font-family จากพ่อแม่ ตามค่าเริ่มต้นของเบราว์เซอร์ ต้องสั่ง font: inherit ให้มันตรง ๆ — เป็นบั๊กที่มองไม่เห็นถ้าไม่ได้เอาสองตัวมาวางข้างกันตั้งระยะเวลางานแล้วค่าไม่ถูกบันทึก
เลือกระยะเวลาไว้ พอกดลงปฏิทินกลับได้ค่าเริ่มต้นเสมอ ไล่หาที่ตัวจัดการ state อยู่นาน ทั้งที่ต้นเหตุอยู่ที่ตัว component เอง
วงกลมหมุนทำให้รู้สึกช้ากว่าที่มันช้าจริง
ตอนโหลดงานจาก Jira ขึ้นวงกลมหมุนกลางจอ ระหว่างนั้นหน้าจอว่างเปล่า ทำให้ทุกวินาทีรู้สึกนานกว่าความจริง และไม่รู้ว่ากำลังจะได้อะไรกลับมา
25 commit จาก “ลงปฏิทิน” กลายเป็นที่ทำงานประจำวัน
ไม่ได้วางแผนไว้ตั้งแต่ต้น แต่ละอย่างถูกเพิ่มตอนที่เจอปัญหาจริงระหว่างใช้
- โน้ตแบบ Notion — 13 ชนิดบล็อก, เมนู slash, bullet ซ้อนชั้น, คอมเมนต์, คีย์ลัด และตารางที่พิมพ์ลงไปได้จริง
- ผู้ช่วย AI ข้างโน้ต — ลากคลุมข้อความแล้วกดแก้เฉพาะส่วนที่เลือก หรือเล่าเรื่องจากโน้ตว่างแล้วให้มันแตกเป็น task ให้
- อีเมลสรุปตอนเช้า — ดึงเมลจริงจาก Gmail มาย่อ และส่งฉบับย่อชุดเดียวกันเข้า Telegram ไม่ย่อซ้ำสองรอบให้ได้คนละความ
- เครื่องมือ PDF 5 ตัว — เขียนเพิ่มบนเอกสาร, ใส่เลขหน้าเลขไทย, แปลงเป็นรูป, ใส่ลายน้ำ, บีบอัดรูป
- ตัวแปลภาษา ในหน้าเดียวกัน ไม่ต้องสลับไปเปิดแท็บอื่นระหว่างเขียนงาน
- หน้าจัดการพอร์ต — เห็นว่าอะไรจับพอร์ตไหนอยู่ แยกเป็นแท็บตามกลุ่ม และปิดตัวที่ค้างได้จากหน้าเว็บ
ขอบเขตที่ตั้งใจไม่ทำ
เครื่องมือส่วนตัวมีข้อได้เปรียบอย่างเดียวคือรู้ว่าผู้ใช้เป็นใคร ถ้าเผลอออกแบบเผื่อคนอื่น ข้อได้เปรียบนั้นจะหายไปทันที
- ไม่มีระบบผู้ใช้หลายคน — ไม่มีล็อกอิน ไม่มีสิทธิ์ ไม่มีฐานข้อมูล เพราะมันรันบนเครื่องของคนที่ใช้มันอยู่แล้ว
- ไม่ deploy ขึ้นที่ไหน — ผูกกับ
localhostเท่านั้น การที่มันเข้าจากข้างนอกไม่ได้ คือฟีเจอร์ด้านความปลอดภัย ไม่ใช่ข้อจำกัด - ไม่ใช้ framework และไม่มี dependency ตอนรัน นอกจากไลบรารีของ Google ที่ลงครั้งเดียว — เครื่องมือที่พังเพราะ dependency อัปเดต คือเครื่องมือที่พังตอนเช้าวันที่ยุ่งที่สุด
- ไม่เขียนเทสต์ครอบทุกอย่าง — แต่เส้นทางที่แตะข้อมูลจริงอย่างการสร้าง event และร่าง standup ถูกลองด้วยมือทุกครั้งก่อน commit