Pragmatic Stacks
End-to-End Execution
Built to Scale.
👋 Hello, my name is
Tio Satria Wijaya
I'm an experienced Fullstack Software Engineer & IT Infrastructure Specialist with over 7 years of hands-on experience building high-performance systems, from sleek frontend interfaces to robust backend APIs and scalable infrastructure.
namespace HowICode
{
// Real-world data processing pipeline demonstrating my coding principles in production code
// This isn't academic theory - it's how I architect systems that scale and maintain themselves
#region Core Abstractions - DIP & OCP in action
/// <summary>
/// Contract for data processing operations. This abstraction allows the system to work with any data source
/// without coupling to specific implementations. Critical for testing and future extensibility.
/// </summary>
internal interface IDataProcessor<TInput, TOutput>
{
Task<TOutput> ProcessAsync(TInput input, CancellationToken cancellationToken = default);
}
/// <summary>
/// Logging abstraction - prevents tight coupling to specific logging frameworks.
/// Can swap from Console to Serilog to Application Insights without changing business logic.
/// </summary>
internal interface ILogger
{
void LogInfo(string message);
void LogError(string message, Exception exception = null);
void LogPerformance(string operation, TimeSpan duration);
}
/// <summary>
/// Caching abstraction - allows switching between in-memory, Redis, or database caching
/// without touching the business logic that depends on it.
/// </summary>
internal interface ICache
{
Task<T> GetAsync<T>(string key) where T : class;
Task SetAsync<T>(string key, T value, TimeSpan expiration) where T : class;
Task RemoveAsync(string key);
}
#endregion
#region Domain Models - SRP demonstrated
/// <summary>
/// Represents user data with validation rules. Single responsibility: model user data correctly.
/// Immutable by design - prevents accidental mutations that cause bugs in multi-threaded environments.
/// </summary>
internal sealed record UserData(
string Email,
string FirstName,
string LastName,
DateTime CreatedAt)
{
// Fail Fast: Validate immediately upon creation
public UserData(string email, string firstName, string lastName, DateTime createdAt) : this(email, firstName, lastName, createdAt)
{
if (string.IsNullOrWhiteSpace(email) || !email.Contains('@'))
throw new ArgumentException("Invalid email format", nameof(email));
if (string.IsNullOrWhiteSpace(firstName))
throw new ArgumentException("First name is required", nameof(firstName));
if (string.IsNullOrWhiteSpace(lastName))
throw new ArgumentException("Last name is required", nameof(lastName));
if (createdAt > DateTime.UtcNow)
throw new ArgumentException("Creation date cannot be in the future", nameof(createdAt));
}
public string FullName => $"{FirstName} {LastName}"; // Computed property - no stored redundant data (DRY)
}
/// <summary>
/// Processing result with metadata. Encapsulates both success/failure state and performance metrics.
/// This pattern eliminates the need for exception handling in normal flow control.
/// </summary>
internal sealed record ProcessingResult<T>(
T Data,
bool IsSuccess,
string ErrorMessage = null,
TimeSpan ProcessingTime = default)
{
public static ProcessingResult<T> Success(T data, TimeSpan processingTime) =>
new(data, true, null, processingTime);
public static ProcessingResult<T> Failure(string errorMessage, TimeSpan processingTime) =>
new(default, false, errorMessage, processingTime);
}
#endregion
#region Infrastructure - Composition Over Inheritance
/// <summary>
/// High-performance in-memory cache implementation. Uses concurrent dictionary for thread safety.
/// Demonstrates composition: USES ConcurrentDictionary instead of INHERITING from it.
/// </summary>
internal sealed class MemoryCache : ICache
{
private readonly ConcurrentDictionary<string, (object Value, DateTime Expiration)> _cache = new();
private readonly Timer _cleanupTimer;
public MemoryCache()
{
// Background cleanup every 5 minutes - prevents memory leaks
_cleanupTimer = new Timer(CleanupExpiredEntries, null, TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(5));
}
public Task<T> GetAsync<T>(string key) where T : class
{
if (_cache.TryGetValue(key, out var entry) && entry.Expiration > DateTime.UtcNow)
{
return Task.FromResult(entry.Value as T);
}
_cache.TryRemove(key, out _); // Remove expired entry immediately
return Task.FromResult<T>(null);
}
public Task SetAsync<T>(string key, T value, TimeSpan expiration) where T : class
{
var expirationTime = DateTime.UtcNow.Add(expiration);
_cache.AddOrUpdate(key, (value, expirationTime), (_, _) => (value, expirationTime));
return Task.CompletedTask;
}
public Task RemoveAsync(string key)
{
_cache.TryRemove(key, out _);
return Task.CompletedTask;
}
private void CleanupExpiredEntries(object state)
{
var now = DateTime.UtcNow;
var expiredKeys = _cache
.Where(kvp => kvp.Value.Expiration <= now)
.Select(kvp => kvp.Key)
.ToList();
foreach (var key in expiredKeys)
{
_cache.TryRemove(key, out _);
}
}
public void Dispose() => _cleanupTimer?.Dispose();
}
// partial code
// to check full code click on green circle or click expand, you should not see this anyway, i triggered route redirect on 50%
How I Think
I build for the future, designing systems that are:
Easily assembled like LEGO blocks
Every piece knows its job, nothing more
Logs, metrics, alerts - I don't like black boxes
Manual processes are anti-flow
Technical Stack
A comprehensive overview of my technical expertise and toolbelt, built through years of hands-on experience in enterprise environments.
Backend
ASP.NET
Main backend framework I use for building APIs and services. Strong typing, clean DI, and solid performance, solid performance, yes i said that twice.
C#
My main engine for crafting real-world production grade application. I natively speak this language. It is fast, syntatically elegant, and has very good ecosystem. I know its from microsoft. but trust me, it does not even matter. The language so good, you ignore the corporate sins.
PHP
Not my go to language. but when budget constraint is tight, and want quick mvp, this one can be considered. however when there is scaling factor, i will avoid it like plague. it does not scale very well.
Quartz.NET
Reliable job scheduler. I use it for background jobs and timed processing. Gets the job done without bullshit.
Frontend
Guna UI
Winform Frontend framework to scaffold fast, beautiful UI. i use it with winform, makes me efficient to deliver fast, but still lowkey good looking.
HeroUI
this portofolio site is using this design system, i usually choose this for user/client-side because its elegant looking and has a very good typography out of the box without setting up lots of typography settings.
Mantine
UI library I use heavily for internal tools & admin panel. Fast to build, good accessibility, and easy to extend.
NextJS
My go-to Frontend React Framework to built User Interface. This thing is fast, has a very good ecosystem, dev-base, support both Client & Server side rendering (One thing that makes me keep coming back).
React
I do not use this without framework as there is alot of boiler plate need to be setup before we can ship a product. i mainly use this along with NextJs
Tailwind CSS
For frontend, it is non-negotiable. always been my first choice, it can clutter code sometimes, but if you cluttered it, you usually design it wrong.
TypeScript
Non-negotiable for frontend work. coming from backend-heavy, this thing lets me sleep well and able to work with funny javascript.
Windows Form
When more control is needed, like full IO control, memory management, and system level execution. i will resort using this. it is very quick to prototype and develop, and its native on windows.
Database
Dapper
My go-to framework for sql-based data. this always come first before considering Entity Framework. It is platform agnostic and can be used in many DBMS. Wrote a custom version to keep it strongly typed, as default version work mostly with string. i condemn raw usage. you can easily slip up.
Entity Framework
If Dapper can't handle it, then fine — I’ll bring out EF. But 9 out of 10 times, it's unnecessary. Even then, I’ll still pair it with Dapper for performance.
MongoDB
Good for document-heavy or unstructured data. I use it when speed, flexibility, and fast iteration matter more than strict schema.
MS SQL Server
Used mostly when stuck with enterprise or legacy windows stack. It’s powerful, but bloated and not my first pick unless forced.
MySql
My go-to database management system (DBMS). Offers solid performance, broad community support, and has strong compatibility with legacy app. it is ideal for modern and transitional stacks.
PostgreSQL
Best choice when I need strict relational integrity, custom functions, or JSONB. Great for complex queries and when data structure matters more than speed.
Redis
i used it mainly as a fast distributedd in-memory cache. Useful for session stores, rate limiting, or pub/sub. Simple and stupid fast. But i prefer IMemoryCache if the scope is not distributed
DevOps
Bash
Use it for scripting, automation, and deployment tasks. Comes up in almost every Linux-based workflow.
PowerShell
Used for scripting and automation on Windows systems. Great for batch operations and service setups.
Cloud & Networking
AWS S3/EC2
Use S3 for storage and EC2 for deployments. Familiar with IAM, buckets, and basic EC2 ops. mainly use 3rd party provider like digital ocean / wasabi as it has better egress and overall cheaper
CDN
Mainly use Cloudflare for asset delivery. Helps reduce latency and offload static content. though some 3rd party like digital ocean also have this built in.
Infrastructure
Access Points
Configured enterprise APs (TP-LINK, Cisco, & Mikrotik). Focused on coverage, channels, and secure access.
Building Automation System
Handled integration and maintenance project at Hangnadim International Airport . Mostly relay-based control systems, DALI, basic I/O automation.
CCTV Systems
Setup and managed IP-based surveillance systems. NVR, remote access, and network planning.
Digital Addressable Lighting Interface
Handled New installation & Integration to Building Automation System
Deos Control System
Oversee, Help Integration to Network Configuration & As built Drawing
Docker
Used for dev, deployment, and env consistency. Solves the “works on my machine” bullshit. A must-have for any serious project.
Fiber Optic
Handled deployments & setup for a massive project in Hangnadim International Airport. Backbone of enterprise networking.
Flight Information Display
Handled replacement, Integration to BAS & New Installation.
Git
my primary versioning control.
Local Area Connection
Installation, Mapping, Configuration & Security. Could technically built WAN, MAN, depending on infra budget & scope.
Linux
my go-to OS for servers and some local work. Familiar with bash, systemd, and common CLI tooling. its cheaper than windows server
Master Clock
Handled New Installation, Existing Replacement & Integrate to existing network
Radio System
Gain an experience from working closely with infrastructure guy at hang nadim airport. Re-applied my knowledge in audit & consulting project for an oil rig.
Smoke Detector & Fire Alarm
Gain an experience from working closely with infrastructure guy at hang nadim airport. Re-applied my knowledge in audit & consulting project for an oil rig.
Windows Server
Used in enterprise setups. Comfortable with IIS, RDP, and Active Directory basics.
Media Processing
FFmpeg
My go-to media pre/post processor. Fast, flexible, and runs headless. Easy to wrap in C#, and supports almost everything under the sun.
ImageMagick (C#)
Used in C# for image processing. Handy for server-side image handling. and its fast & has good dev ex too.
Ready to Get Started?
Got a complex technical challenge? Need someone who can handle full-stack development AND infrastructure? Let's discuss your project.