حسین حیاتی · توسعهدهنده بکاند · تهران
توسعهدهنده بکاند هستم.
از ۱۳۹۶ با داتنت کار میکنم و دوست دارم مالک کامل یک سیستم باشم: معماری، داده، یکپارچهسازی، استقرار و پایش.
از Clean Architecture، DDD و CQRS استفاده میکنم چون در عمل هزینه تغییر را پایین نگه میدارند، نه چون در اسلاید خوب به نظر میرسند. این روزها با کدنویسی عاملی (Claude Code و Cursor) میسازم و بخشهایی را که از ایجنت برنمیآید خودم نگه میدارم: انتخاب رویکرد، استقرار، دیباگ و بازبینی.
معماری یک نمودار نیست؛ چیزی است که تعیین میکند بدترین شب on-call شما چقدر بد باشد.
تصمیمهایی که گرفتم و اتفاقهایی که آنها را لازم کرد
کیفپول دیجیتال، بیمه سامان، از ۱۴۰۲ تا امروز. توسعهدهنده واحد؛ از یک کدبیس نیمهکاره تا محیط تولید، با بیش از ۲۰۰ میلیارد تومان تراکنش در حدود دو سال.
- لجر، تنها منبع حقیقت است.
- هر موجودی از روی تراکنشهای ثبتشده بازسازی میشود، نه از یک ستون کششده.
- پول یک Value Object است، نه یک
decimalخالی. - مبلغ + واحد پول + قواعد. جمع دو ارز متفاوت خطا میدهد، نه اینکه بیصدا اشتباه حساب کند.
- Idempotency روی کالبک درگاه و تلاش مجدد کاربر.
- کالبک تکراری درگاه و دوبار کلیک کاربر، پول تکراری نمیسازد.
- کنترل همزمانی روی تغییر موجودی.
- چه چیزی لازمش کرد: یک race condition در استیجینگ موجودی را دوبرابر کرد.
- مغایرتگیری خودکار شبانه.
- چه چیزی لازمش کرد: در همان شبی نوشته شد که یک مغایرت ۵۰٬۰۰۰ ریالی سه روز بررسی دستی هزینه برداشت.
- جذب رشد ۱۰ برابری.
- رشد ۱۰ برابری حجم تراکنشها با بهینهسازی کوئریها، کش Redis و Background Jobها جذب شد.
- تحویل سیستم به تیم جدید.
- تیم ۶ نفرهای را که بعدها سیستم را تحویل گرفت، با یک دوره مستندسازی قوانین کسبوکار، استقرار و عیبیابی آنبورد کردم.
همچنین: دو نوع کیفپول (اعتباری / نقدی)، شارژ از درگاه، اعتبار معرفی، برداشت و انتقال کاربر به کاربر؛ اتصال به درگاه پرداخت بهشکل یک سرویس جدا با مسیرهای خطای صریح؛ Serilog + ELK و داشبورد عملیات.
سوابق کاری
-
تیر ۱۴۰۲ – اکنون
توسعهدهنده ارشد بکاند · بیمه سامان
- کیفپول دیجیتالی که بالا توضیح دادم.
- میکروسرویسهای رویدادمحور روی .NET 6 با DDD.
- یک سیستم قدیمی ASP.NET MVC / ADO.NET: فیچرهای جدید، متریکهای اختصاصی و داشبوردهای Grafana.
-
آبان ۱۴۰۰ – تیر ۱۴۰۲
توسعهدهنده داتنت · مهرکام تک
- توسعه و عیبیابی ماژولهای اصلی بانکی با ساختار لایهای DDD و دور نگه داشتن قوانین کسبوکار از کنترلرها و زیرساخت.
- EF Core برای مدل نوشتن و Dapper جایی که کارایی خواندن مهم بود؛ یک تفکیک آگاهانه بهجای یک ORM برای همهچیز.
- یکپارچهسازی سرویسهای بانکی بیرونی با Flurl، همراه با Retry و مدیریت خطا برای فراخوانیهایی که کنترلشان دست ما نبود.
-
مهر ۱۳۹۹ – مهر ۱۴۰۰
توسعهدهنده فولاستک وب · سایپا
- بازنویسی گردشکارهای قدیمی Oracle Forms به یک اپلیکیشن ASP.NET Core + React برای تیمهای عملیاتی داخلی.
- تحویل همه لایهها (API، دسترسی به داده، رابط کاربری با Kendo UI و گزارشگیری با Stimulsoft)، نه فقط یک لایه.
-
فروردین ۱۳۹۶ – اکنون
بنیانگذار و تنها مهندس · پیشگامیت
- نشریه تخصصی فارسی که از دوران دانشجویی راه انداختم و تا امروز سرپا نگهش داشتهام: بیش از ۴۰۰۰ مقاله و اوج ۱۵۷ هزار بازدید ماهانه.
- بازنویسی با توسعه مبتنی بر هوش مصنوعی و مهاجرت به .NET 10؛ عملیات روزمره هم با Claude انجام میشود.
- نُه سال نگهداری، بیش از هر پروژه صفر تا صدی به من درباره سیستمهای عمرطولانی یاد داد.
متنباز و یادگیری
Wallet-API: پیادهسازی مرجع متنباز — .NET 8، دو سرویس، Clean Architecture، CQRS با MediatR، DDD و تست واحد. نمایش معماری است، نه یک سیستم تولیدی.
در حال یادگیری: Event Sourcing. یک سرویس تراکنشی کوچک را روی آن بازسازی میکنم تا ببینم کجا جواب میدهد و کجا نه. چیزی که به تولید رساندهام سیستمهای state-based است، نه event-sourced.
تکنولوژیها
- زبانها و فریمورکها
- C#, .NET 8, .NET 10, ASP.NET Core, ASP.NET MVC, Blazor, React, JavaScript
- داده
- SQL Server, T-SQL, EF Core, Dapper, MongoDB, Redis, Elasticsearch
- معماری
- Clean Architecture, DDD, CQRS, Event-Driven, Microservices, Design Patterns
- زیرساخت و ابزار
- RabbitMQ, Docker, Serilog + ELK, Grafana, Git, Azure DevOps / TFS, IIS, Stimulsoft
- روشها
- Idempotency، کنترل همزمانی، بررسی سازگاری داده، Observability، یکپارچهسازی سرویسها، توسعه با هوش مصنوعی (Claude Code، Cursor، GitHub Copilot)
تحصیلات و زبان
کارشناسی مهندسی نرمافزار، دانشگاه آزاد اسلامی، ۱۳۹۲ – ۱۳۹۶.
فارسی (زبان مادری)، انگلیسی (متوسط؛ خواندن و نوشتن متون تخصصی).