Tohum

Playbook توسعه محصول IoT از ابتدا تا انتها – مرحله 1: نیازمندی‌های ذی‌نفع و سیستم

تصویرسازی: صدای سه ذی‌نفع در یک فهرست نیازمندی واحد به هم می‌رسد

اولِ اولی‌ها!

بخش قبلی: مرحله 0

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

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

در این فصل بررسی می‌کنیم ثبت نیازمندی‌های ذی‌نفع و سیستم یعنی چه: چرا این مرحله مهم است، چه نوع نیازمندی‌هایی را باید در نظر بگیرید و چگونه آن‌ها را شفاف مستند کنید. مثال‌هایی هم می‌آوریم که نشان می‌دهد دقیق‌کردن نیازمندی‌ها از اول چگونه سرنوشت یک پروژه IoT را رقم می‌زند.

نیازمندی‌ها دقیقاً چه هستند؟

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

نیازمندی‌ها چند گونه دارند که هر کدام جنبه متفاوتی از محصول را پوشش می‌دهند:

هر دسته را با جزئیات مرور می‌کنیم. فعلاً به یاد داشته باشید یک نیازمندی خوب روشن، مشخص و قابل آزمون است. «دستگاه باید عالی باشد» به تیم مهندسی‌تان کمکی نمی‌کند. «دستگاه باید دما را از 0°C تا 50°C با دقت ±0.5°C اندازه بگیرد» کمک می‌کند: هر خواننده‌ای دقیقاً می‌داند چه انتظاری هست، و بعداً می‌توانید تست کنید دستگاه برآورده‌اش می‌کند یا نه. همین سطح از وضوح را هدف بگیرید.

نیازمندی‌های عملکردی

نیازمندی‌های عملکردی قابلیت‌ها، کارکردها و رفتارهای مشخص محصول IoTتان را توصیف می‌کنند—چیزی که سیستم باید انجام دهد. اگر کسی بپرسد «دستگاهت چه کار می‌کند؟»، جواب خلاصه‌ای از نیازمندی‌های عملکردی‌اش است: اعمال و خدماتی که دستگاه به کاربر یا سیستم‌های دیگر ارائه می‌دهد.

برای یک دستگاه IoT، نیازمندی‌های عملکردی اغلب شامل این‌هاست:

یک مثال مشخص. فرض کنید یک سنسور دمای IoT ساده برای خانه هوشمند می‌سازید. چند نیازمندی عملکردی می‌تواند این‌ها باشد:

هر کدام چیزی را توصیف می‌کند که سیستم انجام می‌دهد، معمولاً با قالب «دستگاه باید…» و یک رفتار مشخص پس از آن. این قالب راستی‌آزمایی بعدی را سرراست می‌کند: یا دستگاه X را طبق مشخصه انجام می‌دهد یا نه.

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

نیازمندی‌های غیرعملکردی

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

ملاحظات غیرعملکردی رایج برای یک دستگاه IoT:

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

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

نیازمندی‌های رابط

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

جنبه‌هایی که نیازمندی‌های رابط پوشش می‌دهند:

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

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

درگیرکردن ذی‌نفعان از ابتدا

همه این نیازمندی‌ها از کجا می‌آیند؟ از هوای نازک که نه—از ذی‌نفعانتان جمع می‌کنید: هر کسی که در موفقیت محصول سهمی دارد. این شامل کاندیداهای بدیهی، یعنی کاربران نهایی و مشتریان است، اما همچنین بازاریابی، فروش، مهندسان رشته‌های مختلف (سخت‌افزار، نرم‌افزار، firmware)، مدیران پروژه و متخصصان قانونی یا انطباق. هر گروه نیازها و نگرانی‌های خودش را دارد و نیازمندی‌ها باید هر دیدگاه حیاتی را ثبت کنند.

ذی‌نفعانتان را شناسایی کنید و زود درگیرشان کنید، چون آن‌ها تعریف می‌کنند «موفقیت» چه شکلی است. بازاریابی ممکن است بگوید: «باید زیر 50 دلار باشد و با یک شارژ یک سال کار کند—مشتریان ما همین را انتظار دارند.» کاربران نهایی (یا یک پرسونای نماینده) ممکن است نیاز داشته باشند راه‌اندازی ساده و نگه‌داری حداقلی باشد. تیم نرم‌افزار ممکن است برای یکپارچه‌سازی با یک پلتفرم ابری به یک API مقاوم نیاز داشته باشد. متخصص امنیت روی رمزنگاری و احراز هویت اصرار خواهد کرد. یک مسئول انطباق درباره حدود انتشار رادیویی FCC یا استانداردهای ایمنی الکتریکی یادآوری می‌کند. همه این ورودی‌ها نیازمندی می‌شوند.

آشکارکردن این نیازها حالا بسیار ارزان‌تر از بعداً است. جلسات طوفان فکری، کارگاه‌ها یا مصاحبه‌های ساده با هر گروه ذی‌نفع، فهرستی جامع می‌سازد. این کار را در خلاء انجام ندهید: نیازمندی‌ای که بدون ورودی ذی‌نفع نوشته شود می‌تواند هدف را از دست بدهد. تیم پشتیبانی مشتری را رد کنید و ممکن است «دستگاه باید مکانیزم ریست برای بازگردانی تنظیمات کارخانه ارائه دهد» را از دست بدهید—که برای عیب‌یابی مهم است. تولید را رد کنید و ممکن است طراحی‌ای مشخص کنید که برای تولید در حجم، زیادی گران یا زیادی سخت است.

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

با انباشته‌شدن این ورودی‌ها، تصویر نیازمندی‌های عملکردی، غیرعملکردی و رابط لازم شکل می‌گیرد. این مرحله در اصل پل‌زدن شکاف بین یک ایده امیدبخش و یک محصول روشن‌تعریف‌شده است: آرزوهای مه‌آلود («باید ارزان باشد! باید امن باشد! باید X و Y را انجام دهد!») با حرف‌زدن با آدم‌های درست و پرسیدن پرسش‌های درست، به نیازمندی‌های دقیقی تبدیل می‌شوند که مهندس‌ها بتوانند با آن‌ها کار کنند.

گردآوری نیازمندی‌ها یک ورزش تیمی است. بازیگران کلیدی را به اتاق بیاورید—به‌معنای واقعی یا مجازی—و بجنبانید که دستگاه باید چه کار کند. هر چه دیدگاه‌های بیشتری حالا وارد کنید، نقاط کور کمتری به مرحله‌های بعد می‌برید.

مستندسازی و ردیابی نیازمندی‌ها

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

هر قالبی که انتخاب کنید، هر نیازمندی را بدون ابهام و قابل آزمون نگه دارید. از کلمات مبهم مثل «بهینه»، «کاربرپسند» یا «کافی» بدون کمی‌سازی دوری کنید؛ از اعداد مشخص یا معیارهای روشن استفاده کنید. به‌جای «عمر باتری باید طولانی باشد» بنویسید «عمر باتری باید با یک بار شارژ و آپلود ساعتی داده حداقل 12 ماه باشد.» این هدفی است که طراحان می‌توانند به سمتش کار کنند، بدون حدس‌زدن.

یک عادت مفید دیگر: هر نیازمندی را با روش راستی‌آزمایی آینده‌اش برچسب بزنید—از حالا فکر کنید چگونه ثابت می‌کنید محصول برآورده‌اش می‌کند. روش‌های راستی‌آزمایی رایج:

برچسب‌زدن روش راستی‌آزمایی از ابتدا—بعضی تیم‌ها یک ستون «روش راستی‌آزمایی» به سند نیازمندی‌ها اضافه می‌کنند—هر نیازمندی را وادار می‌کند طوری بیان شود که بعداً قابل اثبات باشد. همچنین از آن لحظه فاز تست جلوگیری می‌کند که کسی بپرسد: «صبر کنید، چطور بررسی کنیم به این هدف مبهم رسیده‌ایم یا نه؟»

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

خلاصه: نیازمندی‌ها را روی کاغذ یادداشت ننویسید و به بهترین حالت امیدوار نباشید. آن‌ها را شفاف و ساخت‌یافته بنویسید—یک سند رسمی یا یک بک‌لاگ خوش‌نگه‌داری. وضوح حالا از سردرگمی بعد جلوگیری می‌کند، و برنامه‌ریزی زودهنگام راستی‌آزمایی، راه را برای فاز تست هموارتر می‌کند.

جمع‌بندی مرحله 1

یک بار دیگر، قبل از رفتن جلو: تغییر دیرهنگام یک نیازمندی مثل تصمیم به اضافه‌کردن یک اتاق خواب بعد از ساخته‌شدن خانه است—ممکن است، اما دردناک و گران. در IoT، «دردناک و گران» می‌تواند یعنی طراحی مجدد کامل PCB چون یک سنسور جا افتاده، یا یک بازنگری بزرگ firmware چون یک کاربرد در نظر گرفته نشده بود. می‌تواند یعنی تأخیرها، انحرافهای بودجه، یا در بدترین حالت، محصولی که کاربران و ذی‌نفعانش را ناامید می‌کند.

سرمایه‌گذاری تلاش حالا برای ثبت نیازمندی‌های ذی‌نفع و سیستمِ روشن، نقشه و راهنمای پروژه را می‌سازد. نیازمندی‌ها نقطه مرجع همه درگیران می‌شوند:

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

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

با مجموعه‌ای محکم از نیازمندی‌های ذی‌نفع و سیستم در دست، آماده‌اید جلو بروید و چیزی طراحی و بسازید که آن‌ها را برآورده کند. و در این کار، نقشه را همراه دارید—اولِ اولی‌ها، درست انجام‌شده.