Hi 👋🏻, I'm Stefan

Senior Software Engineer at Microsoft Logo Microsoft

I care personally about great developer experiences and write about Monorepos, TypeScript, Frontend Architecture, DevOps and SRE.

TECHNOLOGIES I WORK WITH

TypeScript
TS Compiler API
JavaScript
ESLint
Nx
PNPM
Node.js
Angular
React
Azure
Webpack
NgRx
RxJS
Git
CI/CD
Rust*

*[Rust] when I feel like suffering

THIS IS MY JAM

/Users/stefan/workspace/
// nx.json - Workspace configuration for monorepos
{
  "targetDefaults": {
    "build": {
      "dependsOn": ["^build"],
      "cache": true
    },
    "test": {
      "cache": true,
      "inputs": ["default", "^production"]
    }
  },
  "namedInputs": {
    "default": ["{projectRoot}/**/*", "sharedGlobals"],
    "production": ["default", "!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?"]
  },
  "plugins": [
    {
      "plugin": "@nx/eslint/plugin",
      "options": {
        "targetName": "lint"
      }
    }
  ]
}
// TypeScript Compiler API Code Mods
import * as ts from 'typescript';

function createTransformer(): ts.TransformerFactory<ts.SourceFile> {
  return (context) => {
    return (sourceFile) => {
      const visitor = (node: ts.Node): ts.Node => {
        if (ts.isCallExpression(node)) {
          return ts.factory.createCallExpression(
            node.expression,
            node.typeArguments,
            node.arguments
          );
        }
        return ts.visitEachChild(node, visitor, context);
      };
      return ts.visitNode(sourceFile, visitor);
    };
  };
}
# Azure DevOps Pipelines
trigger:
  branches:
    include: [main, develop]

pool:
  vmImage: 'ubuntu-latest'

jobs:
- job: BuildAndTest
  steps:
  - task: NodeTool@0
    inputs:
      versionSpec: '20.x'
  
  - script: npm ci
    displayName: 'Install dependencies'
  
  - script: npx nx run-many --target=build --all --parallel=4
    displayName: 'Build all projects'
  
  - script: npx nx run-many --target=test --all --parallel=3 --code-coverage
    displayName: 'Run tests with coverage'
// Reactive patterns with Angular & RxJS
@Injectable({ providedIn: 'root' })
export class DataService {
  private readonly http = inject(HttpClient);
  private readonly apiUrl = 'https://api.powerbi.com';
  
  readonly getData$ = this.http.get(this.apiUrl).pipe(
    retry(3),
    shareReplay(1),
    catchError(this.handleError)
  );
  
  readonly searchResults$ = this.searchTerm$.pipe(
    debounceTime(300),
    distinctUntilChanged(),
    switchMap(term => this.search(term))
  );
}
2015
First Line of Code
(Same year VS Code was released)
11K+
Circular Deps Resolved
280K+
Medium Article Reads

ALL ARTICLES