Skip to content
Maksim Salankevich Software & AI Engineering
Independent engineering · Warsaw, EU
Software products and AI systems. Delivered end to end.
Bring your idea, requirements or workflow. I take care of the engineering.
I build web and mobile apps, and AI tools that process information and automate repetitive work.
fun simplifyFirst () {
val services = listOf (
"gateway" ,
"orders" ,
"order-router" ,
"router-manager"
)
val requirements = 1
println ("${services.size} services" )
println ("$requirements requirement" )
println ("One function should do." )
}
Software products ✳ AI agents ✳ Workflow automation ✳ Mobile apps ✳ Web platforms ✳ Backend systems ✳ APIs & integrations ✳ Knowledge search ✳ MCP integrations ✳ SaaS products ✳ Kotlin Multiplatform ✳ Python ✳ Rust ✳ AI-assisted engineering ✳ Software testing ✳ Deployment ✳ Product delivery ✳ Technical ownership ✳
Software products ✳ AI agents ✳ Workflow automation ✳ Mobile apps ✳ Web platforms ✳ Backend systems ✳ APIs & integrations ✳ Knowledge search ✳ MCP integrations ✳ SaaS products ✳ Kotlin Multiplatform ✳ Python ✳ Rust ✳ AI-assisted engineering ✳ Software testing ✳ Deployment ✳ Product delivery ✳ Technical ownership ✳
What Ibuild.
A new product, or a better way to run an existing workflow.
01 / Software products
Custom software development.
I handle the app, the systems behind it and the infrastructure needed to run it.
Web and mobile applications Connections between your software and other services Online products and internal business tools
Explore the engineering work
02 / AI systems
AI agents & automation.
Systems that process information, connect your tools and automate repetitive work.
AI assistants that carry out specific tasks using your tools Extracting and categorizing information from documents Searching your company documents and knowledge Connecting your tools to automate recurring tasks
We define data access, quality checks and human review before implementation. I use AI language models where the task and cost justify them.
Discuss your workflow
Engineering-led.AI-assisted.
I use coding agents for implementation and routine engineering tasks. I review their output and test the result.
Selectedwork.
Products I'm building and a confidential engineering engagement.
01
Road Tower / Co-founder & CTO
Building a roadside assistance marketplace.
In development / Pre-launch
A marketplace connecting people who need roadside assistance with service providers.
As co-founder and CTO, I own the technical work: customer and driver apps, plus a web console for service providers.
Explore Road Tower
02
OnlyProject / Independent product
Create an avatar. Make photos and videos.
In development
I'm building a creator studio where you can design a virtual avatar and use the same character in photos and videos.
The studio brings character creation, scene generation and media organization into one workspace.
03
Blockchain platform / NDA engagement
The app and the system behind it.
App + backend / Confidential project
My work on a confidential trading platform covered app development, backend services, transaction processing and monitoring.
Engineering scope Kotlin Multiplatform client; Rust and Python/FastAPI services; gRPC, RabbitMQ, PostgreSQL and Redis. Docker, Prometheus and Grafana for operations. AI-assisted implementation with code review and tests.
How we work together
Clear scope.Working software.
01 / Scope Define the deliverables. Share your idea, requirements or a description of the work you want to improve. We agree what to deliver, what it depends on and how to check the result.
02 / Engineer Build with visibility. I handle architecture, code, integrations and tests. You follow progress and try working versions.
03 / Deliver Deploy and hand over. I test and release the agreed version, then hand over the code, documentation and access you need to run and maintain it.
Maksim.An engineer first.
MSAL is my independent engineering business in Warsaw. I work remotely and welcome projects from Europe and beyond.
I have 10+ years of experience building Android apps and 7+ years leading teams, across banking and consumer products. I also build cross-platform apps and server software, using Kotlin Multiplatform, Python and Rust.
If a project needs additional specialists, we agree their roles and I coordinate their contribution.
fun simplifyFirst () {
val services = listOf (
"gateway" ,
"orders" ,
"order-router" ,
"router-manager"
)
val requirements = 1
println ("${services.size} services" )
println ("$requirements requirement" )
println ("One function should do." )
}
fun chooseTradeOffs () {
val options = mapOf (
"latency" to "low" ,
"cost" to "low" ,
"complexity" to "low"
)
println (options)
println ("Pick two." )
println ("Then measure the third." )
}
fun findTheCause () {
val symptoms = listOf (
"slow app" ,
"slow API" ,
"slow dashboard"
)
val cause = "one query"
println (symptoms)
println (cause)
println ("Three rewrites cancelled." )
}
fun clearCache () {
val server = "new UI"
var cache = "old UI"
cache = server
println (cache)
val browser = "old UI"
println (browser)
println ("Try incognito." )
}
fun timeZones () {
val hour = 1
val offsets = listOf (-8 , 0 , 3 , 12 )
offsets.forEach {
println (hour + it)
}
TODO ("define today" )
}
fun nameTheOwner () {
val teams = listOf (
"frontend" ,
"backend" ,
"platform"
)
val incident = "between the teams"
println (teams)
println (incident)
println ("Adding an owner for 'between'." )
}
fun firstRelease () {
val mustHave = listOf (
"login" ,
"checkout"
)
val niceToHave = "new framework"
println (mustHave)
println (niceToHave)
println ("Framework launch postponed." )
}
fun duckReview () {
val code = "broken"
println (code)
println ("So this calls..." )
println ("Which then..." )
println ("Oh." )
println ("OH." )
println ("Promote the duck." )
}
fun regexFix () {
var problems = 1
val regex = ".*"
println ("Use a regex!" )
if (regex != "" ) {
problems++
}
println ("$problems problems" )
}
fun fridayDeploy () {
val day = "Friday"
val time = "17:59"
val change = "tiny"
println ("$day $time " )
println ("A $change fix" )
println ("Deployed." )
println ("Phone rings." )
println ("Weekend?" )
}
fun defineDone () {
val builds = true
val starts = true
val userCanFinish = false
println ("Build: $builds " )
println ("Starts: $starts " )
check (userCanFinish) {
"Not done yet."
}
}
fun qaVisit () {
val door = "works"
check (door == "works" )
println ("Door tested." )
println ("Ready to ship." )
val qa = "the window"
println ("QA enters via:" )
println (qa)
error ("Window error" )
}
fun measureFirst () {
val before = 120
val after = 119
println ("Before: $before ms" )
println ("After: $after ms" )
println ("New architecture." )
println ("Same database query." )
}
fun temporaryFix () {
val born = 2012
val temporary = true
val year = 2026
val age = year - born
check (temporary)
println ("$age years old" )
println ("Do not touch." )
}
fun hardProblems () {
val hard = listOf (
"cache invalidation" ,
"naming things"
)
println ("Two hard things:" )
for (i in 0 ..hard.size) {
println (hard[i])
}
}
fun scaleTheSystem () {
val users = 3
val services = 18
println ("$users users" )
println ("$services services" )
println ("${services / users} services per user" )
println ("Very personal service." )
}
fun setBoundaries () {
val access = mapOf (
"reader" to "read" ,
"editor" to "write"
)
val request = "make everyone admin"
println (access)
println (request)
println ("That is not a role." )
}
fun pushTest () {
val users = "everyone"
val message = "test"
println ("Send to myself." )
println ("To: $users " )
println (message)
println ("Sent: 1,000,000" )
println ("test received" )
}
fun addObservability () {
val status = "green"
val complaints = 12
println ("Dashboard: $status " )
println ("Support tickets: $complaints " )
println ("Found the missing metric." )
}
fun findTheBottleneck () {
val app = 15
val network = 25
val waiting = 900
println ("App: $app ms" )
println ("Network: $network ms" )
println ("Waiting: $waiting ms" )
println ("UI rewrite cancelled." )
}
fun pickTheTool () {
val problem = "add two numbers"
val plan = listOf (
"agent" ,
"vector database" ,
"workflow"
)
println (problem)
println (plan)
println (2 + 2 )
println ("No subscription required." )
}
suspend fun leave () {
val cancelled = true
try {
check (!cancelled)
} catch (e: Exception) {
println ("Ignore errors." )
}
println ("Still working." )
}
fun fileNames () {
val versions = listOf (
"final" ,
"final2" ,
"final_REAL" ,
"final_REAL_v7" ,
"final_USE_THIS"
)
println (versions.last ())
println ("Looks the same." )
}
fun smallRequest () {
val button = "Export"
val work = arrayListOf (button)
work += "PDF editor"
work += "Offline sync"
work += "AI assistant"
println (work)
println ("Same deadline?" )
}
fun codeQuality () {
val todos = listOf (
"remove this hack" ,
"ask who wrote it" ,
"stop adding TODOs"
)
todos.forEach {
println ("TODO: $it " )
}
TODO ("resolve TODOs" )
}
Or email maxsoloma@gmail.com