ServiceNow: enterprise JavaScript with a memory
The learning curve isn't the language. It's knowing which API to reach for and when, and accepting that the platform has opinions.
ServiceNow scripting is regular JavaScript with a decade of platform-specific APIs bolted on top. GlideRecord for database queries, GlideAjax for async calls, catalog client scripts that only run on specific form states. The learning curve isn't the language. It's knowing which API to reach for and when.
The travel reimbursement workflow I built had six approval states and three notification templates. Every time I thought I had the state machine right, a tester found a path I hadn't handled. I started drawing the flow on paper before touching the script editor. That alone cut the back-and-forth in half.
Service Portal development is its own thing. AngularJS 1.x, widgets that mix HTML, CSS, client script, and server script in four separate fields per widget. Nothing about it is intuitive, but once you understand that the server script runs first and the client script hydrates against it, the mental model clicks.
The Digital Product Passport work for ETHICA was different. Less automation, more data integrity across the product lifecycle. Audit trails, field-level validation, making sure compliance data doesn't drift silently between systems. The technical side wasn't complex. Getting the domain model right was the whole job.