Everyone has their pet theory of what creates the mythical 10x developer. Here’s my 2 crucial ingredients:
-
Discipline to keep things re-usable.
-
Playful exploration of novel areas, which creates proof of concepts for future work.
Here’s a recent example:
Client Request
A client asks me to package a TensorFlow AI for production deployment on their Windows client machines. They need it to run on end-user PCs, with GPU acceleration, and it has to “just work.”
Coincidence? strikes!
Coincidentally (see #2 above), I was playing around with TensorFlow Lite + OpenGL in a hobby project before. Coincidentally (see #1 above), I still have a copy of the code+artifacts and some build logs and my notes on how things work.
I unzip my archive of the Bazel folder:
- TensorFlow Lite
- GPU delegate
- OpenGL converter
… all statically linked into a huge .lib and nicely arranged with all headers.
Time to do the work
20 lines of C++ glue code to call the AI and expose an extern "C" interface.
20 lines of Bazel to link the new code as a DLL while linking against the prepared TF .lib.
Baking Time
I watch the lights flicker as that 16 core Ryzen monster workstation eclipses 1000W of power usage at 99% CPU and roughly 190GB of RAM usage. Bazel is really good at parallellizing compiler tasks. And TensorFlow is surprisingly large.
An hour later, I send my client a single DLL which has no dependencies apart from the Visual Studio runtime libraries.
Because it’s a single DLL with an extern "C" interface,
my client can easily load this in C++, C#, Python, Go, Java, Ruby, Rust …
Plus it only uses OpenGL for the AI kernels, so it’ll “just work”, from smartphone to server.
Alternatives
Of course, you could also package the thing with Python. But good luck preparing a setup that will work truly everywhere and with full GPU acceleration.
Maybe some client PCs will have AMD GPUs and need OpenCL instead of CUDA. Oops, you now need to recompile all your Python packages. It’ll probably take you 1-2 weeks.
And that means you’re now 10x slower than the person who was prepared.
Summary
The “10x developer” has done the prep work ahead of time.
They enjoy the process of coding, exploring new technologies, trying them out, and they somehow manage remaining disciplined enough to keep components re-usable across use cases. If you’re in this business for long enough, you just know that some problems come up again and again.
The 2nd time you see that problem, you’re ready. Everyone else is scrambling. That’s how you 10x em.
Happy packaging :)