Tuba Kaya

Personal project

Slice

Creator
  • .NET
  • C#
  • Roslyn
  • Azure SQL Graph
  • Visual Studio Extension
  • Azure DevOps
  • PowerShell

Slice grew out of two frustrations — one philosophical, one painfully practical.

Making system modularization systematic. I believe modularization patterns and practices are too vague in our field. The problem is genuinely complex, but not so complex that we can’t share common models and tools to reason about it. Slice is my attempt at that common ground: by reading a legacy codebase and reconstructing execution paths from both static code analysis (Roslyn) and live traffic capture, it exposes the slices of a system that make up each feature. Layer Git history on top and you can see which slices change together — which brings you close to applying Parnas’s Information Hiding principle to modularization, derived from how the code actually behaves and evolves rather than from a whiteboard. This is the direction I think legacy modernization should take: modeling the system you have, not the one you wish you had.

Making legacy change safe. On legacy systems I’ve worked on — roughly a hundred Git repositories — there were methods no one dared touch. A full-text search on GitHub would surface tens of usages, each of those used many more times in turn, and it was impossible to follow which endpoints a change would actually impact. We even tried pulling every project into a single Visual Studio solution to use its built-in reference detection — but endless dependency hell, with each repository depending on different versions of the same libraries, made that giant solution nearly impossible to build. Slice solves this head-on: it shows you immediately which endpoints a given usage ultimately reaches.

How it works. Slice scans dependencies across all of a system’s Git repositories and stores the relationships in an Azure SQL graph database. The dependency-detection process runs as part of the build pipeline, driven by multi-threaded PowerShell for speed. A Visual Studio extension, built on that same dependency graph, then lets an engineer select any symbol and see — across the entire system — everywhere it’s used and which endpoints it leads to. The core is built with .NET / C# on the Roslyn compiler platform.