لنیسترها همیشه بدهی های خود را می پردازند. شعار لنیستر چیست؟ یوری بولدیرف راجرز وبلاگ نویس کوچک زیر کرملین را لکه دار می کند

شیوه های مدیریت بدهی فن آوری در یک تیم واحد


حدود یک سال پیش، تیم ما از مرحله رشد سریع ویژگی به توسعه روان تر با تمرکز بر بهبود کیفیت حرکت کرد. در این مرحله، محصولات ما مقدار قابل توجهی از راه حل های غیربهینه، کدهای زشت و کتابخانه های قدیمی را جمع آوری کرده اند. برای همه اینها باید کاری انجام می شد.


تا به امروز، ما موفق به ایجاد فرآیندی شده‌ایم که مبارزه با بدهی فنی را قابل پیش‌بینی، بی‌درد و اجتناب‌ناپذیر می‌کند.


آنچه در نتیجه به دست آوردیم:

  • تیم خوشحال است. انتشار گذشته نگر به طور منظم شامل نکات مثبت در مورد بهبود فناوری و کاهش بدهی فنی است.
  • برای چندین نسخه سه ماهه متوالی، ما توانستیم عملکرد را بدون افزایش تعداد خطوط کد در پروژه افزایش دهیم. حذف کدهای غیر ضروری و ساده کردن آنچه مورد نیاز بود، اندازه پایه کد را برای عملکرد موجود کاهش داد. و این کاهش تقریباً در مقیاس با کد جدید که عملکرد جدید را پیاده سازی می کند همزمان بود.
  • در طول بازسازی و ارتقاء، محصول همیشه در حالت کار قرار دارد. هر دو هفته یک نسخه موقت کاملاً فعال را منتشر می کنیم.

بگذارید به شما بگویم که چگونه به این مهم دست یافتیم.

بدهی فنی چیست؟

تعریف کاری من از بدهی فنی مقدار کاری است که باید انجام شود تا یک پروژه با دیدگاه تیم در مورد آنچه عالی است مطابقت داشته باشد. توجه داشته باشید که بدهی فنی می تواند نه تنها به دلیل استفاده آزادانه از عصا در توسعه، بلکه به دلیل تغییر ایده ها در مورد زیبایی ایجاد شود. به عنوان مثال، شیوه های رایج صنعت تغییر کرده است. یا توسعه دهندگان عاشق OOP شدند و عاشق برنامه نویسی کاربردی شدند. یا چارچوب مد روز دیگر یک کیک نیست و پیدا کردن متخصصانی که دوست دارند روی آن بنویسند دشوار شده است.


با این حال، دلیل اصلی بدهی فنی آنتروپی در تمام تنوع آن است. تست‌های واحد غیرفعال، نظرات منسوخ شده که ارتباط خود را با کد از دست داده‌اند، تصمیم‌گیری‌های ناموفق معماری، اجرای ویژگی‌هایی که دیگر هیچ‌کس از آن‌ها استفاده نمی‌کند، پایه‌ای برای آینده‌ای که نیامده است، و خیلی، خیلی بیشتر.


نتیجه این است که ظهور بدهی فنی در هر پروژه طولانی مدت اجتناب ناپذیر است.

وقتی بدهی فنی مشکلی ندارد

چرا بدهی فنی بد است؟ هزینه توسعه بیشتر را به دلیل تعدادی از عوامل افزایش می دهد:

  • سرعت اجرای عملکرد جدید کاهش می یابد.
  • احتمال رگرسیون در هنگام اصلاح عیوب افزایش می یابد.
  • روند توسعه کمتر قابل پیش بینی و در نتیجه کمتر قابل مدیریت می شود.
  • روند معرفی یک توسعه دهنده جدید به پروژه در حال طولانی شدن است.

این ضرر گاهی اوقات "بهره بدهی فنی" نامیده می شود.


شرایطی وجود دارد که این ضررها ارزان تر از حذف بدهی فنی هستند:

  • پایان عمر پروژه نزدیک است. توجه داشته باشید، این پایان افزودن قابلیت‌ها نیست، بلکه لحظه‌ای است که می‌توانید از هدر دادن تلاش‌های برنامه‌نویس برای پشتیبانی نیز جلوگیری کنید. این دسته همچنین شامل نمونه های اولیه یک بار، دموهای یکباره برای نمایشگاه ها و غیره می شود.
  • ارزش زمان توسعه در حال حاضر بسیار بیشتر از انتظار در آینده است. اصلاحات فوری برای یک ضرب الاجل ثابت، استارت آپ هایی که از دور بعدی بودجه در حال اتمام هستند و غیره. در چنین مواردی، رفع بدهی فنی می تواند تا زمانی که گرمای لحظه ای سرد شود به تعویق بیفتد. پروژه هایی وجود دارند که از وضعیت اضطراری خارج نمی شوند، اما توصیه های این مقاله هنوز به آنها کمک نمی کند.

با بدهی فنی چه کنیم؟ رویکردهای ناموفق

رویکرد شماره 1. "زمان نداریم، نسخه باید دیروز ارسال شود"

میل به رسیدن به ضرب الاجل فردا به هر قیمتی به ضرر سرعت توسعه پس فردا.


گاهی اوقات یک سازه پیش ساخته ساخته شده از عصا یک انتخاب درست عینی است. در تمرین من، این به وضوح در هنگام ساخت نسخه های آزمایشی برای نمایشگاه ها بیان شد. تاریخ رویداد کاملاً مشخص است؛ اگر به موقع آن را برای یک نمایشگاه مهم انجام ندهید، تلاش بعدی یک سال دیگر خواهد بود. در این مورد، می توانید محصول را "خارج از دست خود" نمایش دهید، و با دقت از تمام اشکالات جلوگیری کنید. به عنوان یک مهندس، انجام چنین پروژه هایی برای من ناخوشایند است، اما عصا در آنها موجه است.


وقتی محصولی می سازید که عمر طولانی داشته باشد، همه چیز متفاوت است. رعایت مهلت به دلیل راه حل های فنی مشکوک لذت گرانی است. کل هزینه عبارت است از:

  1. از اجرای خود عصا،
  2. از جایگزینی بعدی آن با یک راه حل کامل،
  3. از رنج داشتن عصا در بین نکات قبلی.

نکته دوم خیلی راحت قابل دست کم گرفتن است و این خطر وجود دارد که اصلاً به سومی که گرانترین آن است فکر نکنید.


وقتی در یک کنفرانس با یکی از رهبران فناوری ملاقات می‌کنید، ممکن است معلوم شود که کابوس رفع اشکال بی‌پایان طرحی که از عصا ساخته شده بود، او را به این وضعیت رساند.


رویکرد شماره 2. "بله، اینجا باید همه چیز را دور بریزیم و دوباره بنویسیم"

هر چه وضعیت بدهی فنی بدتر باشد، وسوسه برای دفن کل کد پروژه و نوشتن دوباره همه چیز بیشتر می شود. این یکی از اشتباهات کلاسیک است که می تواند کل پروژه را نابود کند.


این موضوع به قدری در مقاله معروف جوئل اسپولسکی پوشش داده شده است که من هیچ فایده ای در ارائه استدلال های خودم نمی بینم.

رویکرد شماره 3. "ما در شب و آخر هفته اصلاح می کنیم تا مدیر متوجه نشود."

بحث در مورد نیاز به حذف بدهی فنی از نظر مزایای تجاری همیشه آسان نیست. تیم توسعه ممکن است وسوسه شود که لبه های ناهموار را دور بزند و یک بازسازی بزرگ را در محل شروع کند. این را می توان در ساعات غیر کاری، در مکث بین سایر وظایف، یا "در دم" سایر وظایف با افزایش تخمین ها انجام داد.


چه چیز بدی دارد؟ اوه، کلی چیز:

  • کاهش شفافیت اعتماد بین مدیریت و تیم را تضعیف می کند. اغلب تلاش‌های بعدی برای اصلاح وضعیت با اعمال انضباط و سفت کردن پیچ‌ها منجر به وخامت بیشتر کار تیمی می‌شود.
  • یک موقعیت ریشه‌دار که در آن اولویت‌های تیم و مدیریت متضاد هستند، باعث بی‌انگیختگی هر دو طرف می‌شود.
  • ثمرات بازسازی به روش های غیرقابل پیش بینی در محصول گنجانده می شود و در جایی که انتظار نمی رود باگ های رگرسیونی ایجاد می کند. در تیم های آگاه، این منجر به بار ناگهانی و برنامه ریزی نشده در QA می شود. در ناخودآگاه وارد تولید می شود و در آنجا خراب می شود.

پس از استفاده تیم از این دستور العمل، چشمان مدیریت شروع به تکان دادن می کند.

اصول ما

1. وظایف فنی را به عقب ماندگی عمومی اضافه کنید

تعدادی الگو در زندگی وظایف در پروژه ها وجود دارد:

  • کاری که در پس کار نباشد شانس کمتری برای وارد شدن به کار دارد.
  • یک کار بدون فرمول بندی واضح شانس کمتری برای ورود به کار دارد.
  • کاری که نمی توان آن را با درجه اطمینان بالایی تخمین زد، شانس کمتری برای ورود به کار دارد.
  • یک کار بزرگ بیشتر از یک کار کوچک در صف منتظر می ماند.

ماکسیم دوروفیف در "تکنیک صندوق ورودی خالی" خود به خوبی در مورد این موارد صحبت می کند.


برای جلوگیری از انباشت بدهی فنی، کار برای حذف آن باید با در نظر گرفتن اصول ذکر شده در بالا تکمیل شود.


همه وظایف، به جز کوچکترین آنها، در لیست عقب مانده قرار می گیرند. به این ترتیب آنها نه تنها در اوقات فراغت خود، بلکه به عنوان بخشی از کار برنامه ریزی شده نیز این فرصت را دارند. علاوه بر این، از دست دادن کامل چنین وظایفی دشوارتر است - به عقب افتاده بیشتر و دقیق تر از TODO ها در کد، تکه های کاغذ روی مانیتور، صفحات ویکی رها شده، دستمال های آغشته به چای با نمودارها و موارد دیگر نگاه می شود. منبع اطلاعات.

  • اگر یک TODO غیر پیش پا افتاده در کد وجود داشته باشد، حاوی پیوندی به وظیفه در بک لاگ است. ما مطابق با این اصل را در بررسی کد بررسی می‌کنیم و TODOهای پیچیده را بدون ارجاع نمی‌پذیریم.

    ممکن است درام پشت کامنت باشد.

    یک بار، در کنار چنین TODO نوشته شده بود: "عصا. صاحب محصول مرا مجبور به انجام آن کرد. در اسرع وقت حذف کنید."

  • وقتی یک توسعه‌دهنده متوجه می‌شود که مکانی نیاز به بازسازی دارد، مشکلی را در بک لاگ ایجاد می‌کند.
  • زمانی که یک توسعه دهنده تمایل به بهبود پلتفرم داشته باشد، وظیفه ای را در بک لاگ ایجاد می کند.
  • به محض اینکه اطمینان کافی در مورد حداقل گام های اولیه وجود داشته باشد، طرح های معماری درازمدت در قالب وظایف جداگانه در لیست عقب مانده قرار می گیرند.

تا زمانی که چنین تغییراتی از نظر هزینه‌های توسعه و میزان آزمایش مورد نیاز کم‌هزینه باقی بمانند، می‌توانیم به تدریج پایه کد خود را بدون ایجاد وقفه در اهداف تجاری یا ایجاد خطرات اضافی بهبود بخشیم.

2. داستان های فنی را بر اساس اولویت های تجاری برنامه ریزی کنید

اگر درختی در جنگل افتاد، اما کسی آن را نشنید، آیا صدایی می آمد؟ اگر کد بدی در پروژه وجود داشته باشد، اما آن ماژول هرگز نیاز به تغییر ندارد، آیا بدهی فنی وجود دارد؟


من معتقدم که وقتی یک برنامه نویس نگاه کردن به یک ماژول قدیمی را ناخوشایند می یابد، این به خودی خود مشکل بزرگی نیست. خیلی بدتر این است که وقتی نیاز به اضافه کردن عملکرد جدید به این ماژول یا گسترش قبلی دارید، اتفاق می افتد. در مقایسه با ایجاد تغییرات در کدهای به خوبی نوشته شده، چنین کارهایی احتمال بیشتری دارد (و بیشتر از تخمین اصلی فراتر می رود) و دارای اشکالات بیشتری است. گاهی خیلی بیشتر. برای محافظت از خود در برابر این نوع مشکلات، سعی می‌کنیم بازسازی‌ها را به گونه‌ای برنامه ریزی کنیم که قبل از نوشتن عملکرد جدید در همان مکان انجام شوند.


اگر تغییرات عملکردی و بازسازی‌ها کوچک به نظر می‌رسند، می‌توان آنها را با هم انجام داد. اندازه تجربی انتخاب شده کاری که این رویکرد برای آن بهینه خواهد بود، 3 روز کار برای یک توسعه دهنده یا کمتر است. وقتی مشخص است که کار بیشتری وجود دارد، با حفظ رفتار فعلی و اجرای عملکرد جدید، به بازسازی مجدد تقسیم می شود.


بنابراین، ترتیب کار برای حذف بدهی فنی با ترتیب وظایف تجاری در عقب ماندگی تعیین می شود.


اصل "اولویت های کسب و کار" کاربرد دیگری نیز دارد. یکی از مشکلات رایجی که توسعه دهندگانی که تلاش می کنند خوب بنویسند از آن رنج می برند، دشواری اختصاص زمان به بهینه سازی عملکرد، بهبود قابلیت نگهداری یا موارد دیگری است که مستقیماً در برنامه کاری گنجانده نشده است. تقریباً همیشه نیاز تجاری به این پیشرفت ها وجود دارد. چه کسی نمی‌خواهد سیستم سریع‌تر، پایدارتر کار کند و نگهداری آن ارزان‌تر باشد؟ همه این مزایا را می توان ارزیابی کرد و بر اساس این ارزیابی، وظایف بهبود را می توان در کنار سایر موارد در لیست عقب مانده قرار داد.


بنابراین اگر می‌خواهید عملکرد را بهینه کنید، اما در عوض باید یک اشکال خسته‌کننده دیگر را برطرف کنید، شاید به سادگی نمی‌دانید که چگونه مزایای بهینه‌سازی را به زبانی توضیح دهید که صاحب محصول بتواند آن را بفهمد.

3. کد را تمیزتر از قبل بگذارید

تقریباً هر کدی، به جز کدی که اخیراً نوشته شده است، کمی از ایده فعلی زیبایی در زمینه سبک و معماری عقب است. هنگامی که شما نیاز به تغییر کد به عنوان بخشی از یک کار دارید، انجام تمام پیشرفت‌های ایمن که در ناحیه آسیب‌دیده ممکن است، عمل خوبی در نظر گرفته می‌شود. چه می تواند باشد؟

  • آوردن ماژول ها به سبک فعلی
  • تغییر نام متغیرهای داخلی به نام های قابل فهم تر.
  • پیاده سازی را با حفظ رفتار ساده کنید.
  • بازسازی های محلی که تغییرات بزرگ مقیاس را در سایر ماژول ها ایجاد نمی کنند.

انتظار می رود این پیشرفت ها کد را بهتر کند، اما هزینه توسعه یا آزمایش را به میزان قابل توجهی افزایش نمی دهد.


با توجه به این اصل، کیفیت کد به تدریج در پس‌زمینه افزایش می‌یابد، حتی در مکان‌هایی که هیچ بازسازی جداگانه‌ای در نظر گرفته نشده بود. علاوه بر این، هر چه بیشتر اوقات روی قسمت خاصی از سیستم کار کنیم، کد این قسمت بهتر است. تضاد خوبی با پروژه‌هایی که توسعه‌دهنده بیشترین زمان را روی قطعات با بدترین کد می‌گذارد.

4. مهم نیست چه اتفاقی می افتد، سیستم باید در حالت کار خود باقی بماند.

یکی از اصول اولیه SCRUM می گوید که در پایان هر دوی سرعت سیستم باید به حالت پایدار برسد.


"در پایان اسپرینت، افزایش باید آماده باشد، به این معنی که معیارهای آمادگی تیم اسکرام را برآورده می کند و آماده استفاده است. بدون توجه به تصمیم مالک محصول برای انتشار یا تأخیر آن، باید آماده استفاده باشد.»

هرگونه کار برای رفع بدهی فنی با رعایت این اصل انجام می شود.


دگرگونی های بزرگ لزوماً تجزیه می شوند تا هر مرحله فردی را بتوان در یک سرعت کامل کرد. برای مثال، سیستم ساخت را در دو مرحله تغییر دادیم (Angular 1.x: creeping webpack، lurking grunt)


ما با VCS بر اساس اصول نزدیک به gitflow کلاسیک کار می کنیم. توسعه در شاخه های ویژگی انجام می شود، آزمایش در آنجا انجام می شود. به عنوان یک قاعده، چنین شاخه ای بیش از یک سرعت دو هفته ای دوام نمی آورد. شاخه ای که عمر طولانی تری دارد تقریباً همیشه هزینه های اضافی را به همراه دارد.


تجربه ما به وضوح این الگو را تایید می کند. هر بار که نتوانستیم یک بازسازی بزرگ را در دو هفته کامل کنیم، درد و رنج بود. و هر چه کار طولانی تر بود و شاخه باز بیشتر عمر می کرد، کار کندتر پیش می رفت و مشکلات بیشتر می شد.


نیاز به فاصله چند قدمی از انتشار پایدار، یکی از دشوارترین و جالب‌ترین مشکلات مهندسی را ایجاد می‌کند - یافتن تجزیه بهینه برنامه‌های استراتژیک. تغییرات در مقیاس بزرگ را می توان به مراحل جداگانه و مستقل تقسیم کرد. توصیه می شود هر چه زودتر دریافت مزایا را شروع کنید. هرچه این تفکیک کار بهتر انجام شود، شانس تکمیل کار بیشتر است.

فرآیند ما چگونه به نظر می رسد

یک بار در هر نسخه، ما یک بررسی دقیق از عقب ماندگی فنی انجام می دهیم:

  • ما داستان های نامربوط را می بندیم (ارتباط از دست رفته، ساخته شده به عنوان بخشی از چیز دیگری، تکراری).
  • ما توضیحات را در جایی که دیدگاه مشکل تغییر کرده است به روز می کنیم.

زمانی که داستان‌های تجاری در افق ظاهر می‌شوند، یک تحلیل تکنیکال انجام می‌شود و تمام داستان‌های فنی که به اجرا کمک می‌کنند با داستان کسب‌وکار مرتبط می‌شوند.


در آماده سازی برای برنامه ریزی سرعت:

  • ما ارتباط بین داستان های فنی و تجاری را بررسی می کنیم.
  • ما همه باگ‌های مرتبط را به داستان‌های فنی مرتبط می‌کنیم که می‌توان آن‌ها را با هزینه کم در همان مکان برطرف کرد.

نحوه تشکیل بخش فنی بک لاگ

زمانی که نقش رهبری تیم را به عهده گرفتم، از هر توسعه دهنده و QA پرسیدم که بیشتر می خواهند چه پیشرفت هایی در محصول ایجاد کنند. بیشتر درخواست‌ها مربوط به بهبودهای فنی پلتفرم و بازسازی‌ها بود. همانطور که تجربه بیشتر نشان داد، تمام مشکلات فنی کلیدی محصول در این مجموعه آرزوها گنجانده شده است. بنابراین می توانید از این روش برای ایجاد سریع یک عقب ماندگی فنی از ابتدا یا دریافت یک ایده کلی از وضعیت بدهی فنی در یک پروژه جدید استفاده کنید.


پر کردن فعلی عقب ماندگی با وظایف فنی به دلیل اقداماتی است که در بالا توضیح داده شد و نیازی به تلاش یا تجزیه و تحلیل جداگانه ندارد. علاوه بر این، ایده های جدید برای بهبود فنی محصول به عقب ماندگی اضافه می شود. این کار توسط هر عضوی از تیم انجام می شود که چنین ایده ای داشته باشد. نکته اصلی در این مرحله این است که ایده را از دست ندهید. شفاف سازی و تعیین اولویت بعداً در طول برنامه ریزی کار اتفاق می افتد.

نتیجه گیری

  • بدهی فنی اجتناب ناپذیر است.
  • برای اکثر پروژه ها، حذف بدهی های فنی سرمایه گذاری خوبی است.
  • در صورت عدم رسیدگی به بدهی های فنی، سرعت توسعه به تدریج به صفر خواهد رسید.
  • وسوسه دور انداختن همه چیز و نوشتن دوباره می تواند پروژه شما را بکشد یا به طور جدی فلج کند.
  • مزایای حذف بدهی فنی باید در چارچوب مزایای تجاری باشد، در غیر این صورت این خطر وجود دارد که وظایف برای ایجاد عملکرد جدید همیشه مهمتر تلقی شوند.
  • وظایف حذف بدهی فنی ارزش مدیریت دارد. چنین وظایفی از نظر حسابداری، برنامه ریزی و اولویت بندی با سایر وظایف پروژه تفاوتی ندارند.
  • موقعیت‌هایی به‌طور مرتب پیش می‌آیند که می‌توانید بدهی‌های فنی را کاهش دهید و یک مشکل تجاری را در همان زمان ارزان‌تر از انجام جداگانه حل کنید. باید از این فرصت ها استفاده کرد.
  • کنوانسیون‌های سبک کد متفکرانه و به‌روزرسانی شده و فرآیندهای بازبینی به کاهش سرعت ظهور بدهی‌های فنی جدید کمک می‌کنند.
  • تکرارهای کوتاه به همان اندازه که برای توسعه عملکردهای جدید مفید هستند، برای refactoring نیز مفید هستند.
  • تیم معمولاً می داند بدهی فنی در کجای پروژه است و چقدر بد است. ارزش استفاده از این دانش را هنگام شکل‌دهی ایده از بدهی فنی پروژه دارد.

در پاسخ خود نه تنها به خانه های بزرگ، بلکه برخی خانه های دیگر که توانستم در مورد آنها اطلاعاتی به دست بیاورم نیز اشاره خواهم کرد.

1.استارکی - "زمستان در راه است". به این معنی که صلح و امنیت موقتی و توهمی است؛ باید همیشه برای مقابله با خطر کاملا مسلحانه آماده بلایا و جنگ بود. در وستروس، زمستان نه تنها فصلی است که سال ها طول می کشد، بلکه نمادی از آزمایش های دشوار است. و در واقع، این شعار نه تنها به خانه استارک ها، بلکه به کل کشور مربوط می شود.

2. لنیسترها- به نظر می رسد که خانه لنیستر دو شعار دارد، یکی تأیید کننده نشان بزرگ ارتش است -" صدای غرش مرا بشنو!"، دوم، معادل یک ضرب المثل است، اما مرتبه ای از قدر بیشتر از اولی به گوش می رسد -" لنیسترها همیشه بدهی های خود را می پردازنداولین شعار را می توان مستقیماً به نشان نسبت داد. نشان لنیستر نشان می دهد شیر بیداد می کند- "شیر خروشان" و شعار "غرش من را بشنو" مستقیماً آن را تکمیل می کند ، همچنین گواه این است که شیر پادشاه جانوران است و لنیسترها در جامعه جایگاه بالایی دارند. ضرب المثل "یک لنیستر همیشه بدهی های خود را می پردازد" در درجه اول با بانک آهن براووس مرتبط است: "بانک آهن همیشه آنچه را که باید دریافت کند." ثانیاً، "یک لنیستر همیشه بدهی های خود را پرداخت می کند" به این معنی است که لنیسترها هرگز کسانی را که به آنها کمک کرده اند فراموش نمی کنند و لنیسترها هرگز ظلمی را که در حق آنها شده است نمی بخشند.

3. باراتیون - "ما عصبانی هستیماوریس باراتیون (برادر نامشروع اگان اول فاتح) که آرگیلاک مغرور، آخرین ارباب سرزمین‌های طوفانی را کشته بود، شعار او را برگزید. اما این شعار بیش از حد تحت اللفظی ترجمه شد. ترجمه منطقی شعار" خشم عنصر ماست"با توضیح معنای آن" خشم عنصر ماست، یعنی: وقتی ما را عصبانی می کنید، ماهی را به دریا می اندازید، جایی که احساس خوبی دارد.«یعنی برای باراتئون‌ها، نمایش خشونت‌آمیز احساسات به بهای عقل سرد، رذیله نیست.

4. گریجوی - "ما نمی کاریم"گریجویزها بیشتر دزدان دریایی هستند. قلمرو زمین های آنها بر روی صخره ها و ماسه های برهنه واقع شده است. شعار این خانه یک پیام مستقیم است که گریجویز روی زمین کار نمی کند (که واقعا وجود ندارد). آنها نمی کارند. هر چیزی و رشد نمی کنند، از کسانی که محصول و غنایم دارند غارت می کنند، زیرا آنها محصول خود را ندارند و نمی توانند داشته باشند.

5. تارگرین - "آتش و خونشعار تارگرین را می توان به دو صورت تفسیر کرد. اولی - اگون فاتح و دو خواهرش، بر روی سه اژدها، وستروس را که "با او و شمشیر" نامیده می شود، تحت سلطه خود درآوردند. گزینه دوم - (که در بالا ذکر شد. غروب آفتاب) - " تارگرین ها اژدها زاده هستند، خون والریای باستانی و اژدها و همچنین امتیاز مصونیت در برابر آتش و اژدها را رام می کنند. هنگامی که تارگرین ها می گویند آتش و خون، به کسانی که ناگهان آن را فراموش کرده اند یادآوری می کنند."

6. آرینز - "قد بلند مثل شرف"از یک طرف، خانه آرین، به پیروی از جان آرین، به حفظ ناموس اهمیت می داد. جان نمی توانست مرعوب شود یا رشوه داده شود. و در سرزمین های وستروس غیرممکن بود کسی را پیدا کرد که بیشتر از حفظ ناموس اهمیت می داد. اما پس از مرگ جون، احتمالاً گزینه دیگری قابل استفاده تر است - تکبر اشرافی، تحقیر افراد با موقعیت پایین تر، آنها می گویند: "از ما کجایی."

7. تارلی - "اول در نبرد«خانه تارلی جنگجویان بزرگ و ژنرال های برجسته بسیاری را به دنیا آورده است، همانطور که این شعار تأیید می کند.

8. تالی - "خانواده، وظیفه، ناموسخانه تالی بیش از هر چیز به روابط خانوادگی خود وفادار است. وظیفه و افتخار بعد از آنها قرار می گیرد، اما خانواده در اولویت است. هاوس تالی از راب استارک در جنگ پنج پادشاه حمایت می کند که برای آن هزینه پرداخت کردند.

9. مارتلز - "تسلیم ناپذیر، خم ناپذیر، تسلیم ناپذیر". الگویی از غرور و انعطاف ناپذیری. مارتل ها تنها خانه ای هستند که تارگرین ها نتوانستند به زور آن ها را بگیرند. و از رفتار شخصیت های این خانه کاملاً مشخص است که آنها سرسخت و تزلزل ناپذیر هستند. آنها نیازی به آن ندارند. قوانین اربابان، تأیید پادشاهان، آنها به تنهایی هستند، اما به وضوح نشان می دهند که آماده تسلیم شدن نیستند.

10. تایرل - "با بزرگ شدن، قوی تر می شویم". شعار خانه تایرل توسط ارتش آنها تأیید شد، تعداد آنها با هیچ ارتشی در وستروس قابل مقایسه نبود. تیرل ها همچنین به شکل ثروتی که جمع کرده بودند "کوسن" داشتند. با توجه به اینکه کت بازوهای این خانه یک گل رز را به تصویر می‌کشد که می‌توان از یک جوانه کوچک تا یک بوته بزرگ گل رز مشابهی نیز با آن ترسیم کرد. بنابراین اعضای خانه تایرل، به تدریج قدرت جمع‌آوری کردند، موقعیت‌های خود را توسعه و تقویت کردند. اما همانطور که خود اولنا است. گفت، آنها اصلاً جنگجو نیستند.

11. بولتون -"تیغه های ما تیز هستنداین شعار بیشتر به عنوان هشداری برای دشمنان (و نه تنها) خانواده بولتون عمل می کند. نمایندگان این خانه شهرت تیره ای دارند؛ حتی در کتاب ها شنل هایی از پوست انسان می پوشیدند و دیوارهای قلعه خود را با آن تزئین می کردند. : "یک مرد برهنه هیچ رازی ندارد، اما یک مرد پوست کنده و حتی بیشتر از آن." "تیغه های ما تیز هستند" - ظاهراً می تواند به معنای تیغه هایی برای پوست کندن گوشت نیز باشد.

12. مورمونت - "اینجا ایستاده ایم". شعار، که، با توجه به sunsetsolitude، همچنین به اشتباه به روسی ترجمه شده است." اینجا ما ایستاده ایم - می تواند به معنای "اینجا سرزمین های ما هستند" باشد که به نوبه خود به معنای "جزیره ای کوچک اما مغرور است که هیچ کس را آزار نمی دهد، اما می تواند خودش را برای خودش تعریف کند. اینجا سرزمین های ما هستند، وقتی به اینجا آمدید این را به خاطر بسپارید، ما هشدار خواهد داد." یا می توان آن را به عنوان "در این مورد ایستاده ایم" ترجمه کرد - که نشانه مستقیمی از قدرت سرسختی مورمونت است."

13. فری - "شانه به شانه ایستاده ایم"فری ها برای پیوندهای خانوادگی و تخطی از این کلمه ارزش قائل بودند، چیزی که این شعار منعکس می کرد. از آنجا، والدر فری کینه ای غیرقابل توصیف نسبت به راب استارک داشت، که قول خود را برای ازدواج با دخترش زیر پا گذاشت، که منجر به عواقب غم انگیزی شد.

"یک لنیستر همیشه قرضهایش را ادا میکند." © FFG ( جیسون A. Engle)

لنیسترها همیشه بدهی های خود را می پردازند.(همچنین: "یک لنیستر همیشه قرضهایش را ادا میکند"گوش کن)) یک ضرب المثل رایج در هفت پادشاهی درباره خانه لنیستر و عبارت مورد علاقه تیریون لنیستر است. این شعار کمتر از شعار "رسمی" خانه، "صدای من را بشنو!" این عبارت معنایی دوگانه دارد. از یک طرف، این بدان معنی است که لنیسترها، به عنوان ثروتمندترین خانه در ایالت، همیشه آماده هستند تا صورت حساب ها را پرداخت کنند و از کسانی که به آنها کمک کردند تشکر کنند، یا در آینده وعده پاداش دهند - همیشه می توانید روی سخاوت و تعهد آنها حساب کنید. "شیرها". اما این شعار معنای دوم و تهدیدآمیز دیگری نیز دارد: لنیسترها توهین هایی را که به آنها وارد شده را فراموش نمی کنند و قطعا از متخلفان انتقام خواهند گرفت.

در دهان سرسی لنیستر، این ضرب المثل در سخنرانی علیه خود تیریون به گوش رسید - سرسی برادرش را به دسیسه هایی علیه او و جافری متهم کرد و سعی کرد آلایا اسیر شده را باج خواهی کند. بعداً، سرسی که خود را در راس دولت قرار داد، از همان کلمات استفاده کرد تا تصمیم خود را برای توقف پرداخت بدهی های عمومی به بانک آهنی براووس توجیه کند - لنیسترها همیشه بدهی های خود را می پردازند و این بدهی دیر یا زود پرداخت خواهد شد. او بعداً این جمله را در گفتگو با بالمن برچ و فالیسا استوکورث ذکر کرد و به آنها قول پاداش برای کمک آنها داد و سپس تیروشی را که سعی داشت او را فریب دهد با این جمله به جلاد فرستاد: "لنیسترها بدهی های خود را می پردازند و شما می پردازید". هم."

تایوین لنیستر در گفتگو با تیریون به این گفته اشاره کرد و نیاز به دادن هارنهال به پیتر بیلیش را توجیه کرد، زیرا خودش آرزو داشت. خود تیریون بلافاصله کلمات مربوط به بدهی ها را تکرار کرد و برای خدمات خود به عنوان دست، برای خود پاداش خواست. شی این جمله را تکرار کرد و قول تیریون را برای بازگرداندن او به خانه شهر یادآوری کرد. تیریون پس از اطلاع از فرار وسترلینگ ها به راب استارک، با خود فکر کرد که تایوین قطعا خائنان را مجازات خواهد کرد و این جمله را به خاطر آورد.

جیمی لنیستر او را به یاد اورسویک انداخت و سعی کرد او را با ثروت اغوا کند و بعداً که دستش را از دست داده بود، این جمله را با خود تکرار کرد و تشنگی او برای انتقام و میل به زندگی را تشدید کرد. او به برین از تارت گفت که او را به خاطر قدردانی از غرق شدن کشتی رابین ریگر در آغاز سفرشان از تجاوز نجات داد و دوباره این ضرب المثل را به خاطر آورد. او بعداً این کلمات را در گفتگو با واریس تکرار کرد و بدین ترتیب تمایل خود را برای آزادی تیریون توضیح داد. پس از برداشتن ادمور تالی از داربست دیوارهای ریورران، جیمی با خود فکر کرد: "لنیسترها دارند بدهی های خود را پرداخت می کنند و شما تنها سکه ای هستید که من باقی مانده است."

خود ادمور تالی پس از اطلاع از قتل ویلم لنیستر و تئون فری توسط ریکارد کارستارک، این جمله را به یاد آورد. روز بولتون، با صحبت از قصد خود برای ترک هارنهال و واگذاری آن به وارگو هاوت، گفت: "لنیسترها تنها کسانی نیستند که بدهی های خود را پرداخت می کنند." جیمی هنگام خداحافظی با پسران شجاع هنگام خروج از قلعه، این جمله را تکرار کرد و اشاره کرد که از آنها انتقام خواهد گرفت و سپس در بازگشت به قلعه برای برین، همان کلمات را خطاب به وارگو هات گفت که دریافت خواهد کرد. باج برای جیمی و برین

شیوه های مدیریت بدهی فن آوری در یک تیم واحد


حدود یک سال پیش، تیم ما از مرحله رشد سریع ویژگی به توسعه روان تر با تمرکز بر بهبود کیفیت حرکت کرد. در این مرحله، محصولات ما مقدار قابل توجهی از راه حل های غیربهینه، کدهای زشت و کتابخانه های قدیمی را جمع آوری کرده اند. برای همه اینها باید کاری انجام می شد.


تا به امروز، ما موفق به ایجاد فرآیندی شده‌ایم که مبارزه با بدهی فنی را قابل پیش‌بینی، بی‌درد و اجتناب‌ناپذیر می‌کند.


آنچه در نتیجه به دست آوردیم:

  • تیم خوشحال است. انتشار گذشته نگر به طور منظم شامل نکات مثبت در مورد بهبود فناوری و کاهش بدهی فنی است.
  • برای چندین نسخه سه ماهه متوالی، ما توانستیم عملکرد را بدون افزایش تعداد خطوط کد در پروژه افزایش دهیم. حذف کدهای غیر ضروری و ساده کردن آنچه مورد نیاز بود، اندازه پایه کد را برای عملکرد موجود کاهش داد. و این کاهش تقریباً در مقیاس با کد جدید که عملکرد جدید را پیاده سازی می کند همزمان بود.
  • در طول بازسازی و ارتقاء، محصول همیشه در حالت کار قرار دارد. هر دو هفته یک نسخه موقت کاملاً فعال را منتشر می کنیم.

بگذارید به شما بگویم که چگونه به این مهم دست یافتیم.

بدهی فنی چیست؟

تعریف کاری من از بدهی فنی مقدار کاری است که باید انجام شود تا یک پروژه با دیدگاه تیم در مورد آنچه عالی است مطابقت داشته باشد. توجه داشته باشید که بدهی فنی می تواند نه تنها به دلیل استفاده آزادانه از عصا در توسعه، بلکه به دلیل تغییر ایده ها در مورد زیبایی ایجاد شود. به عنوان مثال، شیوه های رایج صنعت تغییر کرده است. یا توسعه دهندگان عاشق OOP شدند و عاشق برنامه نویسی کاربردی شدند. یا چارچوب مد روز دیگر یک کیک نیست و پیدا کردن متخصصانی که دوست دارند روی آن بنویسند دشوار شده است.


با این حال، دلیل اصلی بدهی فنی آنتروپی در تمام تنوع آن است. تست‌های واحد غیرفعال، نظرات منسوخ شده که ارتباط خود را با کد از دست داده‌اند، تصمیم‌گیری‌های ناموفق معماری، اجرای ویژگی‌هایی که دیگر هیچ‌کس از آن‌ها استفاده نمی‌کند، پایه‌ای برای آینده‌ای که نیامده است، و خیلی، خیلی بیشتر.


نتیجه این است که ظهور بدهی فنی در هر پروژه طولانی مدت اجتناب ناپذیر است.

وقتی بدهی فنی مشکلی ندارد

چرا بدهی فنی بد است؟ هزینه توسعه بیشتر را به دلیل تعدادی از عوامل افزایش می دهد:

  • سرعت اجرای عملکرد جدید کاهش می یابد.
  • احتمال رگرسیون در هنگام اصلاح عیوب افزایش می یابد.
  • روند توسعه کمتر قابل پیش بینی و در نتیجه کمتر قابل مدیریت می شود.
  • روند معرفی یک توسعه دهنده جدید به پروژه در حال طولانی شدن است.

این ضرر گاهی اوقات "بهره بدهی فنی" نامیده می شود.


شرایطی وجود دارد که این ضررها ارزان تر از حذف بدهی فنی هستند:

  • پایان عمر پروژه نزدیک است. توجه داشته باشید، این پایان افزودن قابلیت‌ها نیست، بلکه لحظه‌ای است که می‌توانید از هدر دادن تلاش‌های برنامه‌نویس برای پشتیبانی نیز جلوگیری کنید. این دسته همچنین شامل نمونه های اولیه یک بار، دموهای یکباره برای نمایشگاه ها و غیره می شود.
  • ارزش زمان توسعه در حال حاضر بسیار بیشتر از انتظار در آینده است. اصلاحات فوری برای یک ضرب الاجل ثابت، استارت آپ هایی که از دور بعدی بودجه در حال اتمام هستند و غیره. در چنین مواردی، رفع بدهی فنی می تواند تا زمانی که گرمای لحظه ای سرد شود به تعویق بیفتد. پروژه هایی وجود دارند که از وضعیت اضطراری خارج نمی شوند، اما توصیه های این مقاله هنوز به آنها کمک نمی کند.

با بدهی فنی چه کنیم؟ رویکردهای ناموفق

رویکرد شماره 1. "زمان نداریم، نسخه باید دیروز ارسال شود"

میل به رسیدن به ضرب الاجل فردا به هر قیمتی به ضرر سرعت توسعه پس فردا.


گاهی اوقات یک سازه پیش ساخته ساخته شده از عصا یک انتخاب درست عینی است. در تمرین من، این به وضوح در هنگام ساخت نسخه های آزمایشی برای نمایشگاه ها بیان شد. تاریخ رویداد کاملاً مشخص است؛ اگر به موقع آن را برای یک نمایشگاه مهم انجام ندهید، تلاش بعدی یک سال دیگر خواهد بود. در این مورد، می توانید محصول را "خارج از دست خود" نمایش دهید، و با دقت از تمام اشکالات جلوگیری کنید. به عنوان یک مهندس، انجام چنین پروژه هایی برای من ناخوشایند است، اما عصا در آنها موجه است.


وقتی محصولی می سازید که عمر طولانی داشته باشد، همه چیز متفاوت است. رعایت مهلت به دلیل راه حل های فنی مشکوک لذت گرانی است. کل هزینه عبارت است از:

  1. از اجرای خود عصا،
  2. از جایگزینی بعدی آن با یک راه حل کامل،
  3. از رنج داشتن عصا در بین نکات قبلی.

نکته دوم خیلی راحت قابل دست کم گرفتن است و این خطر وجود دارد که اصلاً به سومی که گرانترین آن است فکر نکنید.


وقتی در یک کنفرانس با یکی از رهبران فناوری ملاقات می‌کنید، ممکن است معلوم شود که کابوس رفع اشکال بی‌پایان طرحی که از عصا ساخته شده بود، او را به این وضعیت رساند.


رویکرد شماره 2. "بله، اینجا باید همه چیز را دور بریزیم و دوباره بنویسیم"

هر چه وضعیت بدهی فنی بدتر باشد، وسوسه برای دفن کل کد پروژه و نوشتن دوباره همه چیز بیشتر می شود. این یکی از اشتباهات کلاسیک است که می تواند کل پروژه را نابود کند.


این موضوع به قدری در مقاله معروف جوئل اسپولسکی پوشش داده شده است که من هیچ فایده ای در ارائه استدلال های خودم نمی بینم.

رویکرد شماره 3. "ما در شب و آخر هفته اصلاح می کنیم تا مدیر متوجه نشود."

بحث در مورد نیاز به حذف بدهی فنی از نظر مزایای تجاری همیشه آسان نیست. تیم توسعه ممکن است وسوسه شود که لبه های ناهموار را دور بزند و یک بازسازی بزرگ را در محل شروع کند. این را می توان در ساعات غیر کاری، در مکث بین سایر وظایف، یا "در دم" سایر وظایف با افزایش تخمین ها انجام داد.


چه چیز بدی دارد؟ اوه، کلی چیز:

  • کاهش شفافیت اعتماد بین مدیریت و تیم را تضعیف می کند. اغلب تلاش‌های بعدی برای اصلاح وضعیت با اعمال انضباط و سفت کردن پیچ‌ها منجر به وخامت بیشتر کار تیمی می‌شود.
  • یک موقعیت ریشه‌دار که در آن اولویت‌های تیم و مدیریت متضاد هستند، باعث بی‌انگیختگی هر دو طرف می‌شود.
  • ثمرات بازسازی به روش های غیرقابل پیش بینی در محصول گنجانده می شود و در جایی که انتظار نمی رود باگ های رگرسیونی ایجاد می کند. در تیم های آگاه، این منجر به بار ناگهانی و برنامه ریزی نشده در QA می شود. در ناخودآگاه وارد تولید می شود و در آنجا خراب می شود.

پس از استفاده تیم از این دستور العمل، چشمان مدیریت شروع به تکان دادن می کند.

اصول ما

1. وظایف فنی را به عقب ماندگی عمومی اضافه کنید

تعدادی الگو در زندگی وظایف در پروژه ها وجود دارد:

  • کاری که در پس کار نباشد شانس کمتری برای وارد شدن به کار دارد.
  • یک کار بدون فرمول بندی واضح شانس کمتری برای ورود به کار دارد.
  • کاری که نمی توان آن را با درجه اطمینان بالایی تخمین زد، شانس کمتری برای ورود به کار دارد.
  • یک کار بزرگ بیشتر از یک کار کوچک در صف منتظر می ماند.

ماکسیم دوروفیف در "تکنیک صندوق ورودی خالی" خود به خوبی در مورد این موارد صحبت می کند.


برای جلوگیری از انباشت بدهی فنی، کار برای حذف آن باید با در نظر گرفتن اصول ذکر شده در بالا تکمیل شود.


همه وظایف، به جز کوچکترین آنها، در لیست عقب مانده قرار می گیرند. به این ترتیب آنها نه تنها در اوقات فراغت خود، بلکه به عنوان بخشی از کار برنامه ریزی شده نیز این فرصت را دارند. علاوه بر این، از دست دادن کامل چنین وظایفی دشوارتر است - به عقب افتاده بیشتر و دقیق تر از TODO ها در کد، تکه های کاغذ روی مانیتور، صفحات ویکی رها شده، دستمال های آغشته به چای با نمودارها و موارد دیگر نگاه می شود. منبع اطلاعات.

  • اگر یک TODO غیر پیش پا افتاده در کد وجود داشته باشد، حاوی پیوندی به وظیفه در بک لاگ است. ما مطابق با این اصل را در بررسی کد بررسی می‌کنیم و TODOهای پیچیده را بدون ارجاع نمی‌پذیریم.

    ممکن است درام پشت کامنت باشد.

    یک بار، در کنار چنین TODO نوشته شده بود: "عصا. صاحب محصول مرا مجبور به انجام آن کرد. در اسرع وقت حذف کنید."

  • وقتی یک توسعه‌دهنده متوجه می‌شود که مکانی نیاز به بازسازی دارد، مشکلی را در بک لاگ ایجاد می‌کند.
  • زمانی که یک توسعه دهنده تمایل به بهبود پلتفرم داشته باشد، وظیفه ای را در بک لاگ ایجاد می کند.
  • به محض اینکه اطمینان کافی در مورد حداقل گام های اولیه وجود داشته باشد، طرح های معماری درازمدت در قالب وظایف جداگانه در لیست عقب مانده قرار می گیرند.

تا زمانی که چنین تغییراتی از نظر هزینه‌های توسعه و میزان آزمایش مورد نیاز کم‌هزینه باقی بمانند، می‌توانیم به تدریج پایه کد خود را بدون ایجاد وقفه در اهداف تجاری یا ایجاد خطرات اضافی بهبود بخشیم.

2. داستان های فنی را بر اساس اولویت های تجاری برنامه ریزی کنید

اگر درختی در جنگل افتاد، اما کسی آن را نشنید، آیا صدایی می آمد؟ اگر کد بدی در پروژه وجود داشته باشد، اما آن ماژول هرگز نیاز به تغییر ندارد، آیا بدهی فنی وجود دارد؟


من معتقدم که وقتی یک برنامه نویس نگاه کردن به یک ماژول قدیمی را ناخوشایند می یابد، این به خودی خود مشکل بزرگی نیست. خیلی بدتر این است که وقتی نیاز به اضافه کردن عملکرد جدید به این ماژول یا گسترش قبلی دارید، اتفاق می افتد. در مقایسه با ایجاد تغییرات در کدهای به خوبی نوشته شده، چنین کارهایی احتمال بیشتری دارد (و بیشتر از تخمین اصلی فراتر می رود) و دارای اشکالات بیشتری است. گاهی خیلی بیشتر. برای محافظت از خود در برابر این نوع مشکلات، سعی می‌کنیم بازسازی‌ها را به گونه‌ای برنامه ریزی کنیم که قبل از نوشتن عملکرد جدید در همان مکان انجام شوند.


اگر تغییرات عملکردی و بازسازی‌ها کوچک به نظر می‌رسند، می‌توان آنها را با هم انجام داد. اندازه تجربی انتخاب شده کاری که این رویکرد برای آن بهینه خواهد بود، 3 روز کار برای یک توسعه دهنده یا کمتر است. وقتی مشخص است که کار بیشتری وجود دارد، با حفظ رفتار فعلی و اجرای عملکرد جدید، به بازسازی مجدد تقسیم می شود.


بنابراین، ترتیب کار برای حذف بدهی فنی با ترتیب وظایف تجاری در عقب ماندگی تعیین می شود.


اصل "اولویت های کسب و کار" کاربرد دیگری نیز دارد. یکی از مشکلات رایجی که توسعه دهندگانی که تلاش می کنند خوب بنویسند از آن رنج می برند، دشواری اختصاص زمان به بهینه سازی عملکرد، بهبود قابلیت نگهداری یا موارد دیگری است که مستقیماً در برنامه کاری گنجانده نشده است. تقریباً همیشه نیاز تجاری به این پیشرفت ها وجود دارد. چه کسی نمی‌خواهد سیستم سریع‌تر، پایدارتر کار کند و نگهداری آن ارزان‌تر باشد؟ همه این مزایا را می توان ارزیابی کرد و بر اساس این ارزیابی، وظایف بهبود را می توان در کنار سایر موارد در لیست عقب مانده قرار داد.


بنابراین اگر می‌خواهید عملکرد را بهینه کنید، اما در عوض باید یک اشکال خسته‌کننده دیگر را برطرف کنید، شاید به سادگی نمی‌دانید که چگونه مزایای بهینه‌سازی را به زبانی توضیح دهید که صاحب محصول بتواند آن را بفهمد.

3. کد را تمیزتر از قبل بگذارید

تقریباً هر کدی، به جز کدی که اخیراً نوشته شده است، کمی از ایده فعلی زیبایی در زمینه سبک و معماری عقب است. هنگامی که شما نیاز به تغییر کد به عنوان بخشی از یک کار دارید، انجام تمام پیشرفت‌های ایمن که در ناحیه آسیب‌دیده ممکن است، عمل خوبی در نظر گرفته می‌شود. چه می تواند باشد؟

  • آوردن ماژول ها به سبک فعلی
  • تغییر نام متغیرهای داخلی به نام های قابل فهم تر.
  • پیاده سازی را با حفظ رفتار ساده کنید.
  • بازسازی های محلی که تغییرات بزرگ مقیاس را در سایر ماژول ها ایجاد نمی کنند.

انتظار می رود این پیشرفت ها کد را بهتر کند، اما هزینه توسعه یا آزمایش را به میزان قابل توجهی افزایش نمی دهد.


با توجه به این اصل، کیفیت کد به تدریج در پس‌زمینه افزایش می‌یابد، حتی در مکان‌هایی که هیچ بازسازی جداگانه‌ای در نظر گرفته نشده بود. علاوه بر این، هر چه بیشتر اوقات روی قسمت خاصی از سیستم کار کنیم، کد این قسمت بهتر است. تضاد خوبی با پروژه‌هایی که توسعه‌دهنده بیشترین زمان را روی قطعات با بدترین کد می‌گذارد.

4. مهم نیست چه اتفاقی می افتد، سیستم باید در حالت کار خود باقی بماند.

یکی از اصول اولیه SCRUM می گوید که در پایان هر دوی سرعت سیستم باید به حالت پایدار برسد.


"در پایان اسپرینت، افزایش باید آماده باشد، به این معنی که معیارهای آمادگی تیم اسکرام را برآورده می کند و آماده استفاده است. بدون توجه به تصمیم مالک محصول برای انتشار یا تأخیر آن، باید آماده استفاده باشد.»

هرگونه کار برای رفع بدهی فنی با رعایت این اصل انجام می شود.


دگرگونی های بزرگ لزوماً تجزیه می شوند تا هر مرحله فردی را بتوان در یک سرعت کامل کرد. به عنوان مثال، ما سیستم مونتاژ را در دو مرحله تغییر دادیم ()


ما با VCS بر اساس اصول نزدیک به gitflow کلاسیک کار می کنیم. توسعه در شاخه های ویژگی انجام می شود، آزمایش در آنجا انجام می شود. به عنوان یک قاعده، چنین شاخه ای بیش از یک سرعت دو هفته ای دوام نمی آورد. شاخه ای که عمر طولانی تری دارد تقریباً همیشه هزینه های اضافی را به همراه دارد.


تجربه ما به وضوح این الگو را تایید می کند. هر بار که نتوانستیم یک بازسازی بزرگ را در دو هفته کامل کنیم، درد و رنج بود. و هر چه کار طولانی تر بود و شاخه باز بیشتر عمر می کرد، کار کندتر پیش می رفت و مشکلات بیشتر می شد.


نیاز به فاصله چند قدمی از انتشار پایدار، یکی از دشوارترین و جالب‌ترین مشکلات مهندسی را ایجاد می‌کند - یافتن تجزیه بهینه برنامه‌های استراتژیک. تغییرات در مقیاس بزرگ را می توان به مراحل جداگانه و مستقل تقسیم کرد. توصیه می شود هر چه زودتر دریافت مزایا را شروع کنید. هرچه این تفکیک کار بهتر انجام شود، شانس تکمیل کار بیشتر است.

فرآیند ما چگونه به نظر می رسد

یک بار در هر نسخه، ما یک بررسی دقیق از عقب ماندگی فنی انجام می دهیم:

  • ما داستان های نامربوط را می بندیم (ارتباط از دست رفته، ساخته شده به عنوان بخشی از چیز دیگری، تکراری).
  • ما توضیحات را در جایی که دیدگاه مشکل تغییر کرده است به روز می کنیم.

زمانی که داستان‌های تجاری در افق ظاهر می‌شوند، یک تحلیل تکنیکال انجام می‌شود و تمام داستان‌های فنی که به اجرا کمک می‌کنند با داستان کسب‌وکار مرتبط می‌شوند.


در آماده سازی برای برنامه ریزی سرعت:

  • ما ارتباط بین داستان های فنی و تجاری را بررسی می کنیم.
  • ما همه باگ‌های مرتبط را به داستان‌های فنی مرتبط می‌کنیم که می‌توان آن‌ها را با هزینه کم در همان مکان برطرف کرد.

نحوه تشکیل بخش فنی بک لاگ

زمانی که نقش رهبری تیم را به عهده گرفتم، از هر توسعه دهنده و QA پرسیدم که بیشتر می خواهند چه پیشرفت هایی در محصول ایجاد کنند. بیشتر درخواست‌ها مربوط به بهبودهای فنی پلتفرم و بازسازی‌ها بود. همانطور که تجربه بیشتر نشان داد، تمام مشکلات فنی کلیدی محصول در این مجموعه آرزوها گنجانده شده است. بنابراین می توانید از این روش برای ایجاد سریع یک عقب ماندگی فنی از ابتدا یا دریافت یک ایده کلی از وضعیت بدهی فنی در یک پروژه جدید استفاده کنید.


پر کردن فعلی عقب ماندگی با وظایف فنی به دلیل اقداماتی است که در بالا توضیح داده شد و نیازی به تلاش یا تجزیه و تحلیل جداگانه ندارد. علاوه بر این، ایده های جدید برای بهبود فنی محصول به عقب ماندگی اضافه می شود. این کار توسط هر عضوی از تیم انجام می شود که چنین ایده ای داشته باشد. نکته اصلی در این مرحله این است که ایده را از دست ندهید. شفاف سازی و تعیین اولویت بعداً در طول برنامه ریزی کار اتفاق می افتد.

نتیجه گیری

  • بدهی فنی اجتناب ناپذیر است.
  • برای اکثر پروژه ها، حذف بدهی های فنی سرمایه گذاری خوبی است.
  • در صورت عدم رسیدگی به بدهی های فنی، سرعت توسعه به تدریج به صفر خواهد رسید.
  • وسوسه دور انداختن همه چیز و نوشتن دوباره می تواند پروژه شما را بکشد یا به طور جدی فلج کند.
  • مزایای حذف بدهی فنی باید در چارچوب مزایای تجاری باشد، در غیر این صورت این خطر وجود دارد که وظایف برای ایجاد عملکرد جدید همیشه مهمتر تلقی شوند.
  • وظایف حذف بدهی فنی ارزش مدیریت دارد. چنین وظایفی از نظر حسابداری، برنامه ریزی و اولویت بندی با سایر وظایف پروژه تفاوتی ندارند.
  • موقعیت‌هایی به‌طور مرتب پیش می‌آیند که می‌توانید بدهی‌های فنی را کاهش دهید و یک مشکل تجاری را در همان زمان ارزان‌تر از انجام جداگانه حل کنید. باید از این فرصت ها استفاده کرد.
  • کنوانسیون‌های سبک کد متفکرانه و به‌روزرسانی شده و فرآیندهای بازبینی به کاهش سرعت ظهور بدهی‌های فنی جدید کمک می‌کنند.
  • تکرارهای کوتاه به همان اندازه که برای توسعه عملکردهای جدید مفید هستند، برای refactoring نیز مفید هستند.
  • تیم معمولاً می داند بدهی فنی در کجای پروژه است و چقدر بد است. ارزش استفاده از این دانش را هنگام شکل‌دهی ایده از بدهی فنی پروژه دارد.

دسته بندی ها

مقالات محبوب

2024 "kingad.ru" - بررسی سونوگرافی اندام های انسان