مهندسی نرمافزار در یک کسبوکار نوپا یا استارتاپ به مراتب متفاوتتر از مهندسی نرمافزار به معنای عرف آن است. با توجه به عدم قطعیتی در آیندهٔ یک استارتاپ وجود دارد، مهندسی محصول، که معمولاً یک وبسایت یا اپ موبایل است، با چالشهای مختلفی روبهرو خواهد شد که در همین راستا در این پست قصد داریم با عواملی آشنا شویم که تا حد ممکن از بروز آنها در یک استارتاپ میباید جلوگیری به عمل آید.
بلند گام برداشتن برای ایدهای که آیندهاش اصلاً معلوم نیست
یکی از اشتباهات فاحشی که بنیانگذاران کسبوکارهای نوپا مرتکب میشوند اصطلاحاً Premature Scaling نامیده میشود بدان معنا که وقتی هنوز سهم بازار کسبوکارمان مشخص نیست و دقیقاً نمیدانیم میزان باری که قرار است روی سرورها بیاید چهقدر است و در یک کلام دید روشنی نسبت به میزان استقبال از ایدهٔ خود نداریم، اِستک نرمافزاری خود را به گونهای انتخاب کنیم که مناسب یک محصول جاافتاده با هزاران کاربر باشد.
به عنوان یک مثال کاربردی، میتوان به استفاده از میکروسرویسها به عنوان بکاند نرمافزاری یک استارتاپ اشاره کرد. در حقیقت، شرکت بزرگی همچون نتفلیکس با میلیونها کاربری که در هر ثانیه با وبسایت/اپلیکیشن این شرکت تعامل برقرار میکنند به درستی به سَمت استفاده از میکروسرویسها رفته است اما برای یک ایدهٔ خام که هنوز معلوم نیست با اقبال عمومی مواجه خواهد شد یا خیر، مهاجرت به سمت این معماری نرمافزاری کاری صحیحی نیست.
Premature Scaling منابع مادی، فکری و انسانی استارتاپها را هدر میدهد. به عنوان مثال، وقتی به سَمت فناوریهایی میرویم که استفاده از آنها در یک کسبوکار تازهتأسیس لزومی ندارد، بالاجبار مجبور به استخدام نیروی فنی آن حوزه میشویم و همین مسئله منجر به هدر رفتن منابع مالی خواهد شد.
یکی از دلایلی که شاید بتوان در رابطه به این خطای فاحش برشمرد که برخی بنیانگذاران مرتکب میشوند، مهندسانی است که پیش از این در شرکتهای به اصطلاح Large Scale کدنویسی کردهاند و همواره بر این باورند که باید در حین توسعهٔ نرمافزار یک دید بلندمدت داشت و همین میشود که همان استراتژیهایی که برای توسعهٔ نرمافزار در یک شرکت بزرگ به کار میگیرند را در توسعهٔ یک محصول استارتاپی نیز استفاده میکنند. از سوی دیگر، گام برداشتن در لبهٔ تکنولوژی حس خوبی به اعضای تیم میدهد! آن کجا که وقتی در جلسهای اقدام به معرفی محصول استارتاپی خود میکنیم بگوییم که «ایدهٔ ما روی اِستک LAMP برای بکاند پیاده شده و در توسعهٔ آن از معماری به اصطلاح Monolithic استفاده شده است.» و این کجا که بگوییم «در توسعهٔ محصول از زبانهای مختلفی همچون اسکالا، سیپلاسپلاس، جاوااسکریپت و … استفاده شده و معماریمان مبتنی بر Microservice است.»
به عنوان دلیل دیگر رفتن استارتاپها به سمت و سوی فناوریهای مختلف این است که ابتدا به ساکن بنیانگذاران، مدیران و توسعهدهندگان دیدی بسیار خوشبینانه نسبت به آیندهٔ ایدهٔ خود دارند و همین میشود تا این ایماژ در ایشان شکل میگیرد که دیر یا زود اپلیکیشن باید به اصطلاح Scale شود و چه بهتر که از همین ابتدای کار طوری به پیادهسازی آن بپردازیم که کمترین بدهی فنی ایجاد گشته و بعداً مجبور به دوبارهکاری نشویم.
استفاده از فناوریهایی که آزمایش خود را پس ندادهاند
یکی دیگر از اشتباهاتی که برخی کسبوکارهای نوپا مرتکب میشوند این است که بیش از حد روی فناوریهای جدیدی تکیه میکنند که هنوز آزمایش خود را پس ندادهاند. به عنوان مثال، امروزه میبینیم که زبانها، لایبرریها و فریمورکهای مختلفی به بازار عرضه میشوند که فرآیند توسعهٔ نرمافزار را نسبت به سایر فناوریهای قدیمیتر آسانتر و سریعتر میکنند اما این الزاماً بدان معنا نیست که باید شروع به استفاده از آنها کنیم!
یکی از دلایل رخداد این معضل آن است که مهندسین نرمافزار (توسعهدهندگان) برای آنکه دائم روزمهٔ خود را آپدیت نگاه دارند، متمایل به شروع یادگیری و سپس استفاده از فناوریهای جدید هستند تا از قافلهٔ دیگر فعالان این صنعت عقب نمانند و این قضیه زمانی پررنگتر میشود که انتخاب اِستک نرمافزاری بر عهدهٔ ایشان باشد تا جایی که این احتمال وجود دارد ایشان بدون داشتن نیمنگاهی به آینده کار، دست به انتخاب فناوریهای جدیدی بزنند که در حال حاضر تِرِند شدهاند اما در عین حال این احتمال هم وجود دارد که در آیندهای نزدیک مخاطب خود را از دست بدهند.
همچنین در ارتباط با این مقوله لازم به یادآوری است که گاهی اوقات دولوپرها دست به انتخاب فناوریهای جدید نمیزنند اما در عین حال انتخاب فناوریها توسط ایشان ممکن است در آینده استارتاپ را با مشکلات عدیدهای مواجه سازد. به طور مثال، شکی در این نیست که روبی زبانی به معنای واقعی کلمه شیئگرا و ساختاریافته است و فریمورک معروف این زبان (RoR) ساخت نمونهٔ اولیه و پروتوتایپ را بسیار آسان میکند؛ اما توجه به این نکته ضروری است که یافتن دولوپرهای حرفهای این زبان در فضای کنونی کشور کار چندان آسانی نیست و چنانچه ایدهٔ استارتاپی ما موفق گردد و نیاز به توسعهٔ محصول خود داشته باشیم، یا باید هزینهٔ گزافی به منظور استخدام دولوپرهای حرفهای این زبان متحمل شویم و یا خود دست به تربیت نیروی انسانی ماهر بزنیم که هر کدام از این رویکردها چالشهای خاص خود را دارا است. در یک کلام، انتخاب اِستک نرمافزاری باید به گونهای باشد که با کمترین هزینه، بیشترین راندمان را برای تیم به ارمغان آورد.
انتخابهای نادرست در حوزهٔ منابع انسانی
منابع انسانی (یا به قول برخی متخصصین این حوزه، سرمایههای انسانی) ارتباط تنگاتنگی با موفقیت یا عدم موفقیت یک کسبوکار نوپا دارد و پیش از این به کرات در مورد اهمیت این موضوع در مقالات مختلفی نکاتی را گوشزد کردهایم که برخی از آنها عبارتند از:
– مقایسهای مابین خاکشیر و انگیزهٔ افرادی که وارد بازار کار میشوند!
– استارتاپ شما شبیه به یک ظرف میوه است، در انتخاب میوهها شدیداً دقت کنید!
– تأثیر نیروی انسانی به اصطلاح A Player در موفقیت استارتاپها
نیاز به توضیح نیست که اکثر استارتاپها با منابع مالی محدود روبهرو هستند و همین مسئله منجر بدین میگردد تا نتوانند دولوپرهای ارشد که در این صنعت سالها است کد زدهاند و کسب تجربه نمودهاند را به استخدام خود درآورند و التبع بیشتر دولوپرهای تازهکار که درک صحیحی از معماری نرمافزار ندارند را به خود جذب کنند.
از ابعاد مختلفی میتوان مابین یک دولوپر تازهکار با یک دولوپر باتجربه تمایز قائل شد که یکی از آنها دیدی است که ایشان نسبت به توسعهٔ محصول دارند. اکثر دولوپرهای تازهکار صرفاً یک محصول را میسازند اما اگر همان محصول زیر دست یک دولوپر باتجربه قرار گیرد، وی به خوبی میداند که چگونه محصولی را توسعه دهد که در آینده قابلنگهداری باشد. ایشان همچنین جدای از فرآیند توسعهٔ محصول، خوب میدانند که چگونه دست به حل مسئله بزنند.
در پروسهٔ جذب نیرو، علاوه بر مهارتهای فنی که اصطلاحاً تحت عنوان Hard Skills شناخته میشوند، نیاز است تا توجه ویژهای نیز نسبت به سایر مهارتها همچون تعامل با سایرین، کار گروهی، هوش هیجانی، تفکر انتقادی و … نیز داشته باشیم که در قالب Soft Skills شناخته میشوند که از دید برخی مدیران منابع انسانی اهمیت مهارتهای نوع دوم به مراتب از مهارتهای فنی مهمتر است!
جمعبندی
پیش از این هم اشاره کردیم که استارتاپ نوعی کسبوکار است که با عدم قطعیت روبهرو است و برخی آمار و ارقام حاکی از آنند که بیش از ٪۹۰ آنها طی یک دهه با شکست مواجه میشوند. همواره برخی استراتژیها هستند که فارغ از نوع صنعتی که به آن ورود پیدا کردهایم منجر به عدم موفقیت میشوند.
اساساً وقتی با عدم قطعیت روبهرو هستیم، بهتر آن است که در حوزههای مختلف کسبوکار خود سیاستهایی را دنبال نماییم که از کمترین ریسک ممکن برخوردارند. به عبارتی، با برخورداری از منتورینگ مناسب میتوانیم از تجربیات متخصصینی که قبلاً مسیر پیش روی ما را پیمودهاند استفاده کنیم. به طور مثال، استفاده از تخصص دولوپرهایی که در استارتاپهای مختلف حضور داشتهاند و به طور عملی با چالشهایش مواجه شدهاند ما را از انتخاب مسیرهایی که منجر به شکست میشوند دور ساخته و کمک میکند تا زیرساخت نرمافزاری کسبوکار خود را به گونهای پایهریزی کنیم که هم در کوتاهمدت نیازمان را مرتفع سازد و هم در یک دید بلندمدت قابلتوسعه باشد.