Anti-patterns

Avoid Premature Abstraction

Avoid Premature Abstraction

Career এর এক স্টেজ এ এসে আমরা অনেকেই অনেক নতুন নতুন টপিক এর সাথে পরিচিত হয়। যেমনঃ Queue, Stack, Design Patterns, Different Technologies like (K8S, Kafka, Rabbit MQ etc.), SOLID, DRY, KISS etc সব যে আমরা ব্যাবহার করি ডেইলি লাইফে এমন টা নয় তবে এইগুলোতে হাত পাকানোর একটা আগ্রহ কাজ করতে থাকে। আর এখান থেকেই একটা গর্তে পরে যাওয়ার সমূহ সম্ভাবনা তৈরি হয় সেটা হচ্ছে Premature Abstraction.

একটা এক্সামপল দিয়ে শুরু করি।

Let’s say, আপনি একটা ইভেন্ট বুকিং সিস্টেম এ কাজ করছেন। আপনার কাছে একটা requirement চলে আসলো, যদি কোন সিট বুক হয় user একটা confirmation মেইল পাবে। সিম্পল কাজ।

আপনি একটা সিম্পল ফাংশন লেখলেন যেটাকে কল করলে রেসিপিএন্ট এর কাছে মেইল যাবে। simple as that right?

কিন্তু না আপনি assume করা শুরু করলেন,

  • ইমেইল সেন্ডিং যদি slow হয়ে যায়? Lets add Queue with Producer Consumer pattern.

  • এই সিস্টেম টা আর রবাস্ট করার জন্য Event Driven আর্কিটেকচার দিয়ে ইমপ্লিমেন্ট করা উচিত। Let’s add RabbitMQ

  • সামনে হয় তো একাধিক ইমেইল প্রভাইডার আসতে পারে বা পরে হয় তো আমরা Push Notification-ও পাঠাবো আমার উচিত একটা Abstraction Layer তৈরি করা যেখান থেকে ইমেইল ও সেন্ড করা যাবে আবার Push Notification Trigger করা যাবে। কোড ডুপ্লিকেসন ছাড়া।

এতো কিছু করা হল without sending an email. এতে কি কি সমস্যায় পরলেন?

  • সম্পূর্ণ implementation একটা Overengineering হয়ে গেল। এই কোড মেইনটেইন করা এখন আগের থেকে বেশই কমপ্লেক্স হয়ে গেছে। কিন্তু Noticeable কোন বেনিফিট আমরা পাই নি।

  • শুধু মাত্র DRY Pricipal কে ঠিক রাখার জন্য এমন একটি Artificial Abstraction Layer তৈরি করলেন যারা আসলে একই ডোমেইন এর না। দুইটা আলাদা জিনিস। পরবর্তীতে Refactor করা আরো মুশকিল হয়ে যাবে।

  • প্রয়োজনের আগেই Abstraction, কোড কে কমপ্লেক্স করবে এবং readibility কমায় দিবে।

Code duplication is far cheaper than a wrong abstraction

- Sandi Metz Rails Conf 2014

আমার পিরসাব এর একটা কোট আছে,

“আমার নাতির পুতি কোন স্কুলে পরবে সেটা নিয়ে এখন মাথা ঘামানো দরকার নেই"

আমাদের মধ্যে একটা insecurity কাজ করে আমাদের software কে Future Proof বানানোর জন্য এটাই মূলত Premature Abstraction অথবা Premature Optimization এর জন্ম দেয়।

Premature abstraction is solving a general problem before you really have the general problem.

Solve the problem we have, not what we think we will have.

Posted on:  

Last Updated: 12 hours ago

Share this post

Other Blog
Related Posts

No related posts available.

📬 Let's keep in touch

Join our mailing list for the latest updates

Resend verification link

Something went wrong!
Please try again.

Please enter your name.

Please enter a valid email address.