کدنویسی کابویی (به انگلیسی: Cowboy coding) یک نوع توسعه نرمافزاری است که برنامهنویسان به شکل خودمختار بر فرایند توسعه کنترل دارند. شامل زمانبندی پروژه، زبان برنامهنویسی، الگوریتمها، ابزارها، چهارچوبهای نرمافزاری و سبک کدنویسی.
یک کدنویس کابویی میتواند یک توسعهدهنده تنها یا عضوی از گروه توسعهدهندگان است که با فرایندها و نظم کمی کار میکنند. معمولاً زمانی اتفاق میافتد که کاربران تجاری مشارکت کمی داشته باشند یا مدیریت، مرزهایی تعیین کند که فقط جنبههای غیر فنی پروژه مانند اهداف هیئت مدیره، زمانبندی، چشمانداز و ظواهر («چه» کاری انجام دادن در برابر «چطور» انجام دادن) را تحت کنترل میگیرد.
از «کدنویسی کابویی» عمدتاً به عنوان یک کلمه تحقیرآمیز در برابر راهکارهای ساختیافتهتر توسعه نرمافزار استفاده میشود.
در کدنویسی کابویی، نبود راهکارهای مرسوم مدیریت پروژه نرمافزاری میتواند (و نه الزاماً) نشانهای برای کوچک بودن پروژه یا ذات تجربی آن باشد. پروژههای نرمافزاری با این مشخصات میتواند نشانه:
عدم وجود تخمین زمانی یا برنامه اجرایی میتواند منجر به تأخیر در پروژه شود. ضربالاجلهای ناگهانی یا فشارها برای انتشار نرمافزار میتواند باعث استفاده از تکنیکهای «سریع و کثیف» که بعدها نیازمندها بازنگری است میشود.
کدنویسی کابویی میتواند در میان علاقهمندان یا سطح دانشجویی که توسعهدهندگان عمدتاً با تکنولوژیهایی مثل تستنویسی، کنترل نسخه یا ابزارهای توسعه و نیازمندیهایی فراتر از کدنویسی ابتدایی در یک پروژه نرمافزاری آشنایی ندارند، معمولتر است.
این موارد باعث میشود که زمان مورد نیاز برای یادگیری دست کم گرفته شده و باعث تأخیر در فرایند توسعه شود. کمهزینه بودن نیز میتواند در اهمیت ندادن به استانداردها مؤثر باشد که باعث ناخوانایی یا به وجود آمدن ناسازگاری کدهای منبع دچار اختلال در مفاهیم زبان و تأثیر در خروجی باشد.
برنامههای نرمافزاری شخصی، حتی زمانی که یک روش توسعه شناختهشده را استفاده میکنند میتوانند با مشکلاتی در نیازهای مشتری مواجه شوند. کدنویسی کابویی میتواند با عدم درک درست نیازهای توسعه برای رسیدن به زمانبندی این اتفاق را تشدید کرده و اجزایی غیرقابل استفاده یا نالازم، پیش از آن که پروژه به اتمام برسد شوند. همینطور پروژههایی که مشتری مشخصی ندارند (اغلب پروژههای تجربی، به عنوان مثال توسعه بازیهای رایانهای مستقل را ببینید) میتواند با کدنویسی شروع شوند و هرگز نیازهای طراحیشان تحلیل نشود. عدم تحلیلهای طراحی میتواند به انتخابهای نادرست و ناکافی تکنولوژیها بینجامد و نیاز باشد که توسعهدهنده برای این که پروژه را به اتمام برساند، برنامه را بازنویسی کرده یا آن را سازگار کند.
بسیاری از مدلهای توسعه نرمافزاری مانند برنامهنویسی افراطی، راهکارهای افزایشی را که باعث تنشهایی مثل این که برنامه باید در انتهای هر دوره زمانی قابلیت ارائه داشته باشد را در پیش میگیرند. پروژههای مدیریتنشده تست واحدهای کمی دارند و ناکامل بودن پروژه میتواند آن را غیرقابل استفاده کند. در این زمینه متدولوژیهای چابک با کدنویسی کابویی مورد قیاس قرار میگیرد اما مدیریت پروژه چابک فرایندها، روندها، اندازهگیریها، مدیریت پروژه و دیدگاههای شناختهشدهای دارد ولی کدنویسی کابویی هیچکدام از اینها را ندارد.