I have a set of overlays for various packages and try to submit updates and improvements upstream. Having some experience with making packages for other package managers, I found making Nix derivations easier than RPM or deb packages and about as difficult as Arch PKGBUILDs. stdenv automates a lot of work, and when a package uses a standardized configuration/build system (autotools, cmake, cargo), most of the work is in finding/adding the dependencies.
I did some Haskell programming ~6-7 years ago, so the learning curve for the Nix language was probably less steep.
The primary difficulty I found is that not everything is documented equally well and you often have to poke through nixpkgs to find examples and/or good practices.
also more difficult to have confidence that the software I write would work on other Linux distros
I guess I have been lucky that I write work-related code mostly in Go and Rust, so building on other systems is never really a problem. But for C/C++ projects I would just compile in an Ubuntu container as well.