HN user

soulnothing

549 karma
Posts0
Comments229
View on HN
No posts found.

From an 11th gen I get about 6 to 7 with light usage, two to three with any development. It's largely a thin client at this point. Battery health is at 92%.

I tried upgrading to the ryzen and when it was good it was really good. I was able to keep a user mode libvirt vm running for dev work and mid brightness under 5W power draw. That used slirp networking, adding a bridge or default nat nic takes up about 2w to 3w of it's own power.

But like most windows laptops the suspend mucked things up. Not even power draw while asleep, but when awaking from sleep the power minimum was 10w with it more often at 20w with similar usage. I tried several wifi cards, nvme drives, port configurations etc. Also tried Fedora, Ubuntu and Nixos.

On Linux this carries over to the discussion of tlp vs power profile daemon, and soon tund. I saw much better performance and regularity with tlp, but that seems like it's not the path forward.

The steam deck shows that suspend can be fixed and done well with decent battery life under linux.

I recently did a deep dive on gc issues at work, and compared eden the default collector and z.

Our app was collecting pretty heavily, and an average collection time of about 50ms. With Z, and Linux huge pages it was collecting sub millisecond. This was at the cost of a bit more cpu, as z uses more threads for collection.

Using gatling for performance testing, we saw a small increase in requests per second. But the benefit was a smoother response time, with less spikes to high p9X measures.

Using flight recorder with this is a great way to get details of how the gc is performing.

Addendum: As noted below zgc uses more memory, I only found it viable on 16GB heaps or above. With it really improving performance around 32GB.

I medically can't drive, and my other half doesn't want to drive. I see this as well, a number of my circle also want walkable/transit areas. In the states it's NYC, Philly, Boston, Chicago, San Fran, Seattle and a bit more. I feel like I need to leave just to get a sane metro area.

I'm in NYC now, but keep circling back to Philly. We're renting for ~3200 now a one bedroom 650sqft in NYC, both work from home. To get the ideal separation we want, not have our joint offices in the living room, we would need to go to between $5,500 and $6,500. While in Philly we could get a trinity, small town house three floors plus basement, about 900sqft, in downtown for ~2200.

I wouldn't buy in Philly, I just don't trust the city planning at this point. They're trying, but it's an uphill battle. The tax situation as a self-employed was much more complex in Philly. Safety is not something to just shy away. I lived in Old City, two years back, and there were still shootings near my apartment. It's a problem in a lot of cities as we gut social spending and relief programs. Philly did open a safe injection site, and is making head way.

I really like Philly, close to NYC Megabus was 15$ a seat, and about 3 hours. Amtrak is even quicker. Great music and food scene, Reading is great for food / produce.

The biggest issue I've found is the job market. Locally, a lot shifted out to office parks, requiring regional rail, and walking along multi-lane roads. If you're working remote, I got cost of living adjusted like crazy. The quotes I got were 80% pay cut over my NYC rate. While local jobs, were only a 10% cut. The local tech scene is a bit behind, more legacy.

Comcast has a great VC program as well for startups. The city also has tax programs to help get startups in the area.

The weakest link in this setup is your current internet. I've found while traveling, internet is generally pretty bad under, 10Mbs. Making this a rather difficult task. American view.

At home, my "laptop" is a dumb terminal that docks to my desk monitors. But computes to servers in the closet.

At my families who have (150:down/10:up)Mbs it was no different from being at home. I connected over wire guard. I even took my zoom/client calls in vms over rdp. Passing my webcam from my local laptop -> wire guard -> server. I also used parsed to stream gaming from home.

Conversely, I was at an Airbnb recently with (5/0.512)Mbs DSL. It was a real chore. For the internet black hole, I've opted to go for a SFFpc instead. That can fit into checked baggage or carry on. Even if I can't setup a monitor and keyboard at the airbnb hotel. Having both off in lodging wifi is suitable enough.

Outside of html docs, it's purpose is similar to swagger

* Auto generate mock / containers for testing

* Generate server interfaces

* Generate models that go across the wire

* Remove boiler plate to spin up an async client, sqs, kafka etc.

That being said most of the generators are from the node sides and left a bit to be desired. I also see it falling into the same issue as open api. Most places I've been dynamically generate the open api spec.

I had written a JVM async/open api gradle plugin. That generated all the above. The nice thing was that if your server didn't implement the agreed upon spec it would fail to compile. Allowing for asynchronous development, back end/mobile/front end agree on the spec and can work on the feature at the same time.

This can also be expanded into k6/gatling. Hit this endpoint, guarantee this sla and ensure everything functions as expected. By having the contract first, you can automate a majority of the down stream tasks.

I think it has a use for contract first development, and is good in conjunction with something like avro. But it serves best in a contract first flow. Where in you define a spec, if it compiles you match the spec. Most servers don't take in a spec and define routes off operation names.

Why not dynamic async api generation? A lot of the generators reflect at run time, slowing down startup, and don't provide the most human readable definitions. Also lagging behind the latest implementation, and miss potential new features.

Been using Kotlin for ten'ish years. I feel the same, although I'm not part of the Java camp, coming more functional i.e. Scala. I was working on a number of open source libraries for a more functional reactive Kotlin, but have largely stopped.

They really painted them selves into a corner by doubling down on Spring, Micronaut etc. There is little benefit to those and Kotlin. From the back-end side, it's Java light, and Java has largely caught up.

If they kept to Ktor, Quarkus, vertx that could compete a bit with the Node/lighter crowd. Or people who limit class usage and focus on a more functional style. But that leads into that target audience...

Is not as apt to use Jetbrains projects, ancedotal observation. When I started Jetbrains was heavily used for python, ruby, etc. I converted several teams to Kotlin pre 1.0. But now with VS Code being the primary IDE/Editor, it's a much harder pitch.

The multi platform stuff feels half baked out side of UI. Having done several run time agnostic services, I hit so many road bumps. Jetpack compose is really cool though.

Where to go? This is an honest question. I just got done a project where we tried to go to Rust, and reverted due to wider difficulty with the borrower system across teams.

On another contract I spent several days tracking down node module resolution issues, and incompatibilities between peer dependencies. The script portion of package.json feels lacking compared to gradle and dependent task trees. NRWL/nx and Microsoft/Rush help a bit here.

I still feel Kotlin is a really good language, with graal if treated as Node with a better build system. But I rarely see that, mostly it's akin to J2EE or mobile.

I really wish fabric8, and more specifically kotlin k8 dsl[2] was getting more traction.

It removes the down side of yaml all over the place. It's missing the package management features of helm. But I have several jars acting as baseline deployments, and provisioning. It works really well, and I have an entire language. So I can map over a list of services, instead of do templating. The other big down side is a java run takes a minute or two to kick off

I was resilient to k8 for a long time. Complexity was secondary to cost, but Digital ocean has a relatively cheap implementation now. This commonality and perseverance of tooling is great.

I want metrics, a simple annotation. I want a secret injected from vault, just add an annotation. It's also cloud agnostic, so this logic can be deployed any where some one provides a k8 offering.

EKS was very powerful. As running service accounts via non managed clusters. Removed the need to pass an access key pair to the application. That service account just ran with a corresponding iam role.

[1] https://github.com/fabric8io/kubernetes-client [2] https://github.com/fkorotkov/k8s-kotlin-dsl

Kotlin 1.4 6 years ago

They tried addressing some of the limitations of the JVM with native and co-routines. Making multi thread objects mutable, to not allow for race conditions. From a recent conference they backed off because they couldn't express immutability as a good idea.

I started multi platform with F#, Xamarin, and Fable. That worked, but F# doesn't have a wide community. The few F# teams I had been on we spent more time discussing mathematical proofs than delivering business value. I'm also getting to this point now, where I'm trying to build a simple SPA. I'm spending more time wrangling the tooling than delivering features. So that leads too.

I don't think there are good multi platform languages, besides JS. But I think we have a set number of transport means. Websocket, HTTP, HTTP2 to client, with various protocol, and content types. Back end say TCP, Kafka, MQTT, STOMP, etc.

I've been pivoting my focus from mp to schemas. JSON schema, backs async api, open api, and a number of others (aws cloud formation, github, gitlab, etc). With that schema you can now know the transport mean, and the object to be communicated. Additionally with the possible error responses.

The disconnect though is how are those schemas produced, and verified. Having a web framework generate usually results in badly titled methods, or a lot of additional cruft. I usually go contract first. But there are very few frameworks that take in and validate a schema. This leads to a disconnect, I've seen, where the server just doesn't match the schema. I had written a pojo generator for spring, that consumed a schema via gradle and output the response classes, and strongly typed the url paths. But it was met with a ton of resistance, namely because it wasn't maven.

If your back end consumes a schema, and starts the server. Then you know it adheres to the schema. This also allows for asynchronous development. Once the schema is finalized. Mobile, web, and back-end can all work on the same feature. As there are a number of stub container services, that spin up a service container used for integration testing, and generating out client SDKs. The few times I've been able to execute like this, it worked great.

Rust is a really great language. Having come from ocaml, it feels like a natural extension. My hesitation is two fold. One I have been using Kotlin + Intellij for ten years or so. I'd have to relearn a lot of my workflow, and port a lot of helper libs I wrote. Two I can never see using it professionally. All the Rust interviews I attended were white boards of algorithm, and calculus questions. I'm not a math person so that's not really feasible. I do want to take it for a spin in the future. Actix looks darn impressive.

Kotlin 1.4 6 years ago

This sort of echoes what I meant by in my opinion the build system is better on Kotlin, if not more complex. My opinion of course.

Using a library from a big tech vendor I found a number of issues with the definition files. That led to me tossing in ts ignore all over the place, and asking if I could file bug reports on company time. Lerna is the closest for a good multi module project. But that has a number of quirks.

As an aside I keep harping on multi module. But I find they really help with service boundaries, and flow of the application. Allowing dependencies to flow from bottom to top like a pyramid.

The other day I was working on a new proof of concept tool. I started with type script because that's what the team was using. But after cloning the demo from the vendor, it didn't minimize into proper java script. It seemed to be a known bug. I redid it in Kotlin in an hour. Because of the syntactic similarity, the team was able to pick it up. Worked on the first try. Now we just need to fix the TS build.

Incidentally these tooling issues are the bigger plague of the js multi platform. Dukat while great is only as good as the type definitions. There are also so many incongruities with the output. I've come to if I just output js I'm fine. But don't try consuming js. This also was the issue with rescript/reasonml to me.

I can output common websocket/http clients via ktor. Data classes, and other elements. But we have async api, open api, graphql, etc. The core of the multi platform driving business logic is being eaten by good automated tools. What's old is new.

Kotlin 1.4 6 years ago

I've been using Kotlin for a long time for backend/server dev personally and professionally. I've been feeling this more and more recently. I've said a couple times to my colleagues I've backed the wrong horse.

I had been making strong use of multi platform features. The end goal had been to easily move a piece over to a native image for server less if need be. Or output SDKs for Java script libraries. As an example I'm working on a multi platform micro-orm. But due to lack of cohesive reflection. I have to store the class package name in a map to reflect the type on all three platforms.

As to the note about inline types and Valhalla. Or loom for that matter. I have a feeling that will be buried as a compiler option. That needs to be amended in a build file. I have had to do this with JS, native, and a JVM

I'm finding that multi platform out side of mobile and JVM. Are not well polished. Additionally you're carrying a lot of baggage over from the JVM. In regards to it's type limitations and memory management. At the same time it's very impressive to easily target all three platforms. But it's a very difficult task.

Combine this with the few back-end places I've seen using Kotlin for the back end. Limit the features that can be used. To the end that the next Java version can primarily satisfy their needs. I've seen more effort coercing developers not to use sealed classes, null coalescing, co-routines etc. That could just be avoided by staying on Java.

I think it's a good language. It feels like a commonality of a number of the best practices. I've been able to migrate python, ruby, and typescript devs to a ktor setup and have them productive in a week or two. Gradle for all it's warts, I think is a pretty good build system. There is a rich eco-system of existing libraries. It has good performance, easy type semantics to grasp without getting in the user's ways. I feel like it's Typescript with a better build system (opinionated), and light pattern matching. The biggest API stability issue I've had is Gradle. I've carried projects from 0.11 to 1.4 with just nominal code base changes, but big build file changes.

The biggest focus is mobile, followed by Spring back-end. I have been very critical of Spring in my prior posts. There is a road map of Ktor, their in house web frame work coming soon. I'm curious to see where the language goes next. I'm finishing up one project in Kotlin but am eyeing Rust as a possible replacement

* Arch Linux / Manjaro. AUR is a great resource for the latest packages

* i3 / sway. I've built a number of custom patches on top of it.

* Windows Aero Snap - a close second

* MacOs - Yabai + skhd a very distant third. Mac doesn't just play as well with tiling.

* LibVirt / Virt Manager / CockPit / VFIO. I have a number of VMs emulating mac, windows, and linux. My workstation is all three in one. I also have a local kube cluster spun up via the libvirt api.

* JetBrains - Tool Suite They're tooling is phenomenal

* vim / nvim - My secondary editor for quick changes.

* Visual Studio Code - Primarily for remote sharing work spaces.

* Git - I keep almost everything in a git store of some sort.

* zsh and oh my zsh, great plugins.

* Kitty - terminal with the kittens plugins is great

* Direnv + EnvFile, dynamic loading of container env vars on entering a directory

* GitLab - Despite it's warts the best dev ops cloud agnostic platform I've used.

* Kotlin - I'm able to do pretty much everything in this. From vim over ssh or jetbrains. I use it for infrastructure, k8, mobile, web, and back end.

* Gradle - I curse at it a lot, but less than other build systems. I have templates that allow me to quick start any of the above templates.

* Remote Desktop - I keep a cheap dedicated server I RDP for heavy work loads while away from my workstation

* Reg Ex Pal - to validate reg ex

* Functional Programming

* Markdown / Restructured text - Great way to write docs and draft architectural plans

* MermaidJS, Lucid Chart - Easily embedded in markdown to provide graphs of architectural patterns.

* OpenAPI/AsyncAPI/GraphQL - Schema driven design let's me write the schema first, then generate type safe routes for the server, and clients for the consumers (web/mobile)

* Avro, Protobuf, Json Schema - For defining messages going across the wire.

* Containers - I started with solaris zones and it has been vital to my workflow.

* Docker Compose - This is the lowest barrier to providing a container stack for local dev. Next would be KIND.

* Docsify, Sphinx / etc. Easy way to add architectural docs next to the api docs as part of git pages.

That being said, I generally am unable to use a majority of these in my day job. So I'm operating much slower than I'm capable of.

I'd be curious to hear more about the issues with joins, and dynamic conditionals. I've been working on a type provider lib for sql in kotlin[1].

The join problems I've seen are either the joined table has changed, or altered. The return type of a field may change.

The hard problem I encountered was doing things like json aggs, multiple joins, etc. I'm trying to address this by doing type safe aggregate/join functions. Secondly is query compilation. Compiling the output record of advanced queries into an automatic data class.

1: https://gitlab.com/AnimusDesign/kotlin-frm

I'm mixed on the cost of living to salary argument. If I provide X value to a company. Say I complete a project that generates Y revenue. Why am I now docked on pay, because I'm choosing to live in a lower cost of area. Have I contributed less to compete this business item that now generates revenue. I find I'm more productive working remotely. So I'm doing more to drive that revenue line for the company.

I think this comes down, we're not paid based on revenue we generate. But to keep us out of the talent pool. Or how much an adjacent firm may be willing to pay us. I don't believe it's based on what I can offer.

The next argument is on market salary demand. I live locally in a market that makes no use of my technical skill set. If I need to keep cash flowing I find any three month contract to keep the lights on. But then I go back to being remote, and compete on a remote pool.

Now we're on a remote pool set. America, or another cheaper to live country. If it's an external firm, do we have a middle company that can handle that tax implications. So we can hire a developer in Southern Asia or Europe. That role can now be filled for a drastic monetary reduction. But at the cost of management over head. Time zone difference, communication lag, better remote processes / documentation, etc. I've helped a few teams acclimate to these off shore changes.

As an aside I always found it odd companies that outsource a majority of their development to an off shore firm. That will never be on site. But if a full time, on site, employee asked for a wfh to watch a sick kid, they had to burn a PTO day.

Compared to an off shore developer there is one thing a country local developer may offer. Better communication with stake holders. Working in the same time zone. Communication especially remote is a big deal. I've seen a number of teams not be able to adapt to the time zone difference or communication differences.

I went to work for a FAANG company several years ago. I took a 35% pay cut off my last local job, while my rent increased by about 60%. I did it for the experience. I've never seen the high FAANG salaries people talk about, but that's just me. I'm also horrible at leet code / hacker rank so there's that, and I studied for over a year on hacker rank to get that job.

As to my experience with cost of living adjustment frankly they've been border line insulting. Locally, on site, if I find a role that uses most of my skills I'm looking 150/180(full time / w2 contract). I had a fully remote contract role, that used all my skills and challenged me. That paid me 245. I always look at my rate as what is the given task and job duties, because I generally work medium to long term contracts. Senior Software, vs Dev Ops, vs SRE, vs Product manager all have different salary bands. I don't have a blanket salary, it's always what's the role you're asking me to do.

When I first got a COL adjustment rate, I laughed. Then I became frustrated, and then I ignored COL adjusted salaries. Coming off a local contract role at 165, I was in talks for a more senior position, full time remote. A company out of a high cost of living area no less, started at 95. I'm not against being paid a bit less, but that drastic of a pay cut is insulting to senior staff. If you're going to pay me less, I want to know why.

Regardless of locale, I'm incurring more costs. I pay for better internet, stocking of coffee/pantry, electricity, and the big expense space. I still live in a city. Getting a second bed room can help a lot ensure a better work from home environment.

Globalization is going to become very interesting. I moved from New York for about a 10% salary reduction, while halving my rent. The determining factor is politics, and how people can adapt to working remotely.

I recently gave up on home network clustering/kubernetes. I've since moved to digital ocean. I was working on data heavy apps for testing. I had several SSD zfs pools which was the driving reason, and a lot of RAM to work with.

My setup did work initially. I had a dedicated server acting as the metal lb, about 20$ a month. That was then connected through a wireguard tunnel to my home dmz network. Which backed to a dual xeon v2 work station. The latency was very good under 20ms, and really good speeds. I'm lucky to have fios in my area.

The Xeon workstation died, I then backed up to several think pads. Those were not performant either. So I got several HP t610 nodes, raspberry pi speed with sata 3. Rook took all CPU, and to boot they were running at 90c constantly. Even after re paste and with fan mods. I didn't want five little space heaters next to my desk.

After all this I ditched the home setup. I had gotten parts for a local Epyc server after my xeon's died. But sold them due the current situation.

In the end I had wanted to start a series of blogs on Kubernetes and micro service development. To help me learn and flesh out my under standing of Kubernetes.

I don't feel I wasted several months setting up Kube. I now know about under the cover stuff. Having deployed OkD, Rancher, kubespray, and kube adm. The initial wire guard set up helped cement a lot of the internal networking model. I was mildly acquainted with having worked on openvswitch and open stack before.

If you're doing local. I would really recommend a Ryzen 1600af (6c/12t zen+ 65w), either asrock rack x470, or a basic b450. Both can take ECC, and should land a little node under 500ish or so. There are also SFF PCs Lenovo ThinkCentre M93, comes to mind. But at that price 90$ a node, I'd rather move up the stack a little bit.

If you're waiting to buy local. DigitalOcean has been very well priced. If you want to learn the internals, grab a dedicated server and set up KVM, to get familiar with the internals. On the upper end you can get a new ryzen 3rd gen dedicated for 90$ a month. I look at it as a 90$ class I take once.

I'm not saying Kube is always right. But I avoided it for a long time, backing up to docker swarm. Now, I feel at a base it's not much more complicated than docker swarm, now that I've done this deep dive. Kube adm is on ease of use with docker swarm to me. Add in Metal LB, and Gitlab to help manage the cluster, you have a personal little cloud. It's also good to know for future job searches.

It's not much different than stadia or nvidia geforce(?).

I played online multi player games. If you have a 144hz gsync/freesync monitor. Then this isn't meant for that. But it was totally playable.

The weak portion is you're beholden to your internet. Traveling for work it didn't work at all. Most places I stayed had very slow internet and then the latency became unplayable.

I see this as a completely viable option if you're on Linux, or Mac and want to game every now and then. Or if you're waiting for a new GPU to come out and still want to game.

I used paper space for remote gaming via Parsec. I also purchased one of their machines for remote development purposes. While I was waiting for parts to fix my laptop.

The service was really good. The machine was fast, with RDP it felt close to local. They also offered very powerful hard ware.

I moved on because it was a bit pricey at that point. This was about a year, year and a half ago. I think it was about 50 a month for me. I moved onto a dedicated server that I used KVM and LibVirt to manage.

That worked but it's obviously a lot of over head.

I've wanted to do a deep dive into Github vs Gitlab for projects. But I'm a bit hesitant to have that on my blog. Unfortunately most places I've been pushing for anything other than Github is not well received.

That being said I've been using GitLab for a several years.

Right now is a perfect example of why I use GitLab. I just started a role, and I'm working to improving pull request and CI/CD visibility. This is automatically baked into GitLab. To the point I just copy a template for all my projects. But now I'm writing a bunch of custom integrations, and talking to a number of different third party services. Even with all the extra work it feels less polished than GitLab.

With Kubernetes, Serverless, and prometheus metrics integration. Gitlab hand's down provides the best visibility into a release or sprint from what I've seen. There are pain points, but I have very little in the way of complaints.

You guys have also been great for the open source community. I got a Gold open source license and am using it for a number of projects.

I've converted a number of people to GitLab, now we just need to find places that will let us use it.

I've been thinking of leaving for the past several years. But as the primary income for my house hold, I need the higher pay of tech.

I've gone to a number of career counselors. Trying to find something else to do. I have a number of other passions/interests. Just not sure how to turn them into a career? How did other people determine an alternate career to get into?

When I first started learning to program. Every three months I switched languages/stacks, re-implemented a project in that language. Trying to learn the different approaches to development.

I also brought this on when I was a tech lead. Twice a month we would do code katas. Where we would do exercises together in a new language, or library. To continue learning, see if we could do things better.

I ended up in a similar place Functional(ocaml/ML) and multi platform (shared code for back end, mobile, web, and ops).

One of the problems I'm having right now, and is making me want to leave software. I can't find many roles that match that style. My brain hard locks when I try and go back to OOP at this point. I love programming, and working with the community. But right now I feel like I'm banging my head into a wall. Has any one else had this problem?

I'm a big proponent of contract and document based development. Easing on boarding, and correlating the current architecture with active documentation. I usually keep software centric, in git along side the code.

Coming from Python I was a big fan of sphinx. With Graphviz we were able to embed flow charts of micro services. It worked very well. There are a number of extensions made it very powerful.

I switched because it felt close to markdown but not markdown. I now use docsify[0].js. There are a few things I miss. But it's an easier transition as my docstrings are also markdown. So no context switching.

Markdown is very bare. But that I feel keeps the documentation simple. With less knobs to twist, the documentation has less accents to it. With that limited range I feel it's more important to have a style guide.

[0] https://docsify.js.org/#/

I spent a lot of time going to angel rounds, vc meetups. Talking to a lot of people about their issues, what they needed. It was a great way to get exposed to a myriad of problems. Angel.co is also a good one for finding places where some one has an idea, but needs tech help.

The problem I had. Is that a majority of what I came across was mobile and web orientated. As a back-end dev, it's not something I can help with. Especially when for the pitch deck metrics/numbers and a pretty demo are the big selling points.

Honest question, is this worth it? I've noticed the same thing. Most requirements are simple, and can be done via upwork freelancer etc. What you can provide is extra customer service or maintenance. But that seems like a race to the bottom.

Whenever I come across these, it's in the territory of not worth my free time. But for the more complex projects they want a whole team, and I've found it's difficult as a solo person to sale that.

Not laid off from this, but I was last Oct. Unemployed for three months, started in January. Realized I didn't fit with the team and just took a new short term contract. That caused me to burn through some of my savings. It's been one thing after the other recently.

I'm really nervous after this contract is up. I already didn't see anything in the market. Most recruiters, and even jobs told me I was too senior for what they were looking for, or to expensive. Even cutting my rates drastically and going for mid level / entry level engineering positions. Or reducing my resume.

I'm looking at my burn rate and have about four months, right now. Honestly I was looking at getting out of software all together after last October. Every project I've been on is shuttered due to budget, or outsourced. Every six months or so looking for new work, now this.

My inbox is still being hit up with roles in NYC, San Fran, Seattle on site / on premise. I don't know if they'll come to fruition. I just worry about volatility. I just find it odd to see people still hiring.

Hope everyone is safe out there, and can keep the bare essentials running.

I agree with you. I think the next few JDK versions will bring back a lot of java devs. There was even a talk at the recent kotlin conf around it.

A lot of the back-end Kotlin I see. Is really java lite. A lot of the beneficial features I see of the language aren't really being used. At that point, why not just use Java?

I make use of a ton of features outside of Java. But I'm a very small minority from what I've seen.

I really like Kotlin for full stack development. Unfortunately most shops are still using Spring. Which I feel really limits the languages potential. I've ended up on Vertx, but I am a bit concerned about it's lack of traction.

* Routes can be based off Open API (contract first), or a simple route via string

* First class GraphQL support

* Full ecosystem for DB, message bus, etc.

* PolyGlot, with a message bus and bindings for a number of different languages.

* For data persistence I use JaSync with a custom micro-orm, noted below. This provides non blocking async support.

With Kotlin multi platform, and typescript definitions in alpha. I can generate the data classes to a typescript interface. Have my react project pull those in, and use the data. If I need to do pub/sub over web sockets into react that's also supported by Vertx. This drastically reduces bugs, and developer time. As the data models are directly incremented and released with the back-end. The front-end doesn't have to write additional code. The Typescript project does need to install a kotlin dep, but that gets minimized. A few kilobytes to ease development inter opt is worth it. The message bus also does pub/sub to iOS/Android.

I've switched to kotlinx serialization. I have some parts running on native llvm+clang, graal/jdk and nodejs. So I need the modules to be easily serialized on different platforms.

This scales from a simple monolith. To if I need AOT compilation to Graal then running through KNative. I generally start projects as a hybrid monolith. But found it's scaled really well.

I'm really excited for the compiler api / arrow meta compiler. I'm looking into ahead of time compilation of the queries. Automatically generating data classes for more advanced queries. Think joins, or json aggs. Additionally compiling the ORM calls into actual SQL strings.

* Multi platform kotlin micro orm (MariaDB + Postgres) only right now. Closest JDK analogy is Jooq.

https://animusdesign.gitlab.io/kotlin-frm/#/./sql

Editing formatting