ByteHeavy
ByteHeavy
কোনো ভারী প্যাকেজ নয় — শুধু যা আমরা সত্যিই ভালো পারি।
আমরা ওয়েবসাইট ও ওয়েব অ্যাপ্লিকেশন প্রথম থেকে শেষ পর্যন্ত ডিজাইন ও তৈরি করি — প্রথম ওয়্যারফ্রেম থেকে শুরু করে এমন একটি প্রোডাকশন ডিপ্লয়মেন্ট পর্যন্ত যা অনলাইনে থাকে। এর মানে হলো এমন একটি ফ্রন্টএন্ড যা দুর্বল কানেকশনেও মিড-রেঞ্জ ফোনে দ্রুত লোড হয়, এমন একটি ব্যাকএন্ড যা ট্রাফিক বাড়লেও ভেঙে পড়ে না, এবং এমন একটি কোডবেস যা পরবর্তী ডেভেলপার — বা ছয় মাস পরে আপনি নিজেই — সত্যিই বুঝতে পারবেন। আমরা সাধারণত Next.js এবং TypeScript ব্যবহার করি, তবে স্ট্যাক সবসময় প্রজেক্টের বাস্তব সীমাবদ্ধতা অনুযায়ী ঠিক হয়, আমাদের স্বাচ্ছন্দ্য অনুযায়ী নয়। প্রতিটি ডিপ্লয়মেন্টে এমন অপারেশনাল কাজ অন্তর্ভুক্ত থাকে যা বেশিরভাগ এজেন্সি ঐচ্ছিক মনে করে: মনিটরিং, ব্যাকআপ, ডকুমেন্টেড রিকভারি প্রসিডিউর, এবং প্রথম রিলিজ থেকেই সঠিকভাবে কনফিগার করা সিকিউরিটি হেডার — কোনো ঘটনার পর যোগ করা নয়। লক্ষ্য এমন একটি সাইট যা চেক-ইনের মাঝে নিজে থেকেই চলতে থাকে, আমাদের সার্বক্ষণিক প্রস্তুত থাকার দরকার হয় না এমন একটি নয়।
export async function createOrder(input: OrderInput) {
const scope = await agreeScope(input);
return db.orders.create({ data: scope });
}'এটা স্লো' বা 'প্রোডাকশনে ভেঙে গেছে' — এই ধরনের বেশিরভাগ সফটওয়্যার সমস্যা আসলে ব্যাকএন্ড আর্কিটেকচারের সমস্যা। আমরা স্পষ্ট কনট্র্যাক্ট, যুক্তিসঙ্গত এরর হ্যান্ডলিং এবং লঞ্চের আগেই পরীক্ষিত লোড বৈশিষ্ট্য নিয়ে API ও ব্যাকএন্ড সিস্টেম ডিজাইন করি — লঞ্চের পরে আবিষ্কার করে নয়। মোবাইল ক্লায়েন্টের জন্য REST API হোক, SaaS ইন্টিগ্রেশনের জন্য ওয়েবহুক প্রসেসর হোক, বা Discord বটের ইকোনমি সিস্টেম চালানো ব্যাকএন্ড হোক — আমরা সেটা সবচেয়ে ভালো অর্থে 'সাদামাটা' করে বানাই: অনুমানযোগ্য, ডকুমেন্টেড এবং ভাঙা কঠিন। রেট লিমিটিং, ইনপুট ভ্যালিডেশন এবং অথরাইজেশন চেক শুরু থেকেই ডিজাইনের অংশ, প্রথম ইনসিডেন্ট রিপোর্টের পর যোগ করা টিকিট নয়।
func main() {
srv := api.New(cfg)
log.Fatal(srv.ListenAndServe())
}কয়েকটা স্ল্যাশ কমান্ড চালানো Discord বট সহজ। কিন্তু এমন একটি বট যা লাইভ ইন-সার্ভার ইকোনমি পরিচালনা করে, প্রতিদিন হাজার হাজার মেসেজ মডারেট করে এবং Discord-এর নিজের আউটেজের মধ্যেও অনলাইনে থাকে — সেটা আসলে চ্যাট ইন্টারফেসের ছদ্মবেশে একটি প্রকৃত ব্যাকএন্ড ইঞ্জিনিয়ারিং কাজ। আমরা দুটোই বানাই — একটি সাধারণ ইউটিলিটি বট থেকে শুরু করে নিজস্ব অ্যাডমিন ড্যাশবোর্ড, ডেটাবেস এবং অটোমেশন রুলসহ সম্পূর্ণ ফিচারযুক্ত সার্ভার ম্যানেজমেন্ট সিস্টেম পর্যন্ত — আপনার কমিউনিটির প্রকৃত প্রয়োজন অনুযায়ী, পিচে চমকপ্রদ দেখানোর জন্য নয়। প্রতিটি বট Discord-এর রেট লিমিট ও API পরিবর্তন মাথায় রেখে তৈরি, যাতে প্ল্যাটফর্ম আপডেটের সময়ও এটি কাজ চালিয়ে যায়, পরের বার Discord কিছু আপডেট করলে নীরবে ভেঙে না পড়ে।
bot.on("interactionCreate", async (i) => {
if (i.commandName === "ticket") await openTicket(i);
});Minecraft সার্ভার ডেভেলপমেন্ট এমন একটি বিশেষত্ব যা বেশিরভাগ 'আমরা ওয়েবসাইটও বানাই' এজেন্সি ভান করে চালিয়ে দেয়। আমরা করি না। আমরা কাস্টম গেমমোড, প্লাগইন স্যুট এবং সার্ভার-সাইড সিস্টেম লিখি ঠিক অন্য যেকোনো ব্যাকএন্ডের মতোই ইঞ্জিনিয়ারিং শৃঙ্খলা মেনে: টিক-রেটে প্রভাবের জন্য প্রোফাইল করা, বাস্তব প্লেয়ার লোডে পরীক্ষিত, এবং প্লেয়ার ডেটা নষ্ট না করে সার্ভার রিস্টার্ট সহ্য করার মতো করে তৈরি। যদি কোনো প্লাগইন কখনো নীরবে আপনার ইকোনমি ডেটাবেস খেয়ে ফেলে থাকে, তাহলে আপনি ইতিমধ্যেই জানেন কেন এই শৃঙ্খলা গুরুত্বপূর্ণ। আমরা লাইভ সার্ভার কমিউনিটি চালানোর বাস্তবতাও বিবেচনা করি — স্টাফ টুলিং, অ্যান্টি-চিট ইন্টারঅ্যাকশন, এবং প্লাগইন আপডেট প্রত্যাশামতো কাজ না করলে নিরাপদ রোলব্যাক পথ।
@EventHandler
public void onJoin(PlayerJoinEvent e) {
economy.ensureAccount(e.getPlayer());
}প্রতিটি সমস্যা 'ওয়েবসাইট' বা 'বট'-এর মধ্যে গুছিয়ে বসে না। কখনো কখনো একটি ব্যবসার সত্যিকারের প্রয়োজন হয় এমন একটি অভ্যন্তরীণ টুল যা প্রতিদিন তিন ঘণ্টার ম্যানুয়াল স্প্রেডশিট কাজ স্বয়ংক্রিয় করে দেয়, এমন একটি স্ক্রিপ্ট যা পাঁচটি ভিন্ন API-এর সাথে কথা বলে ও ফলাফল মিলিয়ে নেয়, বা এমন একটি ছোট ডেস্কটপ অ্যাপ যা এমন একটি ওয়ার্কফ্লোর জন্য যার জন্য আগে কেউ সফটওয়্যার বানায়নি। এখানেই আমাদের অনেক সবচেয়ে আকর্ষণীয় কাজ ঘটে — এমন প্রজেক্ট যা অফ-দ্য-শেল্ফ SaaS টুলের পক্ষে সমাধান করা অসম্ভব রকমের নির্দিষ্ট। এই প্রজেক্টগুলোও অন্য যেকোনো প্রজেক্টের মতোই স্কোপ করা হয়: টুলটি কী করবে, কে এটি ব্যবহার করবে, এবং হস্তান্তরের পর এটি কীভাবে রক্ষণাবেক্ষণ করা হবে তার একটি লিখিত সংজ্ঞা।
def main() -> None:
job = load_job(config)
run_pipeline(job)