সরাসরি পর্বে যান
পর্ব ৬২ · ৮১-এর মধ্যে · মডিউল ১০

Platform engineering — internal developer platform আর golden path

Platform Engineering — Internal Developer Platforms and Golden Paths

Taught in Bangla, this lesson shows how teams end up rebuilding the same pipelines, treats the platform as an internal product, maps internal developer platform layers, golden paths, templates, service catalogs and escape hatches, thin platforms, toil, onboarding and payback calculations, adoption measurement, build versus buy, and when a platform is unnecessary, with a simulator.

এই পর্বে যা শিখবেন

  • Platform engineering কোন সমস্যা মেটায়, আর কেন একে পণ্য হিসেবে দেখতে হয়
  • Internal developer platform-এর স্তর: portal, API, Terraform, Crossplane আর Kubernetes
  • Golden path, template, service catalog আর escape hatch কীভাবে একসাথে কাজ করে
  • Toil আর onboarding-এর হিসাব থেকে একটি platform দলের payback বের করা
  • Adoption ও সাফল্য মাপা, build বনাম buy, আর কখন platform দরকারই নেই

১ · সমস্যা: প্রতিটি দল একই pipeline আবার বানাচ্ছে

ঢাকার একটি কাল্পনিক সফটওয়্যার প্রতিষ্ঠান ধরি, নাম ক-সফট। শুরুতে ১০ জন প্রকৌশলী, একটি product, একটি pipeline. যিনি pipeline লিখেছেন, তিনি পাশের টেবিলেই বসেন। কিছু ভাঙলে নাম ধরে ডাকলেই চলে।

তিন বছর পর ক-সফটে ১০০ জন, ১৪টি দল, প্রায় ৯০টি service. এখন প্রতিটি দলকে নিজে থেকে জানতে হয় Dockerfile, pipeline, Kubernetes manifest, IAM role, secret, Terraform, dashboard আর alert. ছয়টি দল ছয় রকম pipeline লিখেছে। একটি দলে image scan আছে, অন্য দলে নেই। নতুন service খুলতে দুই সপ্তাহ লাগে। অথচ এর একটি কাজও গ্রাহকের চোখে পড়ে না।

একটি বিপণিবিতানের কথা ভাবুন। লোডশেডিংয়ে ৪০টি দোকানের প্রত্যেকে নিজের জেনারেটর চালায়। প্রত্যেকে ডিজেল কেনে, মিস্ত্রি ডাকে, শব্দ আর ধোঁয়া সামলায়। শাড়ির দোকানের মালিক শাড়ি বেচতে এসেছিলেন, জেনারেটর চালাতে নয়। বাজার কমিটি যদি একটি বড় জেনারেটর বসিয়ে প্রতিটি দোকানে লাইন আর মিটার দেয়, দোকানদার শুধু সুইচ চাপেন। এই কমিটিই platform দল, আর লাইনটি হলো platform.

এই চাপের নাম cognitive load, যা পর্ব ৭-এ দেখেছেন: একটি দলকে একসাথে কতটা জিনিস মাথায় রাখতে হয়। মনোবিজ্ঞানী John Sweller ১৯৮৮ সালে এই তত্ত্ব দাঁড় করান, আর Team Topologies (২০১৯) একে দলের নকশায় আনে। সহজ করে তিন ভাগ:

ধরনমানেক-সফটের উদাহরণকরণীয়
Intrinsicকাজের নিজের কঠিনত্বKubernetes-এর probe কীভাবে কাজ করেশেখা ও অনুশীলন
Extraneousবাড়তি, অপ্রয়োজনীয় ঝামেলাকোন ticket কোন দলে যাবে, কোন YAML কোথা থেকে কপি হবেকমানো বা সরিয়ে ফেলা
Germaneআসল ব্যবসার জ্ঞানডেলিভারির রুট কীভাবে ঠিক হয়এর জন্য জায়গা ফাঁকা করা

Platform-এর লক্ষ্য extraneous অংশটি কমানো, যাতে germane অংশে মাথা খাটানো যায়। আগের পর্বগুলোতে আপনি pipeline (পর্ব ৫৭), GitOps (পর্ব ৬০) আর DevSecOps (পর্ব ৬১) পড়েছেন। সব জিনিস একসাথে প্রতিটি দলের ঘাড়ে চাপালে তা-ই সমস্যা হয়ে দাঁড়ায়। এই পর্বের প্রশ্ন: এত ভালো চর্চা দলগুলোর মাথায় না চাপিয়ে তাদের হাতে পৌঁছাবে কীভাবে?

“You build it, you run it” ভুল নয়, তবে এর দাম আছে (পর্ব ৭)। Platform সেই মালিকানা কেড়ে নেয় না। Service-এর মালিক দলই থাকে। Platform শুধু মালিক হওয়ার পথ সহজ করে।

২ · Platform একটি পণ্য, আর গ্রাহক আপনার ডেভেলপাররা

Platform engineering মানে ডেভেলপারদের জন্য ভেতরের self-service সেবা পণ্যের মতো বানানো ও চালানো। Platform team সেই কাজটি করে। Evan Bottcher ২০১৮ সালে martinfowler.com-এ একটি বহুল উদ্ধৃত সংজ্ঞা দেন, যার সারকথা: platform হলো self-service API, tool, সেবা, জ্ঞান আর সহায়তার ভিত্তি, যা আকর্ষণীয় একটি ভেতরের পণ্য হিসেবে সাজানো।

সংজ্ঞার শেষ শব্দটিই আসল: পণ্য। Platform as a product মানে এই নয় যে আপনি এটি বিক্রি করবেন। মানে হলো, পণ্য বানাতে যা যা করতে হয়, এখানেও তাই করতে হবে:

গ্রাহক আছে

ডেভেলপাররা গ্রাহক। তাদের সাথে কথা বলা, কাজ পাশে বসে দেখা আর সবচেয়ে বড় কষ্টটি খোঁজা প্রথম কাজ।

User research

পরিকল্পনা আছে

কী বানাবেন, কী বানাবেন না, তা প্রকাশ্য roadmap-এ থাকে। সবচেয়ে উঁচু গলার অনুরোধ নয়, সবচেয়ে বড় সমস্যা আগে।

Roadmap

ভালো অভিজ্ঞতা আছে

পরিষ্কার documentation, বোধগম্য error আর সহায়তার চ্যানেল। Developer experience এখানে পণ্যের গুণমান।

DevEx

গ্রাহক চলে যেতে পারে

পণ্য খারাপ হলে দল নিজের পথ ধরবে, আর সেটি হবে আপনার জন্য সংকেত। পরিমাপ ছাড়া এই সংকেত চোখে পড়ে না।

Adoption

নামের গোলমাল পরিষ্কার করা দরকার। “Platform” শব্দটি অনেক অর্থে চলে, আর লেখকভেদে সীমারেখা আলাদা।

জিনিসএটি কীPlatform-এর সাথে সম্পর্ক
Cloud providerকাঁচা সেবার ভান্ডারPlatform-এর নিচের ভিত্তি
KubernetesContainer চালানোর ব্যবস্থাভিত্তি, পুরো platform নয়
PaaSবাইরের প্রস্তুত platformকেনা platform-এর একটি রূপ
Developer portalসামনের ওয়েবসাইটদরজা, ঘর নয়
Ops বা DevOps দলঅনুরোধ নিয়ে হাতে কাজ করেSelf-service না থাকলে নাম বদলালেও platform হয় না
SREReliability-র চর্চাপরিপূরক। পার্থক্য পর্ব ৭-এ আছে

এই চিন্তা একদিনে আসেনি। ২০০৭ সালের দিকে Heroku দেখায়, git push করলেই app চলতে পারে। Google-এর Borg-এর মতো ভেতরের ব্যবস্থা বড় প্রতিষ্ঠানে আগে থেকেই ছিল। ২০২০ সালের দিকে “platform engineering” শব্দটি আলাদা বিষয় হিসেবে ছড়িয়ে পড়ে। বাজারি হাওয়া থাকলেও পেছনের সমস্যাটি আসল।

৩ · Internal developer platform-এর ভেতরে কী থাকে

Internal developer platform (IDP) কোনো একটি software নয়। এটি কয়েকটি tool আর API-র একটি সাজানো ব্যবস্থা। চারটি ধারণা মনে রাখুন:

  • Self-service: মানুষকে অনুরোধ না করে নিজেই পাওয়া। ATM থেকে টাকা তোলার মতো, ব্যাংকের কাউন্টারে লাইন দেওয়ার মতো নয়।
  • Golden path: সবচেয়ে প্রচলিত কাজের জন্য আগে থেকে তৈরি, সমর্থিত পথ। Spotify “golden path” আর Netflix “paved road” শব্দ ব্যবহার করে বলে পরিচিত। মূল ভাব এক: নিরাপদ পথটিকেই সবচেয়ে সহজ পথ করা।
  • Software template: নতুন service-এর ছাঁচ। রান্নাঘরের রেসিপি খাতার মতো, যেখানে উপকরণের পরিমাণ শুধু বসিয়ে দিতে হয়।
  • Service catalog: সব service-এর তালিকা, মালিকের নাম আর নির্ভরতাসহ। রাত দুইটায় কোনো service ভাঙলে “এটি কার?” প্রশ্নের উত্তর এখানে।

নিচের ছবিতে স্তরগুলো দেখুন। ওপর থেকে নিচে নামলে নিয়ন্ত্রণ বাড়ে, কিন্তু জটিলতাও বাড়ে। ডেভেলপার ওপরের স্তরে থাকেন, আর জটিলতা নিচের স্তরে ঢাকা থাকে।

Developer থেকে cloud পর্যন্ত: platform-এর স্তর

Developers → portal → platform APIs → cloud and Kubernetes

ডেভেলপার, portal, platform API আর cloud ও Kubernetes-এর চারটি স্তর Stream-aligned দল (ডেভেলপার) অর্ডার দলডেলিভারি দলপেমেন্ট দল form বা command Developer portal · CLI CatalogTemplateDocs API call বা Git commit Platform API (Platform দল চালায়) Pipeline · GitOpsTerraform module CrossplanePolicy · guardrail provider API Cloud provider-এর ভিত্তি KubernetesManaged database Object storageIAM · network
ছবি ৬২.১ — ডেভেলপার একটি form পূরণ করেন, আর নিচের তিন স্তর সেই একটি অনুরোধকে বহু cloud কাজে ভাঙে।

Backstage: একটি পরিচিত portal

Backstage Spotify-র ভেতরে তৈরি হয়। ২০২০ সালে এটি open source হয় আর একই বছর CNCF-তে যায়। এর স্তর (maturity) সময়ের সাথে বদলায়, তাই বর্তমান অবস্থা CNCF-এর পাতায় দেখুন। ধারণাগতভাবে এতে আছে software catalog, software template, প্রযুক্তিগত documentation আর plugin ব্যবস্থা।

গুরুত্বপূর্ণ কথা হলো, Backstage একটি প্রস্তুত পণ্য নয়, portal বানানোর framework. এটি নিজে deployment করে না, অন্য tool-কে ডাকে। প্রতিটি service-এর repository-তে একটি ছোট ফাইল catalog-কে পরিচয় দেয়:

উদাহরণ (পড়ার জন্য, এখানে চালানো হয়নি):

apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
  name: order-api
  description: Takes and tracks customer orders
spec:
  type: service
  lifecycle: production
  owner: team-orders
  dependsOn:
    - resource:default/orders-db

owner এখানে সবচেয়ে দামি লাইন। মালিকহীন service-এর alert কেউ ধরে না। dependsOn থেকে catalog নির্ভরতার ছবি আঁকে। backstage.io/v1alpha1 নামটি লেখার সময়ের, version বদলাতে পারে, তাই নিজের ব্যবহৃত release-এর docs দেখুন।

নিচের ইঞ্জিন: Terraform, Crossplane আর Kubernetes

Portal শুধু দরজা। Cloud-এ আসল কাজ করে নিচের স্তর, আর সেখানে আপনার পরিচিত tool-ই আছে:

  • Terraform module (পর্ব ৫৪): Platform দল একটি যাচাই করা module লেখে, ডেভেলপার তিনটি input দেন। অনুরোধ এলে pipeline terraform plan আর apply চালায়। State আর plan review-এর নিয়ম আগের মতোই থাকে।
  • Crossplane: Kubernetes-এর CRD দিয়ে নিজের API বানানোর উপায় (পর্ব ৫০)। Reconcile loop cloud resource-কে অবিরাম মিলিয়ে রাখে। Platform দল ঠিক করে ছোট একটি অনুরোধ নিচে কোন কোন resource হবে।
  • Kubernetes: ভিত্তি, শেষ গন্তব্য নয়। Kubernetes-এর নিজের documentation বলে এটি developer platform বানানোর উপকরণ দেয়, সর্বাঙ্গীণ PaaS নয়।

যেমন, একটি প্রতিষ্ঠান নিজের API এভাবে নকশা করতে পারে। নিচের Database kind কোনো tool-এর নিজস্ব নয়, এটি একটি কাল্পনিক ভেতরের API:

উদাহরণ (কাল্পনিক CRD, এখানে চালানো হয়নি):

apiVersion: platform.example.com/v1alpha1
kind: Database
metadata:
  name: orders-db
  namespace: team-orders
spec:
  engine: postgres
  size: small
  environment: staging

ডেভেলপার মাত্র কয়েকটি লাইন লিখলেন। নিচে এটি হতে পারে একটি managed database, subnet group, backup নীতি, encryption key আর secret. Provider-ভিত্তিক খুঁটিনাটি ঢাকা থাকলেও সমস্যায় পড়লে কাউকে না কাউকে নিচের স্তর বুঝতে হয়। একে বলে leaky abstraction.

স্তরOpen source উদাহরণProvider-এর কাছাকাছি সেবা
Portal, catalogBackstageAWS Service Catalog, Azure Deployment Environments, Google Cloud Service Catalog-এর মতো সেবা আংশিক মিল রাখে
Infrastructure অনুরোধTerraform বা OpenTofu, CrossplaneCloudFormation, Bicep, Infrastructure Manager
DeliveryArgo CD, Flux (পর্ব ৬০)Provider-এর নিজস্ব pipeline সেবা
PolicyOPA, Kyverno (পর্ব ৫৫)AWS SCP, Azure Policy, Google Cloud Organization Policy

সেবার নাম আর সুবিধা বদলাতে থাকে, তাই বেছে নেওয়ার আগে provider-এর বর্তমান পাতা দেখুন। এখানে কোনোটি সেরা বলে দাবি করা হচ্ছে না।

৪ · Golden path: নতুন service ২০ মিনিটে

ক-সফটের ডেলিভারি দল একটি নতুন service চায়: order-api. নিচের stepper-এ একই কাজ দুটি পথে পাশাপাশি চলছে। সব সময় অনুমিত, তবে চিত্রটি বহু প্রতিষ্ঠানে পরিচিত।

একই কাজ, দুই পথ (কর্মদিবস = ৮ ঘণ্টা)
কাজ
Golden path-এর ঘড়ি
Ticket পথের ঘড়ি
খোলা ticket
  1. শুরু। দুই পথেই ঘড়ি শূন্য। Golden path-এর ডেভেলপার portal খোলেন। Ticket পথের ডেভেলপার খোঁজেন কাকে অনুরোধ করতে হবে। এই খোঁজাটিও extraneous load.
  2. Repository. Golden path: নাম, মালিক, port আর tier দিয়ে form পূরণ, ৩ মিনিট। Ticket পথ: প্রথম ticket, অন্য দল একদিন পরে repository খুলে দিল, ঘড়ি ১ দিন, ticket ১।
  3. Skeleton আর pipeline. Golden path: template ফাইল লিখে দিল, ৫ মিনিট। Ticket পথ: অন্য একটি service থেকে pipeline কপি করে হাতে ঠিক করা, মোট ৩ দিন। এই কপির সাথে পুরোনো ভুলও আসে। এখানে ticket লাগেনি, তাই সংখ্যা ১-ই থাকল।
  4. Namespace. Golden path: platform API namespace বানাল, ৭ মিনিট। Ticket পথ: দ্বিতীয় ticket, মোট ৫ দিন।
  5. Role আর secret. Golden path: আগে থেকে অনুমোদিত least-privilege ছাঁচ থেকে role আর secret-এর পথ তৈরি, ৯ মিনিট। Ticket পথ: তৃতীয় ticket আর নিরাপত্তা পর্যালোচনা, মোট ৮ দিন।
  6. প্রথম deployment. Golden path: প্রথম build আর staging, ৯ মিনিট বেশি লেগে ১৮ মিনিট। Ticket পথ: DNS আর certificate-এর চতুর্থ ticket, মোট ১০ দিন।
  7. Catalog আর alert. Golden path: ২০ মিনিটে শেষ। Ticket পথ: পঞ্চম ticket, ১১ দিন, অর্থাৎ ৮৮ কর্মঘণ্টা। ধরি আসল হাতের কাজ ছিল ৬ ঘণ্টা। তাহলে ৬ ÷ ৮৮ ≈ ৬.৮% সময় কাজ হয়েছে, বাকিটা অপেক্ষা। অপেক্ষাই আসল শত্রু, মানুষের গতি নয়।

খেয়াল করুন, golden path নিরাপত্তা পর্যালোচনা বাদ দেয়নি। পর্যালোচনা হয়েছে একবার, template-এর ওপর। প্রতিটি service-এ আলাদা করে নয়। এটিই বড় কৌশল: নিয়ম মানা কাজটি মানুষের মনে রাখার ওপর না রেখে ছাঁচের ভেতরে ঢুকিয়ে দেওয়া।

ভালো চর্চা → ছাঁচের ভেতরে → সহজ পথ
“মনে রাখুন” থেকে “এমনিতেই হয়ে যায়”

Template কীভাবে ফাইল বানায়

Scaffolding মানে template আর input থেকে নতুন প্রকল্পের শুরুর ফাইল তৈরি করা। ভেতরে জাদু নেই: input যাচাই, কয়েকটি মান হিসাব, তারপর ফাঁকা ঘর পূরণ। নিচের ছোট generator চালান। Input বদলে দেখুন কোনটি গৃহীত হয় আর কোনটি ফিরে আসে।

// A tiny service scaffold generator: template + inputs -> files. Nothing is really created.
const TEMPLATE = {
  "catalog-info.yaml": "kind: Component\nmetadata:\n  name: {{name}}\nspec:\n  owner: {{owner}}\n  lifecycle: {{lifecycle}}",
  "deploy/values.yaml": "image: registry.example.com/{{name}}:v0.1.0\nport: {{port}}\nreplicas: {{replicas}}",
  ".ci/pipeline.yaml": "uses: platform/pipelines/node@v3\nservice: {{name}}",
};
const OWNERS = ["team-orders", "team-delivery"], TIERS = ["critical", "normal", "experiment"];

function validate(i) {
  const bad = [];
  if (!/^[a-z][a-z0-9-]{2,30}$/.test(i.name)) bad.push(`name "${i.name}": use lowercase, digits, -`);
  if (!OWNERS.includes(i.owner)) bad.push(`owner "${i.owner}": must be a known team`);
  if (i.port < 1024 || i.port > 65535) bad.push(`port ${i.port}: non-root needs 1024-65535`);
  if (!TIERS.includes(i.tier)) bad.push(`tier "${i.tier}": unknown`);
  return bad;
}
function render(text, vars) {
  return text.replace(/\{\{(\w+)\}\}/g, (m, key) => {
    if (!(key in vars)) throw new Error("template needs " + key);
    return vars[key];
  });
}
function scaffold(input) {
  console.log(`--- request: ${input.name} ---`);
  const bad = validate(input);
  if (bad.length) { bad.forEach(b => console.log("  REJECTED " + b)); return; }
  const vars = { ...input, replicas: input.tier === "critical" ? 3 : input.tier === "normal" ? 2 : 1,
    lifecycle: input.tier === "experiment" ? "experimental" : "production" };
  for (const [file, text] of Object.entries(TEMPLATE))
    console.log(`# ${file}\n${render(text, vars)}`);
}

scaffold({ name: "order-api", owner: "team-orders", port: 8080, tier: "critical" });
scaffold({ name: "Order_API", owner: "rafi", port: 80, tier: "critical" });

আউটপুট:

--- request: order-api ---
# catalog-info.yaml
kind: Component
metadata:
  name: order-api
spec:
  owner: team-orders
  lifecycle: production
# deploy/values.yaml
image: registry.example.com/order-api:v0.1.0
port: 8080
replicas: 3
# .ci/pipeline.yaml
uses: platform/pipelines/node@v3
service: order-api
--- request: Order_API ---
  REJECTED name "Order_API": use lowercase, digits, -
  REJECTED owner "rafi": must be a known team
  REJECTED port 80: non-root needs 1024-65535

tier: "critical" থেকে generator নিজেই replicas: 3 বের করেছে। ডেভেলপারকে এই সিদ্ধান্ত নিতে হয়নি। দ্বিতীয় অনুরোধে তিনটি ভুল একসাথে ধরা পড়েছে, আর কিছুই তৈরি হয়নি। Error বার্তা বলে দিচ্ছে কী ঠিক করতে হবে, এটিও পণ্যের গুণমান। Port 80-র বার্তার পেছনে কারণ হলো, non-root container-এ সাধারণত ১০২৪-এর নিচের port এড়ানো হয় (পর্ব ৩৮)।

Backstage-এ এই কাজটি একটি YAML-এ লেখা থাকে। Form, ফাইল তৈরি, Git-এ পাঠানো আর catalog-এ নিবন্ধন, চারটিই এখানে দেখা যায়। Git-এ কোড পাঠাতে একটি integration আগে থেকে সেট করা লাগে।

উদাহরণ (পড়ার জন্য, এখানে চালানো হয়নি, action-এর নাম version-ভেদে আলাদা হতে পারে):

apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
  name: node-service
  title: Node.js service
spec:
  owner: group:default/platform
  type: service
  parameters:
    - title: Service details
      required: [name, owner]
      properties:
        name:
          title: Name
          type: string
          pattern: '^[a-z][a-z0-9-]{2,30}$'
        owner:
          title: Owner team
          type: string
  steps:
    - id: fetch
      name: Fill the skeleton
      action: fetch:template
      input:
        url: ./skeleton
        values:
          name: ${{ parameters.name }}
          owner: ${{ parameters.owner }}
    - id: publish
      name: Create the repository
      action: publish:github
      input:
        repoUrl: github.com?owner=example-org&repo=${{ parameters.name }}
        description: Service from the golden path
    - id: register
      name: Add to the catalog
      action: catalog:register
      input:
        repoContentsUrl: ${{ steps.publish.output.repoContentsUrl }}
        catalogInfoPath: /catalog-info.yaml

parameters থেকে form তৈরি হয়, আর pattern সেখানেই ভুল নাম আটকায়। steps পরপর তিনটি কাজ করে: skeleton পূরণ, repository তৈরি আর catalog-এ নিবন্ধন। একটি সাধারণ দুর্বলতা হলো, template শুধু দিনের প্রথম ফাইল বানায়। পরে template উন্নত হলে পুরোনো service সেই উন্নতি পায় না। তাই দামি লজিক template-এ না রেখে ভাগ করা pipeline বা versioned module-এ রাখা ভালো, যেমন উপরের platform/pipelines/node@v3.

৫ · Escape hatch: পথের বাইরে যাওয়ার নিয়ম

পাকা রাস্তা সব গ্রামে যায় না। কোথাও কাঁচা পথ ধরতে হয়। সরকার সেই পথ বন্ধ করে না, তবে সেখানে নিজের দায়িত্বে যেতে হয়, আর ট্রাফিক আইন তখনও বহাল থাকে। Golden path-এর escape hatch ঠিক এমন।

একটি ভালো platform তিনটি জিনিস আলাদা রাখে: কী সহজ করে দেওয়া হয়েছে (template), কী নিজে করা যায় (escape hatch), আর কী কোনোভাবেই ভাঙা যায় না (guardrail, পর্ব ৩৫)। নিচে একটি কাল্পনিক ছবি-খোঁজা দলকে দেখুন, যাদের GPU লাগবে।

  1. Golden pathCPU service
  2. Escape hatchনিজের module
  3. GuardrailPolicy check
  4. নতুন পথGPU template
ছবি-খোঁজা দলের অবস্থা
অবস্থান
Infrastructure-এর মালিক
Patch আর on-call
Policy check
  1. পথের ভেতরে। প্রতিষ্ঠানের বেশিরভাগ service সাধারণ CPU-র। Template এই কাজের জন্যই। দল কোড লিখছে, node আর patch নিয়ে ভাবছে না।
  2. চাহিদা পথে ধরে না। ছবি-খোঁজা দলের model চালাতে GPU node লাগবে, template-এ এই বিকল্প নেই। এখানে “না” বললে দল আড়ালে আলাদা account খুলতে পারে, যাকে বলে shadow IT.
  3. Escape hatch. দল নিজের Terraform module লিখল। স্বাধীনতার সাথে দায়িত্বও দলের হাতে এলো: node-এর মালিকানা, patch আর রাতের on-call এখন তাদের। Platform দল এই চুক্তিটি আগে থেকে লিখে রাখে।
  4. Guardrail-এ ছাড় নেই। পথের বাইরে মানে নিয়মের বাইরে নয়। Policy check দুটি deny দিল: owner tag নেই, আর bucket public. এগুলো পরামর্শ নয়, ঠিক না করলে deployment হবে না।
  5. ঠিক করে পাস। দল tag দিল, bucket private করল। Policy pass. Catalog-এ off-path চিহ্ন বসল, তাই সবাই জানে এটি কে সামলায়। এটি শাস্তি নয়, সঠিক তথ্য।
  6. পথ চওড়া হলো। এক বছর পরে তিনটি দলের একই চাহিদা দেখা গেল। Platform দল তাদের module থেকে শিখে gpu-service template বানাল। মালিকানা ফিরল platform স্তরে। Escape hatch তাই roadmap-এর সবচেয়ে সৎ সূত্রও।
মূল ধারণা

ভালো platform-এ ঐচ্ছিক সুবিধা আর বাধ্যতামূলক সীমা আলাদা। Pipeline-এর ধরন ঐচ্ছিক হতে পারে, কিন্তু secret-এ হাত না দেওয়া, audit log আর public bucket-এর নিষেধ বাধ্যতামূলক। দুটিকে মেশালে দল হয় আটকে যায়, নয়তো নিয়ম ভাঙে।

৬ · পাতলা platform আর X-as-a-Service

নতুন platform দলের সবচেয়ে সাধারণ ভুল হলো প্রথম দিনেই বিশাল নকশা। Team Topologies বই এর বিপরীতে একটি ধারণা দেয়: thinnest viable platform (TVP). মানে, দলগুলোকে এগিয়ে নিতে যতটুকু না হলেই নয়, ঠিক ততটুকু। বইটির মতে, শুরুতে এটি একটি wiki পাতাও হতে পারে, যেখানে লেখা আছে কোন cloud সেবা কীভাবে ব্যবহার করতে হবে।

বিপণিবিতানের কমিটি প্রথম দিনেই কোটি টাকার সাবস্টেশন বসায় না। আগে দেখে কোন দোকানের কতটা লাগে, তারপর একটি জেনারেটর আর দুটি লাইন দিয়ে শুরু করে। ব্যবহার বাড়লে লাইন বাড়ে।

পুরুত্বকী আছেকখন যথেষ্ট
১. Wikiলিখিত সিদ্ধান্ত: কোন সেবা, কোন নিয়ম, কাকে জিজ্ঞেসপ্রায় সব ছোট দল
২. ভাগ করা কোডএকটি pipeline, কয়েকটি Terraform module, একটি Helm chartদুই-তিনটি দল একই কাজ করছে
৩. Templateএক command বা একটি form থেকে নতুন serviceনতুন service নিয়মিত তৈরি হচ্ছে
৪. Portal আর APICatalog, self-service, নিজের API, মাপার ব্যবস্থাঅনেক দল, কেউ সবাইকে চেনে না

এখানে “পাতলা” মানে দুর্বল নয়। মানে হলো, নিজে কম বানানো। Cloud-এর managed সেবা যতটা পারে করুক, আর platform শুধু সেটুকু যোগ করুক যা আপনার প্রতিষ্ঠানে আলাদা। Platform যত মোটা, রক্ষণাবেক্ষণের বোঝাও তত বড়।

দল কীভাবে কথা বলবে

Team Topologies তিন ধরনের মিথস্ক্রিয়া বর্ণনা করে। পর্ব ৭-এ দলের ধরন দেখেছেন, এখানে দলগুলোর সম্পর্ক দেখুন।

ধরনমানেPlatform-এ কখন
Collaborationদুই দল একসাথে বসে নতুন কিছু খোঁজেনতুন পথের শুরুতে, একটি pilot দলের সাথে
X-as-a-Serviceএক দল অন্য দলের সেবা বৈঠক ছাড়াই ব্যবহার করেপথ পরিপক্ব হলে, স্বাভাবিক অবস্থা
Facilitatingএক দল অন্য দলকে শেখায়, তারপর সরে যায়নতুন পথে দলগুলোকে তুলে দেওয়ার সময়

X-as-a-Service মানে অন্য দলের সাথে কথা বন্ধ করা নয়। মানে হলো, স্বাভাবিক কাজের জন্য কথার দরকার না হওয়া। বিদ্যুৎ বিলের মতো: প্রতিবার সুইচ চাপার আগে আপনি বিদ্যুৎ অফিসে ফোন করেন না। তবে নতুন লাইন বা গোলযোগে যোগাযোগের পথ খোলা থাকে। মিথস্ক্রিয়ার ধরনও বদলায়: একটি pilot দলের সাথে collaboration থেকে শুরু, তারপর ধীরে X-as-a-Service.

৭ · লাভ হচ্ছে কি: toil, onboarding আর payback

Platform দল বিনামূল্যে আসে না। তাই হিসাব দরকার। Toil (পর্ব ৭) কতটা কমল, নতুন মানুষ কত দ্রুত কাজে নামলেন, নতুন service কত সহজে হলো। এখানে টাকা নয়, ঘণ্টায় হিসাব করি, কারণ বেতন প্রতিষ্ঠানভেদে আলাদা।

সূত্র। এক ত্রৈমাসিকে (Q) সর্বোচ্চ সাশ্রয় F = E × T × c + H × h + S × s. এখানে E = প্রকৌশলী, T = মাথাপিছু toil, c = platform কতটা কমাতে পারে, H = নতুন নিয়োগ, h = মাথাপিছু onboarding সাশ্রয়, S = নতুন service, s = service-প্রতি সাশ্রয়। একজন প্রকৌশলীর এক Q = ৪০ × ১২ = ৪৮০ ঘণ্টা। তাই F ÷ ৪৮০ বলে দেয় সর্বোচ্চ কতজনের খরচ উঠতে পারে। এই হিসাবের সব মান অনুমিত।

পূর্ণ সমাধান, ক-সফট ৩০ জনে। ধরি T = ৬০ ঘণ্টা, c = ০.৫, H = ৪, h = ৮০ − ২৪ = ৫৬ ঘণ্টা, S = ৩, s = ১২০ − ৮ = ১১২ ঘণ্টা।

  • Toil: ৩০ × ৬০ × ০.৫ = ৯০০ ঘণ্টা
  • Onboarding: ৪ × ৫৬ = ২২৪ ঘণ্টা
  • নতুন service: ৩ × ১১২ = ৩৩৬ ঘণ্টা
  • মোট F = ১,৪৬০ ঘণ্টা, আর ১,৪৬০ ÷ ৪৮০ ≈ ৩.০৪ জন

অর্থাৎ ১০০% ব্যবহার হলেও ৩ জনের বেশি দল খরচ তুলতে পারবে না। বাস্তবে ব্যবহার ধীরে বাড়ে, প্রথম কয়েকটি Q-তে সাশ্রয় প্রায় শূন্য। নিচের simulator ১২টি Q-র হিসাব দেখায়। adopt মানে কতটা কাজ platform-এ এসেছে, reach মানে platform F-এর কতটা ধরতে পারে।

// Does a platform team pay back? Every number is ASSUMED, and the unit is hours, not money.
const QUARTER = 480;                     // one engineer, one quarter: 40 h x 12 weeks
const TOIL = 60, CUT = 0.5;              // toil per engineer per quarter; share a platform removes
const HIRE = 80 - 24, SERVICE = 120 - 8; // hours saved per new hire, per new service
const SLOW = [0, 0.1, 0.3, 0.5, 0.7, 0.8, 0.85, 0.9, 0.9, 0.9, 0.9, 0.9]; // share of work on it
const FAST = [0.2, 0.5, 0.7, 0.8, 0.85, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9]; // thin ships sooner

function run(name, s) {
  let net = 0, payback = "never in 12 quarters", rows = [];
  for (let q = 0; q < 12; q++) {
    const eng = s.eng + s.grow * q;
    const full = (eng * TOIL * CUT + s.hires * HIRE + s.services * SERVICE) * s.reach;
    const saved = Math.round(s.adopt[q] * full), cost = s.people * QUARTER;
    net += saved - cost;
    if (net >= 0 && payback.startsWith("never")) payback = "Q" + (q + 1);
    rows.push(`  Q${q + 1}: eng ${eng}, saved ${saved}, cost ${cost}, running total ${net}`);
  }
  console.log(`${name}: payback ${payback}, 12-quarter total ${net} h`);
  if (s.show) console.log(rows.join("\n"));
}

run("A. 10 eng, 1 person", { eng: 10, grow: 0, hires: 1, services: 1, people: 1, reach: 1, adopt: SLOW });
run("B. 30 eng, team of 4", { eng: 30, grow: 2, hires: 4, services: 3, people: 4, reach: 1, adopt: SLOW });
run("C. 30 eng, thin, 1 person", { eng: 30, grow: 2, hires: 4, services: 3, people: 1, reach: 0.6, adopt: FAST });
run("D. 100 eng, team of 6", { eng: 100, grow: 4, hires: 12, services: 8, people: 6, reach: 1, adopt: SLOW, show: true });

আউটপুট:

A. 10 eng, 1 person: payback never in 12 quarters, 12-quarter total -2134 h
B. 30 eng, team of 4: payback never in 12 quarters, 12-quarter total -8449 h
C. 30 eng, thin, 1 person: payback Q4, 12-quarter total 4522 h
D. 100 eng, team of 6: payback Q9, 12-quarter total 7393 h
  Q1: eng 100, saved 0, cost 2880, running total -2880
  Q2: eng 104, saved 469, cost 2880, running total -5291
  Q3: eng 108, saved 1442, cost 2880, running total -6729
  Q4: eng 112, saved 2464, cost 2880, running total -7145
  Q5: eng 116, saved 3534, cost 2880, running total -6491
  Q6: eng 120, saved 4134, cost 2880, running total -5237
  Q7: eng 124, saved 4495, cost 2880, running total -3622
  Q8: eng 128, saved 4867, cost 2880, running total -1635
  Q9: eng 132, saved 4975, cost 2880, running total 460
  Q10: eng 136, saved 5083, cost 2880, running total 2663
  Q11: eng 140, saved 5191, cost 2880, running total 4974
  Q12: eng 144, saved 5299, cost 2880, running total 7393

A: ১০ জনে পূর্ণ F মাত্র ৪৬৮ ঘণ্টা, একজনের ৪৮০ ঘণ্টাও ওঠে না। B: ৩০ জনে ৪ জনের দল ক্ষতিতেই শেষ, কারণ দলের খরচ প্রতি Q-তে ১,৯২০ ঘণ্টা, আর সাশ্রয় কখনো এই সীমায় পৌঁছায় না। C: একই ৩০ জনে একজনের পাতলা platform reach ০.৬ নিয়েও Q4-এ খরচ তুলে ফেলে, কারণ সে দ্রুত ব্যবহারযোগ্য হয়েছে। D: ১০০ জনে ৬ জনের দল প্রথম Q-তে শূন্য সাশ্রয়ে শুরু করে। Q5-এ ৩,৫৩৪ ঘণ্টা সাশ্রয় ২,৮৮০ ঘণ্টা খরচ ছাড়ায়, তবে জমা ঘাটতি শোধ হয় Q9-এ।

এখানে বড় তফাত হলো দুই রেখা: এক Q-র সাশ্রয় খরচ ছাড়ানো আর মোট খরচ উঠে আসা। দ্বিতীয়টি অনেক পরে হয়। তাই platform-এ বিনিয়োগ সাধারণত কয়েক বছরের সিদ্ধান্ত। মডেলে platform চালানোর cloud খরচ ধরা হয়নি, ব্যর্থ deployment কমা আর নিরাপত্তার লাভও ধরা হয়নি। প্রথমটি ফল খারাপ করে, বাকি দুটি ভালো করে, তাই ফলাফল শুধু দিক বোঝায়। নিজের সংখ্যা বসিয়ে দেখুন।

বাঁচানো ঘণ্টা মানেই নতুন feature নয়। ঘণ্টাগুলো অন্য কাজে না গেলে কোনো লাভ হয় না। আর ডেভেলপারের কাছ থেকে নেওয়া অনুমান ভুল হতে পারে, তাই আগে কিছু সংখ্যা মেপে নিন।

৮ · Adoption আর পরিমাপ: জোর করলে কী হয়

Adoption rate মানে কত দল সত্যিই platform ব্যবহার করছে। Payback-এর হিসাবে এটিই সবচেয়ে বড় চলক। স্বাভাবিক লোভ আসে: “সবাইকে বাধ্য করি!” নিচের মডেলে ৪০টি দল, ১২টি Q. একটি বীজ-ভিত্তিক (seeded) random generator ব্যবহার হয়েছে, তাই প্রতিবার একই ফল। ভালো পণ্য হলে দলগুলো একে অন্যের মুখে শুনে আসে। বাধ্য করলে কিছু দল শুধু কাগজে যোগ দেয়, কিন্তু নিজের পুরোনো script চালিয়ে যায়।

// Adoption over 12 quarters for 40 teams. A seeded model, not data from any company.
function mulberry32(a) { return () => { a = (a + 0x6D2B79F5) | 0;
  let t = Math.imul(a ^ (a >>> 15), 1 | a); t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
  return ((t ^ (t >>> 14)) >>> 0) / 4294967296; }; }
const TEAMS = 40, QUARTERS = 12;

// quality 0..1: how much better the path feels. mandateAt: quarter of the order, or 0.
function simulate(quality, mandateAt, seed) {
  const rnd = mulberry32(seed), state = new Array(TEAMS).fill("own"), out = [];
  for (let q = 1; q <= QUARTERS; q++) {
    const real = state.filter(s => s === "real").length;
    const pull = (0.05 + 0.7 * real / TEAMS) * quality;   // word of mouth needs a good product
    state.forEach((s, i) => {
      if (s === "own" && rnd() < pull) state[i] = "real";
      else if (s === "own" && q === mandateAt) state[i] = rnd() < quality ? "real" : "paper";
      else if (s === "paper" && rnd() < pull / 2) state[i] = "real";
    });
    const r = state.filter(s => s === "real").length;
    out.push({ real: r, paper: state.filter(s => s === "paper").length });
  }
  return out;
}

const pad = v => String(v).padStart(3);
const good = simulate(0.9, 0, 7), weak = simulate(0.35, 0, 7), forced = simulate(0.35, 4, 7);
console.log("real use out of 40 teams; forced column = real + on-paper-only");
console.log("  Q | voluntary,good | voluntary,weak | forced,weak");
for (let q = 0; q < QUARTERS; q++)
  console.log(`${pad(q + 1)} |${pad(good[q].real).padStart(15)} |${pad(weak[q].real).padStart(15)} | ${pad(forced[q].real)} + ${forced[q].paper}`);

const last = forced[QUARTERS - 1], bar = n => "#".repeat(n).padEnd(TEAMS, ".");
console.log("reported  " + bar(last.real + last.paper) + " " + (last.real + last.paper));
console.log("real use  " + bar(last.real) + " " + last.real);

আউটপুট:

real use out of 40 teams; forced column = real + on-paper-only
  Q | voluntary,good | voluntary,weak | forced,weak
  1 |              2 |              1 |   1 + 0
  2 |              5 |              3 |   3 + 0
  3 |              8 |              6 |   6 + 0
  4 |             13 |              8 |  12 + 28
  5 |             14 |              8 |  12 + 28
  6 |             16 |              8 |  12 + 28
  7 |             21 |              8 |  13 + 27
  8 |             26 |             11 |  14 + 26
  9 |             32 |             14 |  16 + 24
 10 |             37 |             17 |  16 + 24
 11 |             38 |             18 |  16 + 24
 12 |             40 |             20 |  18 + 22
reported  ######################################## 40
real use  ##################...................... 18

“Forced, weak” কলামে Q4-এ আদেশ জারি হলো। ড্যাশবোর্ডে সংখ্যা এক লাফে ৬ থেকে ৪০। Q12-তে প্রতিবেদন বলছে ৪০, কিন্তু সত্যিকারের ব্যবহার ১৮টি দল। একই দুর্বল পণ্য স্বেচ্ছায় ছেড়ে দিলে পাওয়া যেত ২০। অর্থাৎ এই মডেলে আদেশ আসল ব্যবহার বাড়ায়নি, শুধু দেখার যন্ত্রটি নষ্ট করেছে। ভালো পণ্য জোর ছাড়াই Q12-তে ৪০-এ পৌঁছেছে।

এটি একটি খেলনা মডেল, কোনো প্রতিষ্ঠানের তথ্য নয়। একটি সৎ সীমাবদ্ধতাও আছে: নিরাপত্তার মতো কিছু ক্ষেত্রে সময়সীমা বৈধ, আর ভালো পণ্যে সময়সীমা ব্যবহার দ্রুত করতে পারে। অনুশীলন ৪-এ সেটি নিজে দেখুন।

কী মাপবেন

একটি মাত্র সংখ্যায় platform-এর বিচার হয় না। চারটি স্তরে দেখুন, আর শুরুর দিনের সংখ্যা লিখে রাখুন। শুরুর সংখ্যা না থাকলে উন্নতি প্রমাণ করা যায় না।

প্রশ্নযা মাপবেনফাঁদ
ব্যবহার হচ্ছে কি?Adoption rate, প্রতি সপ্তাহের সক্রিয় দল, escape hatch-এর সংখ্যাবাধ্য ব্যবহার গোনা
গতি বেড়েছে কি?Onboarding time, নতুন service-এর সময়নতুন লোক ভুল বুঝলেও “হয়ে গেছে” ধরা
Delivery ভালো হচ্ছে কি?DORA metric: deployment frequency, lead time, change failure rate, পুনরুদ্ধারের সময়একে অন্য দলের সাথে তুলনা বা শাস্তির হাতিয়ার করা
মানুষ খুশি কি?নিয়মিত জরিপ, internal NPS, SPACEশুধু জরিপ দেখে সিস্টেমের সংখ্যা বাদ দেওয়া

DORA এখনকার delivery দেখায়, কিন্তু ডেভেলপারের অভিজ্ঞতা পুরো দেখায় না। SPACE (Forsgren ও সহলেখকরা, ACM Queue, ২০২১) বলে, উৎপাদনশীলতা একটি সংখ্যা নয়। এর পাঁচটি দিক হলো Satisfaction, Performance, Activity, Communication আর Efficiency. পরামর্শ হলো, অন্তত তিনটি দিক থেকে মাপুন। শুধু commit গুনলে মানুষ commit-ই বাড়াবে।

৯ · কখন দরকার নেই, build না buy, আর তিন বড় ঝুঁকি

ক-সফট ১০ থেকে ১০০ জনে বাড়ল। প্রতিটি আকারে সিদ্ধান্ত আলাদা। আগের অংশের F সূত্রই এখানে কাজে লাগছে (T = ৬০, c = ০.৫, h = ৫৬, s = ১১২)। সংখ্যাগুলো উদাহরণ, কোনো সর্বজনীন অনুপাত নয়।

১০ জনএকটি wiki
৩০ জনপাতলা platform
১০০ জনPlatform একটি পণ্য
হিসাব আর সিদ্ধান্ত
প্রকৌশলী · দল · service
নতুন নিয়োগ · নতুন service (Q)
সর্বোচ্চ সাশ্রয় F
F ÷ 480
Platform-এ মানুষ
  1. ১০ জন, হিসাব। F = ১০ × ৩০ + ৫৬ + ১১২ = ৪৬৮ ঘণ্টা। ১০০% ব্যবহারেও একজনের ৪৮০ ঘণ্টা ওঠে না।
  2. ১০ জন, সিদ্ধান্ত: দল নয়। একটি PaaS বা managed সেবা, একটি ভাগ করা pipeline আর একটি wiki পাতা। সবাই সবাইকে চেনে। এখন platform বানালে product-এর মূল্যবান সময় যাবে।
  3. ৩০ জন, হিসাব। ব্যথা শুরু: ছয়টি দল, pipeline-এর তিনটি ধরন, বারবার একই প্রশ্ন। F = ৯০০ + ২২৪ + ৩৩৬ = ১,৪৬০ ঘণ্টা, প্রায় ৩ জনের সমান।
  4. ৩০ জন, সিদ্ধান্ত: ১ জন, পাতলা। ৩ জন উপরের সীমা, লক্ষ্য নয়। একজন প্রকৌশলী দুটি দলের সবচেয়ে বড় কষ্ট ধরেন: একটি pipeline, একটি service template, কয়েকটি Terraform module. Simulator-এর C-তে এই পথই Q4-এ খরচ তুলেছে।
  5. ১০০ জন, হিসাব। কেউ আর সবাইকে চেনেন না। F = ৩,০০০ + ৬৭২ + ৮৯৬ = ৪,৫৬৮ ঘণ্টা, প্রায় ৯.৫ জনের সমান।
  6. ১০০ জন, সিদ্ধান্ত: ৬ জনের পণ্য-দল। সাথে একজন product manager, catalog, template, self-service আর মাপার ব্যবস্থা। লক্ষ্য F-এর পুরোটা ধরা নয়, কারণ ব্যবহার কখনো ১০০% হয় না। Simulator-এর D অনুযায়ী মোট খরচ উঠতে Q9 পর্যন্ত ধৈর্য লাগবে।

ছোট প্রতিষ্ঠানের সরল নিয়ম: platform দল গঠনের আগে দেখুন, একটি PaaS, একটি monolith বা অল্প কয়েকটি service, আর একটি ভাগ করা pipeline দিয়ে কাজ চলে কি না। Kubernetes আর portal নিজেই বোঝা যোগ করে। কয়েকটি সংকেত দেখা গেলে ভাবুন: একই প্রশ্ন বারবার আসছে, নতুন service খুলতে সপ্তাহ লাগছে, নিরাপত্তার মান দলভেদে আলাদা, নতুন লোকের কাজে নামতে মাসখানেক লাগছে।

Build না buy

পথসুবিধাদামকার জন্য মানায়
PaaS কেনাদ্রুত শুরু, কম মানুষনমনীয়তা কম, vendor lock-in, বড় হলে খরচছোট দল, সাধারণ web app
বাণিজ্যিক portal বা hosted BackstagePortal রক্ষণাবেক্ষণ কমলাইসেন্স, নিজের integration তবু লাগেমাঝারি প্রতিষ্ঠান
Open source জোড়া দেওয়াপুরো নিয়ন্ত্রণ, কোনো লাইসেন্স ফি নেইপ্রকৌশল সময়, চিরকালের রক্ষণাবেক্ষণবড় দল, বিশেষ প্রয়োজন
পুরো নিজে বানানোহুবহু নিজের মতোসবচেয়ে ব্যয়বহুল, মানুষ চলে গেলে ঝুঁকিকদাচিৎ যুক্তিসঙ্গত

সাধারণ পরামর্শ: যা আপনাকে বাজারে আলাদা করে না, তা নিজে বানাবেন না। আর লাইসেন্স ফি শূন্য হলেও open source বিনামূল্যে নয়, কারণ মানুষের সময় লাগে। দাম, লাইসেন্স আর সুবিধা বদলায়, তাই প্রতিটি পথ নিজের হিসাবে যাচাই করুন।

তিন বড় ঝুঁকি

Ivory tower

কারো সাথে কথা না বলে এক বছর ধরে নিখুঁত নকশা। চালু হলে দেখা যায় কেউ এই সমস্যায় ভুগছিলেন না। প্রতিকার: pilot দল, ছোট release, আর পাশে বসে ব্যবহার দেখা।

ব্যবহারকারী নেই

জোর করে ব্যবহার

আদেশে ড্যাশবোর্ড ভরে, কিন্তু ফিডব্যাক থেমে যায়। দল যাওয়ার পথ না পেলে অভিযোগও করে না, শুধু কৌশলে এড়িয়ে যায়। প্রতিকার: পণ্যটি ভালো করা। আদেশ শুধু guardrail-এর জন্য।

ভুয়া adoption

Ticket-driven platform

নাম platform, কাজ ticket-এ। Platform দল ডেভেলপার আর cloud-এর মাঝে নতুন দেয়াল হয়ে ওঠে। প্রতিকার: যে অনুরোধ বারবার আসে, সেটিকে self-service-এ রূপান্তর করা।

নতুন নামে Ops

আরও দুটি ঝুঁকি মনে রাখুন। প্রথমত, platform নিজেই একক ব্যর্থতার বিন্দু হয়ে উঠতে পারে: pipeline বন্ধ মানে সবার deployment বন্ধ। তাই platform-এরও SLO, on-call আর runbook লাগে। দ্বিতীয়ত, প্রতিটি নতুন আবরণ নতুন শেখার বোঝা। ভুল abstraction ডেভেলপারের cognitive load না কমিয়ে উল্টো বাড়াতে পারে।

আরও গভীরে: CNCF-এর TAG App Delivery ২০২৩ সালে একটি Platforms White Paper আর একটি Platform Engineering Maturity Model প্রকাশ করে, যা শুরুর বিবেচনার জন্য ভালো। Spotify-র প্রকৌশল ব্লগে ২০২০ সালের একটি লেখায় golden path-এর পেছনের fragmentation সমস্যা বর্ণনা করা হয়েছে। DORA-র ২০২৪ সালের প্রতিবেদন সম্পর্কে লেখা হয়, platform ব্যবহারে উৎপাদনশীলতার অনুভূতি বাড়লেও delivery-র কিছু সংখ্যায় ফল মিশ্র ছিল। অর্থাৎ platform থাকলেই ভালো ফল আসে, এমনটি প্রমাণিত নয়।

পরীক্ষা ও ইন্টারভিউতে:

  • DevOps আর platform engineering-এর পার্থক্য? — DevOps একটি সংস্কৃতি ও চর্চা, আর platform engineering সেই চর্চা একটি ভেতরের পণ্যের মাধ্যমে সহজ করে।
  • Golden path মানে কী? — সমর্থিত, সবচেয়ে সহজ, নিরাপদ পথ, যা ঐচ্ছিক থাকে এবং নিয়ম নিজের ভেতরে বহন করে।
  • Kubernetes কি internal developer platform? — না, এটি একটি ভিত্তি। ডেভেলপারের জন্য সহজ self-service স্তর আলাদাভাবে লাগে।
  • Thinnest viable platform কী? — দরকারি ন্যূনতম platform, যা শুরুতে একটি wiki-ও হতে পারে।
  • Platform সফল কি না কীভাবে বুঝবেন? — স্বেচ্ছা adoption, onboarding time, DORA আর ডেভেলপারের সন্তুষ্টি একসাথে দেখে।

১০ · AI-এর যুগে platform: ভালো ছাঁচ, নাকি দ্রুত ছড়ানো ভুল

AI দিয়ে template বা Terraform module লেখা খুব দ্রুত। কিন্তু মনে রাখুন, template-এর ভুল একটি জায়গায় থাকে না। একটি ভুল প্রতিটি নতুন service-এ কপি হয়। Golden path যে শক্তিতে ভালো চর্চা ছড়ায়, একই শক্তিতে ভুলও ছড়ায়। তাই platform কোডে AI-এর খসড়া আরও কড়াভাবে পড়তে হবে।

AI-এর সাধারণ ভুলPlatform-এ এর ফলযাচাই
Role-এ * permissionসব নতুন service অতিরিক্ত ক্ষমতা পায়Policy check আর least privilege review
0.0.0.0/0 বা public storageTemplate-এর একটি লাইনে সব service উন্মুক্তterraform plan পড়া, নিরাপত্তা scan
Hardcoded secretসব repository-তে একই secretSecret scanner, secret manager ব্যবহার
latest tag, পুরোনো API versionপরে অকারণে ভাঙেDigest বা নির্দিষ্ট version, --dry-run
Backstage action বা flag বানিয়ে দেওয়াTemplate চলেই নাOfficial docs, throwaway পরিবেশে পরীক্ষা
“Crossplane-ও লাগবে, portal-ও লাগবে”১০ জনের প্রতিষ্ঠানে বিশাল ব্যবস্থা, খরচ উপেক্ষিতF হিসাব, budget alert, TVP দিয়ে শুরু
সতর্কতা ছাড়া terraform destroy বা kubectl deleteভাগ করা resource মুছে সবার সমস্যাPlan ও diff পড়া, পরিবেশ দুবার মিলিয়ে দেখা

AI-কে সিদ্ধান্তদাতা নয়, পর্যালোচক হিসেবে ব্যবহার করুন। ডেটা দিন, আর আগে প্রশ্ন করতে বলুন। আসল service-এর নাম, key বা secret দেবেন না।

তুমি একজন সতর্ক platform engineer. আমাদের প্রতিষ্ঠানে ৩০ জন প্রকৌশলী, ৬টি দল, ২০টি service. সবচেয়ে বড় কষ্ট: নতুন service খুলতে ১০ দিন লাগে। ১. আগে আমাকে সর্বোচ্চ ৫টি প্রশ্ন করো, কোনো tool-এর নাম বলার আগে। ২. Thinnest viable platform-এর একটি প্রস্তাব দাও, Kubernetes বা portal ছাড়া সম্ভব হলে সেটি আগে বলো। ৩. প্রতিটি সংখ্যা কোথা থেকে এলো বলো, আর অনুমান আলাদা করে দেখাও। ৪. কোনো template দিলে * permission, 0.0.0.0/0, public storage, hardcoded secret আর latest tag বাদ দাও। ৫. কোনো tool-এর action বা flag নিশ্চিত না হলে “যাচাই দরকার” লেখো, বানিয়ে দিও না।

Platform-এ AI-এর খসড়া মানার আগে

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন, তারপর “→ উত্তর” চাপুন। এখানে সংখ্যার চেয়ে trade-off বোঝাই আসল।

প্র ০১DevOps তো Dev আর Ops-এর দেয়াল ভাঙতে এসেছিল। Platform দল কি আবার একটি নতুন দেয়াল তুলছে না?

প্রশ্নটি ন্যায্য, আর উত্তর নির্ভর করে কীভাবে কাজ হচ্ছে তার ওপর। ২০০৯ সালের দিকে Patrick Debois আর DevOpsDays-এর আন্দোলন এসেছিল একটি বাস্তব কষ্ট থেকে: Dev কোড ছুড়ে দিত, Ops চালাত, কেউ পুরো দায় নিত না। ২০০৬ সালে Amazon-এর Werner Vogels একটি সাক্ষাৎকারে বলেছিলেন, “You build it, you run it.” ফলাফল ভালো হলো, কিন্তু একটি নতুন সমস্যা জন্ম নিল।

Cloud, container আর Kubernetes আসার পর “চালানো” মানে আর কয়েকটি server নয়। একটি দলের কাঁধে এসে পড়ল network, IAM, secret, observability আর নিরাপত্তার পুরো স্তূপ। প্রতিটি দলকে পূর্ণ cloud বিশেষজ্ঞ হতে বলা বাস্তবসম্মত নয়। Platform engineering এখানে একটি মধ্যপথ।

দেয়াল চেনার পরীক্ষা সহজ। দেয়াল মানে: আপনাকে অনুরোধ পাঠিয়ে অপেক্ষা করতে হয়। সেবা মানে: আপনি নিজে কাজটি করতে পারেন। পুরোনো Ops-এ ticket খুলে অপেক্ষা ছিল। ভালো platform-এ API আছে, আর service-এর মালিকানা ও on-call দলের কাছেই থাকে। তাই সীমারেখা আছে, তবে সেটি অপেক্ষার দেয়াল নয়, সেতুর মতো একটি স্পষ্ট চুক্তি।

বাস্তবে নাম বদলের ঘটনাও দেখা যায়: Ops দলের নাম “DevOps” হলো, তারপর “Platform”, কিন্তু কাজ চলল ticket-এ। সেটি ঠিক সেই দেয়াল। আর platform বাড়ার সাথে দলের নিজের নিচের স্তরের জ্ঞান ক্ষয় হওয়ার ঝুঁকিও থাকে। তাই কিছুটা ভিত্তিগত দক্ষতা দলে রাখাই উচিত।

মূল উপলব্ধি: DevOps সমস্যাটি “মালিকানা” নিয়ে, platform সমস্যাটি “বোঝা” নিয়ে। ভালো platform মালিকানা না কেড়ে বোঝা কমায়। Ticket-এর সংখ্যাই বলে দেবে আপনি কোন দিকে যাচ্ছেন।

প্র ০২Kubernetes-ই তো সবকিছু পারে। তার ওপর আবার platform কেন? “Platform for building platforms” কথাটির মানে কী?

Kelsey Hightower-এর নামে একটি বক্তব্য খুব প্রচলিত, যার সারকথা: Kubernetes হলো platform বানানোর platform, এটি শুরু করার জায়গা, শেষ গন্তব্য নয়। Kubernetes-এর নিজের documentation-ও বলে, এটি প্রচলিত অর্থে সব কিছু সহ PaaS নয়, বরং developer platform বানানোর উপকরণ দেয় (শব্দচয়ন version-ভেদে বদলাতে পারে)।

একজন ডেভেলপার আসলে কী চান? “আমার কোড চলুক, URL দিন, log দেখান।” Kubernetes-এ এই ইচ্ছা পূরণে লাগে Deployment, Service, Ingress বা Gateway, ConfigMap, Secret, resource request, probe, NetworkPolicy, RBAC আর আরও কিছু। প্রতিটি object-এ ভুলের সুযোগ আছে। এগুলো শক্তিশালী কারণ এগুলো সাধারণ, আর সাধারণ বলেই আপনার প্রতিষ্ঠানের নিয়ম এতে লেখা নেই। আপনার প্রতিষ্ঠানে কোন team label বাধ্যতামূলক, Kubernetes তা জানে না।

তাই platform দল একটি সরু আবরণ বানায়। Helm chart, Kustomize base, operator বা Application ধরনের নিজের CRD দিয়ে তারা বলে: “চারটি মান দিন, বাকিটা আমরা ঠিক করে দিচ্ছি।”

তবে এখানে একটি ফাঁদ আছে। Joel Spolsky ২০০২ সালে “Law of Leaky Abstractions” লিখেছিলেন: যেকোনো জটিল আবরণ কিছুটা হলেও ফুটো হয়, মানে নিচের জটিলতা একসময় বেরিয়ে আসে। Pod crash করলে ডেভেলপারকে event পড়তেই হবে। আবরণ যদি পুরো জিনিসটি লুকিয়ে দেয় আর সমস্যা খোঁজার পথও বন্ধ করে, তবে তা আরও কষ্ট দেবে। ভালো platform তাই লুকায় না, শুধু default ঠিক করে দেয়, আর নিচে নামার পথ রাখে। YAML-এর ওপর আরও YAML চাপানো আবরণ অনেক সময় এক জটিলতাকে আরেকটিতে বদলায়।

মূল উপলব্ধি: Kubernetes ক্ষমতা দেয়, platform মতামত দেয়। ভালো আবরণ সাধারণ কাজ সহজ করে, কিন্তু কঠিন সময়ে সত্য লুকায় না।

প্র ০৩Heroku-র মতো PaaS তো এক command-এ deploy করত। তাহলে প্রতিষ্ঠানগুলো নিজেদের platform বানাচ্ছে কেন?

Heroku ডেভেলপারদের যে অভিজ্ঞতা দিয়েছিল, তা আজও মানদণ্ড: git push, তারপর app চালু। ২০১১ সালে Heroku-র প্রকৌশলীদের লেখা The Twelve-Factor App সেই অভিজ্ঞতার পেছনের নিয়ম সাজিয়ে দেয়। Cloud Foundry, OpenShift, পরে Cloud Run-এর মতো সেবাও এই ধারায় এসেছে। তাহলে এত প্রতিষ্ঠান নিজে কেন বানায়?

একটি প্রচলিত ব্যাখ্যা হলো “৮০% সমস্যা”। PaaS সাধারণ web app-এর জন্য চমৎকার, কিন্তু বড় প্রতিষ্ঠানে কিছু চাহিদা থাকে যা ছাঁচে আটকায়: বিশেষ network, on-premises সংযোগ, compliance, নিজের data residency, GPU, দীর্ঘ চলা কাজ বা খরচের নিয়ন্ত্রণ। ২০% চাহিদা পূরণ না হলে অনেক দল PaaS ছেড়ে দেয়, আর তখন সম্পূর্ণ অন্য পথে যেতে হয়। PaaS-এ escape hatch দুর্বল হলে সেটি একটি খাড়া পাহাড়ের মতো।

দ্বিতীয় কারণ খরচ। ছোট আকারে PaaS সস্তা, কারণ মানুষের সময় বাঁচে। বড় আকারে মাসিক বিল মানুষের খরচ ছাড়াতে পারে। তৃতীয় কারণ Kubernetes-এর উত্থান, যা নিজে platform বানানোকে সহজ বলে মনে করিয়েছে। “মনে করিয়েছে” শব্দটি ইচ্ছাকৃত, কারণ রক্ষণাবেক্ষণের দাম পরে আসে।

তাহলে নিজের platform কি সবসময় ঠিক? না। অনেক প্রতিষ্ঠান নিজেরা কয়েক বছর খেটে একটি দুর্বল PaaS বানায়। ছোট বা সাধারণ চাহিদার দলের জন্য কেনা PaaS প্রায়ই ভালো সিদ্ধান্ত। এই পর্বের F সূত্রেই দেখেছেন, ১০ জনের হিসাবে নিজের দলের খরচ ওঠে না। একটি পরিণত পথও আছে: নিজে শুধু উপরের পাতলা স্তর রাখা, আর নিচে managed সেবা ব্যবহার করা।

মূল উপলব্ধি: PaaS হলো কেনা মতামত, internal platform হলো নিজের মতামত। নিজের মতামত তখনই লাভজনক, যখন আপনার পার্থক্য সত্যিই তার দাম মেটায়।

প্র ০৪Backstage কেন এত আলোচিত, আর কেন কোনো কোনো প্রতিষ্ঠানে portal চালুর পর তা ফাঁকা পড়ে থাকে?

Spotify অনেক স্বাধীন দলে কাজ করত, আর তার ফল ছিল বিশাল বৈচিত্র্য। Spotify-র প্রকৌশলীরা পরে যাকে fragmentation বলে বর্ণনা করেছেন: কেউ জানে না কী আছে, কে মালিক, কীভাবে শুরু করতে হবে। Golden path আর একটি কেন্দ্রীয় portal ছিল এর উত্তর। ২০২০ সালে Backstage open source হলে অনেক প্রতিষ্ঠান ভাবল, “এই তো সমাধান।”

কিন্তু একটি পরিচিত ভুল এখানে: সমাধানটি নকল করা, সমস্যাটি নয়। Spotify-র portal তাদের প্রতিষ্ঠানের আকার আর অভ্যাসের ফল। আরেক প্রতিষ্ঠানে Backstage বসালে কয়েকটি জিনিস একসাথে দরকার পড়ে। Framework-টির রক্ষণাবেক্ষণে TypeScript জানা মানুষ লাগে। Catalog-এর তথ্য তাজা না থাকলে কেউ বিশ্বাস করে না। আর পেছনের self-service না থাকলে portal শুধু ticket খোলার সুন্দর form.

বাস্তবে এই অভিযোগ বিভিন্ন সম্মেলন ও লেখায় শোনা যায়, যদিও এটি কোনো সার্বজনীন পরিসংখ্যান নয়: portal আছে, কিন্তু ব্যবহার কম। কারণ প্রায়ই একটি: portal প্রথম লক্ষ্য হয়ে গিয়েছিল। ডেভেলপাররা ওয়েবসাইট চান না, তাঁরা নিজের কষ্টের সমাধান চান। অনেকে আসলে command line, IDE বা Git-এর ভেতরেই কাজ করতে চান।

ভালো ক্রমটি উল্টো। প্রথমে সবচেয়ে বড় কষ্টটি খুঁজুন। তারপর পেছনের API বা template বানান, একটি pilot দলে পরীক্ষা করুন। প্রমাণিত হলে তারপর portal-এ সামনের দরজা দিন। Team Topologies-এর TVP-ও একই কথা বলে। Catalog-এর ক্ষেত্রেও একই শিক্ষা: হাতে তথ্য ভরা তালিকা পুরোনো হয়, তাই তথ্য কোডের পাশে রেখে স্বয়ংক্রিয়ভাবে সংগ্রহ করা ভালো।

মূল উপলব্ধি: Portal হলো শোরুম, আসল মালামাল পেছনে। শোরুম আগে বানালে সুন্দর তাক পাবেন, কিন্তু তাকে পণ্য থাকবে না।

প্র ০৫“৯০% দল আমাদের platform-এ” — এই সংখ্যা শুনে কি খুশি হওয়া উচিত? উৎপাদনশীলতা কি আদৌ মাপা যায়?

আগে জিজ্ঞেস করুন, সংখ্যাটি এলো কীভাবে। ব্যবহার বাধ্যতামূলক হলে এটি আদেশের সংখ্যা, পণ্যের গুণমান নয়। এই পর্বের adoption মডেলে প্রতিবেদন ৪০ দেখালেও আসল ব্যবহার ছিল ১৮।

অর্থনীতিবিদ Charles Goodhart-এর নামে প্রচলিত নীতিটি এখানে মনে রাখার মতো (১৯৭০-এর দশক; পরে Marilyn Strathern-এর সরল রূপে পরিচিত): কোনো মাপ লক্ষ্য হয়ে গেলে সেটি আর ভালো মাপ থাকে না। Deployment-এর সংখ্যা লক্ষ্য হলে মানুষ ছোট ছোট অর্থহীন deployment করবে। Commit গুনলে commit বাড়বে। Ticket বন্ধ গুনলে ticket ভাগ হবে।

DORA গবেষণা (Accelerate, ২০১৮) দেখিয়েছে delivery-র গতি আর স্থিতি একসাথে উন্নত হতে পারে, দুটির একটি বেছে নিতে হয় না। কিন্তু DORA দলের delivery মাপে, মানুষের কাজ নয়। আর SPACE (২০২১) সতর্ক করে, উৎপাদনশীলতা একটি সংখ্যায় ধরা যায় না, এবং activity একা বিভ্রান্তিকর।

একটি ভালো অভ্যাস হলো সিস্টেমের সংখ্যা আর মানুষের কথা মিলিয়ে দেখা। ধরুন, pipeline-এর সময় অর্ধেক হলো, কিন্তু জরিপে ডেভেলপার বলছেন কাজ কঠিন হয়েছে। দুটির অমিলই আসল তথ্য। হয়তো নতুন বাধা অন্য কোথাও। Adoption-এর ক্ষেত্রে তিনটি প্রশ্ন ভালো: কেউ চাইলে ছাড়তে পারত কি? ছেড়ে যাওয়া দল কেন গেল? Escape hatch কতবার, কী কারণে ব্যবহৃত হলো?

আর গবেষণার ফল সবসময় একমুখী নয়। DORA-র ২০২৪ সালের প্রতিবেদন সম্পর্কে যা লেখা হয়েছে, তাতে platform থেকে অনুভূত উৎপাদনশীলতা বাড়লেও delivery-র কিছু সংখ্যায় মিশ্র ফল এসেছে। তাই “platform মানেই উন্নতি” দাবি করা যায় না, নিজের প্রতিষ্ঠানে মাপতে হবে।

মূল উপলব্ধি: সংখ্যা প্রশ্ন খোঁজার যন্ত্র, শাস্তির যন্ত্র নয়। যে platform-এর দল ছেড়ে যাওয়ার স্বাধীনতা রেখেও টিকে থাকে, তার ৯০% সংখ্যাটিই আসল।

অনুশীলন

প্রথমে নিজে হিসাব বা লিখে দেখুন, তারপর উত্তর মেলান। কোনো cloud account লাগবে না।

  1. হিসাব: একটি কাল্পনিক প্রতিষ্ঠানে ৬০ জন প্রকৌশলী। মাথাপিছু toil Q-প্রতি ৪৫ ঘণ্টা, platform কমাতে পারে ৪০%. প্রতি Q-তে ৬ জন নিয়োগ, প্রত্যেকে ৫০ ঘণ্টা বাঁচান। ৫টি নতুন service, প্রতিটিতে ১০০ ঘণ্টা বাঁচে। (ক) F কত? (খ) সর্বোচ্চ কতজনের খরচ ওঠে? (গ) ৭০% ব্যবহারে ৪ জনের দলের এক Q-র হিসাব কী?

    (ক) ৬০ × ৪৫ × ০.৪ = ১,০৮০। ৬ × ৫০ = ৩০০। ৫ × ১০০ = ৫০০। F = ১,৮৮০ ঘণ্টা।

    (খ) ১,৮৮০ ÷ ৪৮০ ≈ ৩.৯২ জন। ৪ জনের দল ১০০% ব্যবহারেও ১,৯২০ ঘণ্টার খরচ পুরো তোলে না।

    (গ) সাশ্রয় ০.৭ × ১,৮৮০ = ১,৩১৬ ঘণ্টা, খরচ ১,৯২০। এক Q-তে ৬০৪ ঘণ্টা ঘাটতি। ৭০% ব্যবহারে ১,৩১৬ ÷ ৪৮০ ≈ ২.৭৪ জনের খরচ ওঠে। তাই ২ জনের পাতলা দল দিয়ে শুরু করা যুক্তিসঙ্গত।

  2. ফল অনুমান করুন: একটি generator-এর নিয়ম: নাম ^[a-z][a-z0-9-]{2,30}$ মানতে হবে, owner হতে হবে team-orders বা team-delivery, port ১০২৪ থেকে ৬৫৫৩৫, আর tier critical → replicas 3, normal → 2, experiment → 1. experiment হলে lifecycle experimental, নইলে production. এই তিন অনুরোধের ফল কী? (ক) pay-api, team-delivery, 8080, experiment (খ) ab, team-orders, 9000, normal (গ) cart-api, team-orders, 3000, normal

    (ক) গৃহীত: replicas: 1, lifecycle: experimental.

    (খ) ফিরে আসবে: প্রথম অক্ষরের পর আরও অন্তত ২টি অক্ষর লাগে, মানে কমপক্ষে ৩ অক্ষর। ab-তে ২টি। বার্তা: REJECTED name "ab": use lowercase, digits, -. কোনো ফাইল তৈরি হবে না।

    (গ) গৃহীত: replicas: 2, lifecycle: production. scaffold.js-এর শেষ লাইনে এগুলো বসিয়ে মিলিয়ে নিন।

  3. নকশা ও সমালোচনা: ৮০ জনের একটি কাল্পনিক প্রতিষ্ঠানের পরিকল্পনা: “৬ জনের দল ১৮ মাস ধরে সম্পূর্ণ portal আর নিজের deployment engine বানাবে। চালু হলে সবার জন্য বাধ্যতামূলক। সাফল্যের মাপ: বন্ধ হওয়া ticket-এর সংখ্যা।” অন্তত তিনটি বড় সমস্যা বের করে নতুন পরিকল্পনা দিন।

    সমস্যা: (১) ১৮ মাস ব্যবহারকারী ছাড়া, ivory tower-এর ঝুঁকি। (২) নিজের deployment engine, অথচ Argo CD, Flux বা বাণিজ্যিক পণ্য আছে। (৩) বাধ্যতামূলক ব্যবহারে আসল সংকেত হারায়। (৪) Ticket বন্ধ গোনা মানে ticket-ই লক্ষ্য, অথচ লক্ষ্য হওয়া উচিত ticket কমানো।

    নতুন পরিকল্পনা: প্রথম মাসে পাঁচটি দলের সাথে কথা বলে শুরুর সংখ্যা লিখুন: নতুন service-এর সময়, onboarding time, DORA, জরিপ। ৩ মাসে TVP: সবচেয়ে বড় কষ্টের একটি template, একটি pilot দল। Delivery কেনা বা open source দিয়ে করুন। প্রতি Q-তে ব্যবহার দেখে দল বাড়ান। শুধু নিরাপত্তার guardrail বাধ্যতামূলক। সাফল্য: স্বেচ্ছা adoption, নতুন service-এর সময় আর সন্তুষ্টি।

  4. Simulator পরীক্ষা: adoption_curve.js-এ forced লাইনে quality ০.৩৫ থেকে ০.৮ করুন: simulate(0.8, 4, 7). Q8 আর Q12-তে “forced” কলাম কী দেখায়? স্বেচ্ছা ভালো পণ্যের সাথে তুলনা করে কী বুঝলেন?

    আউটপুটে Q8-তে 36 + 4, Q12-তে 38 + 2. স্বেচ্ছা ভালো পণ্য (quality ০.৯) Q8-তে ২৬, Q12-তে ৪০। ভালো পণ্যে সময়সীমা আসল ব্যবহার দ্রুত এগিয়ে দেয়, আর শুধু কাগজের দলের সংখ্যা সামান্য থাকে। দুর্বল পণ্যে একই আদেশে কাগজের দলই বেশি হয়েছিল। তাই শিক্ষাটি “কখনো আদেশ নয়” নয়, বরং “আগে পণ্য, তারপর সময়সীমা।” মডেলে quality দুই কলামে আলাদা, তাই এটি খুব সূক্ষ্ম তুলনা নয়, শুধু দিক দেখায়।

নিজেকে যাচাই করুন

ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।

ক্রমএকটি নতুন platform উদ্যোগের ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. ডেভেলপারদের সাথে কথা বলে সবচেয়ে বড় কষ্ট খোঁজা
  2. শুরুর সংখ্যা মাপা: নতুন service-এর সময়, onboarding time
  3. একটি পাতলা সমাধান বানানো: wiki, template, module
  4. একটি pilot দলের সাথে পরীক্ষা ও শোধরানো
  5. ব্যবহার ও সন্তুষ্টি মেপে ধীরে বড় করা

“Platform as a product” কথাটির সঠিক অর্থ কোনটি?

  • ভেতরের platform বাইরের গ্রাহকের কাছে বিক্রি করা
  • ডেভেলপারদের গ্রাহক ধরে তাদের প্রয়োজন ও ব্যবহার দেখে platform চালানো
  • একটি বাণিজ্যিক portal কেনা
  • সব দলের জন্য platform বাধ্যতামূলক করা

একটি দলের প্রয়োজন golden path-এ ধরে না। সবচেয়ে ভালো ব্যবস্থা কোনটি?

  • অনুরোধ বাতিল করে পথেই থাকতে বাধ্য করা
  • পথ থেকে বেরোতে দেওয়া, আর সব নিয়মও তুলে নেওয়া
  • Escape hatch দেওয়া: দল দায়িত্ব নেবে, কিন্তু guardrail বহাল থাকবে
  • প্রতিটি ব্যতিক্রম platform দল হাতে করে দেবে

Team Topologies-এর “thinnest viable platform” ধারণায় কোনটি সত্য?

  • Platform যতটুকু না হলেই নয়, ততটুকু রাখা, এটি একটি wiki-ও হতে পারে
  • Platform-কে অবশ্যই Kubernetes-এর ওপর হতে হবে
  • আগে একটি সম্পূর্ণ portal বানাতে হবে
  • Platform দলে ঠিক একজন মানুষ থাকতে হবে

একটি কাল্পনিক প্রতিষ্ঠানে ২০ জন প্রকৌশলী, তিন মাসে মাথাপিছু toil ৬০ ঘণ্টা, platform তার অর্ধেক কমাতে পারে। অন্য কোনো সাশ্রয় নেই। একজন প্রকৌশলীর তিন মাস = ৪৮০ ঘণ্টা। ১০০% ব্যবহারে সর্বোচ্চ কতজনের খরচ ওঠে?

  • ২.৫ জন
  • ৩ জন
  • ১০ জন
  • ১.২৫ জন

X-as-a-Service মিথস্ক্রিয়া কখন সবচেয়ে মানানসই?

  • একেবারে নতুন একটি সমস্যা খোঁজার শুরুতে
  • যখন সেবাটি স্থিতিশীল, আর স্বাভাবিক কাজে বৈঠকের দরকার নেই
  • যখন প্রতিটি অনুরোধ ticket দিয়ে হাতে করতে হয়
  • যখন এক দল অন্য দলকে নতুন দক্ষতা শেখাচ্ছে

একটি platform-এর ড্যাশবোর্ডে আদেশের পর ব্যবহার ১০০% দেখাচ্ছে, কিন্তু দলগুলো গোপনে পুরোনো script চালাচ্ছে। এটি কোন ঝুঁকির উদাহরণ?

  • Leaky abstraction
  • Ticket-driven platform
  • জোর করে ব্যবহার, যার ফলে adoption-এর সংখ্যা ভুয়া হয়ে যায়
  • Vendor lock-in

শব্দকোষ

লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন, অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:

মনে রাখুন

  1. Platform-এর কাজ extraneous cognitive load কমানো, service-এর মালিকানা কেড়ে নেওয়া নয়।
  2. Platform একটি পণ্য: ডেভেলপাররা গ্রাহক, আর self-service না থাকলে সেটি নতুন নামে Ops.
  3. Golden path নিরাপদ পথকে সহজ করে, escape hatch দরজা খোলা রাখে, guardrail সীমা ধরে রাখে।
  4. পাতলা শুরু করুন। F = E×T×c + H×h + S×s, তারপর F ÷ ৪৮০ দিয়ে দলের আকার যাচাই করুন। ১০ জনে সাধারণত দল লাগে না।
  5. স্বেচ্ছা adoption, onboarding time, DORA আর সন্তুষ্টি একসাথে দেখুন। আদেশে ভরা সংখ্যায় ভুলবেন না।

পরের পর্বে: CI/CD, GitOps আর platform-এর মডিউল এখানে শেষ। আপনি এখন কোড production-এ পৌঁছাতে পারেন। কিন্তু চলতে চলতে সেটি সুস্থ আছে কি না, জানবেন কীভাবে? পরের মডিউল শুরু হচ্ছে metric আর Prometheus দিয়ে।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

এই পর্বটি শেয়ার করুন:
এই পর্বে ভুল পেয়েছেন? জানান