Slack-এ পুরোনো সিদ্ধান্ত কীভাবে খুঁজবে (যখন Search যথেষ্ট না)
Keyword search ব্যর্থ হলে Slack-এ পুরোনো সিদ্ধান্ত কীভাবে খুঁজবে। কেন সিদ্ধান্ত হারিয়ে যায়, কেন decision log টেকে না, আর decision-aware system দেখতে কেমন।
By Ellis Keane · 2026-03-14
দ্রুত বলো: polling-এর বদলে webhooks ব্যবহার করার সিদ্ধান্ত তোমাদের টিম কোথায় নিয়েছিল? কী সিদ্ধান্ত নিয়েছিলে সেটা না – কোথায় সেটা এখন লেখা আছে, এমন জায়গায় যেখানে আগামী মাসে যোগ দেওয়া কেউ খুঁজে পাবে?
তুমি যদি আমাদের মতো হও, honest উত্তরটা হবে "সম্ভবত একটা Slack thread-এ" আর "মনে হয় #eng-backend-এ ছিল, হয়তো তিন সপ্তাহ আগে, আর দুই-তিনজন ছিল কিন্তু ঠিক কারা মনে নেই।" ভাবলে ব্যাপারটা অদ্ভুত – সিদ্ধান্তটা পুরো system কীভাবে কাজ করবে সেটা বদলানোর মতো গুরুত্বপূর্ণ ছিল, কিন্তু এতটাও গুরুত্বপূর্ণ ছিল না যে কেউ timestamp দিয়ে সাজানো stream of consciousness-এর বাইরে কোথাও লিখে রাখবে। Slack-এ পুরোনো সিদ্ধান্ত খুঁজতে গেলে সমস্যাটা আসলে এটুকুই – তথ্য সব আছে, কিন্তু decision হিসেবে retrieve করার মতোভাবে organised না।
আমি কিছুদিন ধরে Slack-এ পুরোনো সিদ্ধান্ত খোঁজার বিষয়টা নিয়ে গভীরে দেখছি, আর যত দেখেছি ততই মনে হয়েছে core issue discipline, habit, বা মানুষ যে কারণে blame করে সেসব না। এটা architectural। Slack search message খুঁজে পাওয়ার জন্য বানানো, আর decision message না – decision হলো meaning, যা message-এর মাধ্যমে প্রকাশ পায়। পার্থক্যটা pedantic শোনায়, যতক্ষণ না তুমি search result scroll করতে করতে বিশ মিনিট পর বুঝতে চেষ্টা করছো "webhooks" শব্দের সতেরোটা mention-এর মধ্যে কোনটায় তোমাদের টিম আসলে commit করেছিল।
Slack search আসলে কীভাবে কাজ করে (আর কোথায় ভাঙে)
এখানে precise হওয়া দরকার, কারণ "Slack search খারাপ" সঠিক diagnosis না – Slack search আসলে তার কাজের জন্য বেশ ভালো। সমস্যা হলো এটা যা করে, আর তুমি decision খুঁজতে গিয়ে যা করতে চাও – এই দুটো fundamentally আলাদা।
Slack message-কে text হিসেবে index করে metadata সহ: timestamp, sender, channel, আর (paid plan হলে) full thread context। তুমি "webhook" search করলে Slack faithfully সেই শব্দ থাকা সব message ফেরত দেয়, recency আর relevance-এর mix দিয়ে rank করে। Search operator দিয়ে narrow করতে পারো – in:#eng-backend from:@sarah before:2026-02-15 – কিন্তু তাতেও তুমি metadata দিয়ে একই flat message list filter করছো। এটা keyword retrieval, আর তুমি অল্প-স্বল্প মনে থাকা নির্দিষ্ট message খুঁজলে এটা কাজ করে।
কিন্তু decision keyword না। Decision হলো একটা question, কিছু option, কিছু মানুষ, আর একটা মুহূর্তের সম্পর্ক – যেখানে দল একটা option-এ converge করে। Decision-এর actual text হতে পারে "yeah let's just do webhooks, the polling approach is eating our rate limit" – কথোপকথনধর্মী, context-heavy, আর thread না জানলে অর্থহীন। আবার হতে পারে "that works, let me prototype it" – যেখানে technical decision-এর keyword-ই নেই।
এটাই architectural mismatch: Slack message সময়ক্রমে রাখে, keyword দিয়ে retrieve করে। Decision semantic (meaning নিয়ে) আর relational (task, মানুষ, outcome-এর সাথে সংযুক্ত)। তুমি chronological storage system-কে semantic retrieval করাতে চাইছো, আর সেটা পারছে না কারণ এটা ওই কাজের জন্য বানানো না। "Searchable" আর "findable"-এর gap বিশাল – Slack history-র সব message technically searchable, কিন্তু তার মানে এই না যে দরকারি decision practically findable।
"Slack organisational decision-making-এর ইতিহাসে অন্যতম বড় repository বানিয়েছে, কিন্তু decision হিসেবে retrieve করা যায় এমন content প্রায় নেই – প্রতিটা শব্দ নিখুঁতভাবে সংরক্ষিত, তবু প্রায় পুরোপুরি অখুঁজে পাওয়া।" – Ellis Keane
Slack-এ পুরোনো সিদ্ধান্ত খুঁজতে গেলে কী হয়
বাস্তবে mismatch-টা কেমন দেখায়। ধরো তিন সপ্তাহ আগে তোমাদের টিম GitHub ইন্টিগ্রেশনের জন্য polling থেকে webhooks-এ switch করেছে। তুমি মনে করতে পারছো আলোচনা #eng-backend-এ হয়েছিল, কয়েকজন engineer ছিল। তাই channel-এ "webhook" search করলে।
যা আসে: #eng-backend-এ কখনো webhooks mention হয়েছে এমন সব message। ছয় মাস আগের bug report। সম্পূর্ণ আলাদা context-এ webhook retry logic নিয়ে কারও প্রশ্ন। Webhook best practices নিয়ে কেউ share করা blog post-এর link (সুন্দর irony – এটা search result-এ actual decision-এর চেয়ে ওপরে rank করে)। Decision নিজে – একটা thread reply যেখানে কেউ বলেছিল polling approach rate limit খাচ্ছে – page three-র কোথাও চাপা, আশেপাশের message-এর মতোই দেখতে।
আর এটা সেই scenario যেখানে তুমি ব্যবহৃত শব্দ কিছুটা মনে রেখেছো। অর্ধেক সময় decision-এর ভাষা এতটাই contextual যে encrypted বললেও চলে। "Let's go with option B"-তে "webhook" শব্দ নেই, যদিও option B-ই ছিল webhooks। "That works, let me prototype it"-এ "option" শব্দটাও নেই। Decision-এর actual মুহূর্ত প্রায়ই পুরো thread-এর সবচেয়ে ছোট, সবচেয়ে কম keyword-rich message – কারণ তখন সবাই context জানে, শুধু alignment confirm করছে।
Information architecture problem হিসেবে এটা genuinely fascinating (আর তুমি যখন নিজে search করছো তখন হালকা ক্ষোভও)। Slack organisational decision-making-এর বিশাল repository বানিয়েছে, কিন্তু decision হিসেবে retrieve করা যায় এমনটা প্রায় নেই – শব্দগুলো নিখুঁতভাবে আছে, decision হিসেবে প্রায় অদৃশ্য।
কেন decision log আসলে ভালো signboard সহ graveyard
সমাধান খুঁজতে গেলে standard advice হলো decision log রাখো। Notion database, dedicated Slack channel (irony কারও চোখে পড়ে না মনে হয়), wiki page – এমন একটা জায়গা যেখানে decision হলে সঙ্গে সঙ্গে record করা হবে।
আমরা চেষ্টা করেছি। ছয় সপ্তাহ টিকেছিল। প্রথম দুই সপ্তাহ দারুণ – সবাই committed, entry detailed, log genuinely useful। তৃতীয় সপ্তাহে entry patchy হতে শুরু করে। পঞ্চম সপ্তাহে একজন এখনো update দিচ্ছে, লিখছে "decided thing about auth" – link নেই, context নেই, কারা involved বা alternative কী ছিল তার উল্লেখ নেই। ছয় সপ্তাহে আমরা চুপচাপ ভান করা বন্ধ করি।
সমস্যা এটা না যে টিমে discipline নেই (থাকতেও পারে, কিন্তু সেটা relevant issue না)। সমস্যা হলো decision logging ঠিক ভুল মুহূর্তে tax বসায়। Productive discussion হলো, alignment হলো, কেউ build শুরু করতে ready – আর এখন pause নিয়ে অন্য tool খুলে summary লিখতে হবে, relevant মানুষকে tag করতে হবে, original conversation link দিতে হবে। প্রতি decision-এ তিন থেকে পাঁচ মিনিট, আর দিনে পাঁচ থেকে দশটা meaningful decision নিলে overhead এমন জায়গায় compound করে যেটার owner কেউ হতে চায় না।
আর system শুধু ১০০% compliance-এ কাজ করে। ৭০% decision থাকা log অনেকভাবে no log-এর চেয়ে খারাপ, কারণ এখন দুই জায়গা check করতে হয় আর কোনোটাই বিশ্বাস করা যায় না। Log-এ দেখলে decision নেই, তারপর Slack search-এ ফিরতে হয় – আর তুমি আবার শুরুতে, শুধু অতিরিক্ত দুই মিনিট নষ্ট করে।
Decision event না – gradient
Manual logging fail করার একটা কারণ, এটা ধরে নেয় decision discrete, চেনা যায় এমন moment। বাস্তবে বেশিরভাগ decision conversation দিয়ে ধীরে ধীরে emerge করে, আর "moment of decision" প্রায়ই genuinely ambiguous।
Typical engineering decision unfold হওয়া ভাবো। Figma comment-এ কেউ concern তোলে: "this interaction pattern might not work on mobile." একজন engineer Slack thread-এ reply দেয়, original comment tag করে: "yeah, I looked into this – the component library doesn't support it." Designer একই thread-এ alternative approach suggest করে। Engineer বলে "that works, let me prototype it." দুই দিন পর alternative implement করা PR ওঠে, Linear issue update হয়।
Decision কোথায় হলো? Problem surface করা Figma comment-এ? Alternative propose করা Slack thread-এ? "That works" বলার মুহূর্তে? Implementation করা PR-এ? বাস্তবে decision চারটা মুহূর্ত জুড়ে ছড়ানো ছিল, দুটো tool আর তিন দিনে। এটা log করার মতো event না – এটা outcome-এ resolve হওয়া gradient, আর decision হয়েছে সেটা বুঝি কারণ code বদলেছে।
আমার মনে হয় "decision tracking" advice-এর বড় ভুল এখানে। এটা decision-কে phone number-এর মতো দেখে – capture করার জিনিস। কিন্তু বাস্তব decision বেশিরভাগই reconstruct করার জিনিস – কী বদলেছে দেখো, কোন conversation থেকে এসেছে trace back করো, তারপর reasoning piece together করো। তাই দরকারি system log না। Graph।
Graph যা দেয়, log যা দেয় না
Graph tool আর time জুড়ে সিগন্যাল connect করে। কেউ হাতে লিখছে না "rate limit-এর জন্য webhooks নিলাম" – graph link করছে rate limit নিয়ে আলোচনা হওয়া Slack thread, ইন্টিগ্রেশন track করা Linear issue, webhooks implement করা PR, আর conversation-এ থাকা মানুষদের। Decision record করা নেই – আগে থেকে হওয়া কাজের connection থেকে reconstructable। This is a single view of what the team is doing that actually deserves the name, enabled by building a searchable graph of decisions and tasks across tools rather than maintaining a separate log.
Practical difference পরিষ্কার হয় নির্দিষ্ট scenario-তে। Webhook decision-এর তিন সপ্তাহ পর নতুন engineer যোগ দিয়ে জিজ্ঞেস করল: "GitHub-এর জন্য polling না, webhooks কেন? Polling simpler তো।" Connected system না থাকলে কেউ বলবে "ও, অনেক আগে decide করেছি," channel কেউ মনে করতে পারবে না, কেউ পনেরো মিনিট Slack search করবে, তারপর হয়তো পাবে, নয়তো memory থেকে reconstruct করবে – risky, কারণ memory unreliable আর original reasoning তিন সপ্তাহ পর মনে থাকা version-এর চেয়ে বেশি nuanced।
Graph থাকলে engineer GitHub integration task দেখবে। Task touch করা প্রতিটা সিগন্যাল linked: rate limit-এর original discussion, polling vs webhooks evaluate করা thread, change implement করা PR। End-to-end full decision trail – কোনো search ছাড়া, কোনো logging ছাড়া।
Gap-টা "good search" বনাম "bad search" না – keyword দিয়ে retrieval বনাম relationship দিয়ে retrieval। Decision-এর সংজ্ঞা আসে task, মানুষ, আর outcome-এর সাথে তার connection থেকে – প্রকাশের শব্দ থেকে না।
যে খরচ কোনো dashboard-এ দেখা যায় না
এই ধরনের soft cost নিয়ে exact সংখ্যা দেওয়া claim আমি honestly সন্দেহের চোখে দেখি ("teams সপ্তাহে X ঘণ্টা নষ্ট করে" genre-এর statistics প্রায়ই desired conclusion থেকে reverse-engineer করা), কিন্তু আমাদের টিমে যা দেখেছি তা বলি।
সবচেয়ে obvious cost হলো re-litigation – original decision না পেলে টিম আবার discussion খুলে ফেলে, কখনো সত্যিই কেউ মনে রাখতে পারেনি বলে, কখনো নতুন সদস্যের legitimate প্রশ্ন আছে যার specific উত্তর কারও কাছে নেই। Source-এ decision trace করার উপায় পাওয়ার আগে আমরা settle হওয়া প্রশ্ন নিয়মিত re-litigate করতাম, আর প্রতিটা re-litigation-এর overhead আছে: meeting time, আবার পুরোনো তর্কে ঢোকার emotional fatigue, আর এই সন্দেহ যে original reasoning মনে থাকা version-এর চেয়ে nuanced ছিল।
Subtler cost onboarding-এ দেখা যায়। নতুন সদস্যের প্রতিটা "এটা এভাবে কেন?" প্রশ্ন original decision-এ থাকা কাউকে interrupt করে, আর উত্তরটা memory থেকে reconstruct হয় প্রতিবার, প্রতি retelling-এ reasoning একটু drift করে – telephone game, শুধু phone enterprise software আর message "architecture এভাবে কেন কাজ করে।" সময়ের সাথে credibility gap-ও compound করে: "we went with webhooks"-এর ওজন কম, "we went with webhooks because polling was eating 40% of our GitHub API rate limit and we were hitting throttling during peak hours"-এর ওজন বেশি। ভবিষ্যতের engineer decision changed circumstance-এ টিকবে কিনা evaluate করতে reasoning-টাই দরকার, আর সেই reasoning Slack thread-এ কোথাও আছে – perfectly preserved, practically invisible।
Slack scroll-এ সিদ্ধান্ত হারানো বন্ধ করো। Sugarbug full decision trail trace করে – Slack thread থেকে Linear issue, তারপর PR পর্যন্ত – automatically।
Q: Slack-এ পুরোনো সিদ্ধান্ত খুঁজে পাওয়া এত কঠিন কেন? A: Slack message সময়ক্রম অনুযায়ী রাখে, অর্থ অনুযায়ী না। Thread-এ চাপা থাকা decision দেখতে অন্য reply-এর মতোই – Slack search keyword match করতে পারে, কিন্তু পুরো conversational context না পড়ে "we decided to use Redis" আর "should we use Redis?" আলাদা করতে পারে না। সময় যত যায়, কাজটা তত কঠিন হয়, কারণ search viable করার contextual cue (কারা ছিল, কোন channel, কোন সপ্তাহ) হারিয়ে যায়।
Q: Sugarbug কি Slack-এ নেওয়া সিদ্ধান্ত স্বয়ংক্রিয়ভাবে track করে? A: হ্যাঁ। Sugarbug Slack আর অন্য connected tool থেকে আসা সিগন্যাল classify করে, decision-like pattern শনাক্ত করে – এমন thread যা task reference করে, assigned মানুষ জড়িত, আর status change বা PR-এ গিয়ে শেষ হয়। এগুলো relevant task-এর সাথে নলেজ গ্রাফে link হয়, তাই Slack history search না করে task থেকে decision trail trace করতে পারো।
Q: Decision log আর সিদ্ধান্তের জন্য নলেজ গ্রাফ-এর পার্থক্য কী? A: Decision log-এ প্রতিটা decision ঘটার সময় কাউকে হাতে record করতে হয় – ধরতে হয়, থামতে হয়, summarise করতে হয়, tag করতে হয়, link দিতে হয়। নলেজ গ্রাফ tool-এ চলমান সিগন্যাল থেকে decision infer করে আর task, মানুষ, conversation-এর সাথে automatically link করে। একটাতে টিমের সবার ধারাবাহিক discipline লাগে; অন্যটা চলমান activity থেকেই background-এ চলে।
Q: Sugarbug কি Slack ছাড়া অন্য tool থেকেও সিদ্ধান্ত surface করতে পারে? A: Sugarbug Slack, GitHub, Figma, Linear, Notion, email, আর calendar-এর সাথে connect করে। Decision অনেক সময় multi-tool (Figma comment থেকে Slack thread, তারপর PR), আর নলেজ গ্রাফ সব connected surface জুড়ে সিগন্যাল link করে। Conversation কোন tool-এ শুরু হয়েছিল সেটা না দেখেই full trail দেখতে পাও।
Q: এটা Slack-এর built-in search থেকে আলাদা কীভাবে? A: Slack search নির্দিষ্ট keyword থাকা message খুঁজে দেয়। নলেজ গ্রাফ message, task, আর মানুষের relationship খুঁজে দেয়। Decision খুঁজতে গেলে তুমি খুব কমই শব্দ খুঁজছো – খুঁজছো সেই মুহূর্ত যখন টিম এক approach ছেড়ে আরেকটায় গেছে, আর সেই মুহূর্তের অর্থ আসে অন্য সিগন্যালের সাথে তার connection থেকে, শব্দ থেকে না।
---
সিদ্ধান্ত যদি বারবার Slack history-তে হারিয়ে যায়, সমস্যা Slack না – সমস্যা হলো এমন কোনো system নেই যেটা গুরুত্বপূর্ণ মুহূর্তগুলো দেখে সেগুলোকে প্রভাবিত করা কাজের সাথে connect করে। Sugarbug দিয়ে আমরা ঠিক এই gap-টাই পূরণ করছি।