Variable

CodeGiant DevSecOps Platform

CodeGiant Developer Tools / DevSecOps Jun 2024 to Dec 2024Project Link

RubyRuby on RailsReactJavaScriptTypeScriptGrafanaKubernetesObservabilityLintingDevSecOps

The platform this was in 2024

CodeGiant in 2024 was a DevSecOps platform: issue tracking, Git repositories, CI/CD and observability in one product. I contracted there for six months through Variable Software Consulting, my own consultancy. The company has since moved to enterprise modernization, so codegiant.io today is not the product described here.

Grafana as a service inside the platform

Observability was sold as part of that platform: centralized log management, live tailing, presence and absence alerts, error and APM tracing. Grafana was my piece of it. It sits as the dashboard and query layer over a data source, so this was the viewing end of that stack. I helped build it out and integrate it so it was usable as a service from inside CodeGiant.

The whole codebase from Ruby 2.7 to 3.3.6

Ruby 2.7 went end of life in March 2023, and the 2.7.8 release announcement said there would be no 2.7.9 even if a security vulnerability turned up. A production Rails app still on 2.7 in mid-2024 was running an interpreter with no upstream patch available for anything found in it after that date. I took the entire codebase to 3.3.6. The expensive part is the 2.7 to 3.0 boundary, where the automatic conversion between keyword and positional arguments that 2.7 only warned about is gone, which is wide-reaching work on method signatures plus a full sweep of the gem dependencies. It was not a drop-in version bump. 3.3 also ships YJIT, which 2.7 never had, though it stays off until someone turns it on, so that is a separate decision from the upgrade.

A rewrite of the Project Planner UI

The Project Planner was CodeGiant's issue tracker: issues with parent and child relationships, active sprints, kanban boards, roadmaps, reports, a markdown editor, backlog and epics, all tied to Git activity and custom workflows. I read it closely before changing anything. Then I rewrote the UI and fully updated the React structure underneath it, so the board, the backlog and the roadmap sat on one current structure. Story points, time tracking and status surface in all three views at once, and all three have to agree.

Kubernetes, learned on the job

CodeGiant ran its systems on Kubernetes. I did not arrive with it. I learned it on the job against a live cluster, and I worked within the conventions the platform already had. Grafana as a service landed there too. Six months was enough to do my own work in the cluster and nowhere near enough to claim I designed it.

Linting, and the case for TypeScript

I put linting in place for both Ruby and JavaScript, which settles a lot of small review arguments before anyone has them. I also wrote the plan for taking the JavaScript to TypeScript. It was not a runtime argument. Types are erased at build, so the shipped bundle behaves the same as it did. The case was that a class of shape error moves from a production incident to a failed build, and that a large refactor becomes a list the compiler hands you instead of a grep.