Software Architect experienced in writing developer tools, build-test-deploy pipelines, distributed systems. Good understanding of concurrency and scalability related issues, experience in designing large extensible systems
Experience
2024 — Now
2017 — 2024
2017 — 2024
• Build and deploy tools for mixed Java/Python applications.
Toolset supported a full pipeline from development to continuous integration, to deployments.
Tools: Java, Kotlin, Gradle, Pip, Virtualenv, Docker, AWS, Cython, Teamcity, GitHub Workflows.
• Stage/production environment management/support toolset.
The system allowed for transparent access to processes running on multiple hosts: starting/stopping processes, log reading/searching, job schedules, diagnostics.
Automatic updates of cron schedules and Slack notifications for audit.
Devmode allowed running and debugging entire environments locally.
Tools: Bash, Python, SSH, Docker, AWS ECR, Slack.
• Git extension for multi-repo development.
The extension would register the state of dependency repos on every commit, allowing you to come back to the exact state of your multi-repo source tree at any time.
A GitHub action provided the same functionality for workflows.
Tools: Git, Bash, Python, GitHub
• Worked on Mercurial extension for server-side code permissions.
Developers would have access to different parts of the source tree based on their permissions.
Tools: Mercurial, Python, SSH
• Java-Python framework for data exchange between a trading/sim system and strategy modules.
Trader/sim would keep the clock, and connect to modules for prediction data. Consideration given to problem diagnostics, remote stack traces on errors, etc.
Tools: Java, Python, Thrift, gRPC, CapNProto
• Simulation framework for large computational jobs based on AWS Batch.
Local executor for debugging and testing.
Tools: Python, AWS Batch, ECR
• Code migration for ARM/x86 compatibility.
Multiplatform docker images, validations for architecture during builds, simulations.
Tools: Docker Buildkit, Java, Python, AWS Lambda
• Automated infrastructure management for developers.
Creation, migration of cloud desktops, repository/build setup, integration with Okta ASA.
Tools: Python, Bash, Okta, AWS, Teamcity, GitHub
2015 — 2017
2015 — 2017
• Worked on an order management platform. Persistence, transports, configuration and deployment aspects.
Tools: Java 8, Spring, JMockit, Gradle.
• Worked on a client-side library for a web-based analytics application. Integration testing, using the Nashorn scripting engine, simulating disconnects, reconnects.
Tools: Java 8, Typescript.
2011 — 2015
2011 — 2015
• Worked on a server-side platform for trading applications. Verifiable two-sided configuration (developer side/support side). Annotated schema dictionary to centrally manage different aspects of the system, such as fix messaging, database persistence. Persistence layer with schema verification. Low level utilities.
Tools: Java, Spring, XBean
• Framework for centralized multi-environment management. Allowed uniform and error-proof way to start/stop/query the status of processes. Uniform log viewing/querying/archiving. Customization of memory and other settings. Command-line autocomplete.
Tools: Bash
• Implementation of a develop/build/deploy cycle. Support for large multi-module source trees. Covering all stages of development from one set of metadata: unattended builds, IDE project generation, and packaging of binary releases.
Tools: ANT, IVY, Teamcity, Bash
2007 — 2011
2007 — 2011
Barclays Capital since 09/08
• Development of a underlying library for a trading application: real-time generic data transformations such as filtering, grouping and aggregations; event throttling to allow rendering of high frequency updates; hierarchical and flat table models; data entry library providing simple separation of GUI code from the model, with validation rendering.
Tools and technologies: Java, Swing, Jide.
• Development of a discovery component. The component allowed related running processes to know about each other’s presence and maintain a live list of available services. The component could be configured to work in both peer to peer or client-server mode.
Tools and technologies: Java, TibRv
• Development of a failover component. The failover component relied on discovery and allowed running instances negotiate reconfiguration on the fly, i.e. deciding which instance will become primary vs. standby.
• Developed a build system based on ANT and IVY for easy multi-module builds. Reliance on metadata allowed using the same definitions to cover various aspects of software development: developing (IDE projects were created automatically), unattended builds, and deployment.
Tools and technologies: ANT, IVY, Perl