One of the most valuable lessons I've ever learned (when it comes to building software) was:
"Keep it simple, as simple (boring) stuff usually works best".
It's usually accompanied with some sort of complexity consideration: what's essential (inherent) complexity and what's accidental complexity, how to measure & manage complexity, etc. The usual stuff.
But believe me or not, there are some cases where simplicity just ain't an option. How so?
What if the source of your competitive advantage is all about going beyond technology's standard (available) capabilities? What if you're walking around the limitations, "hacking" the status quo or even using the tech in a way it was clearly not intended to be used? What if your daily work frequently resembles being involved in a never-ending tug of war ... against other ("hostile") engineers?
Let's bring on some examples. Think about ...
- ... the creators of security scanners/anti-virus software - always on the run to address the new vulnerabilities, attack vectors, exploitation techniques
- ... the forerunners of on-line analytics (e.g. in adtech/fintech) - trying to scrap any data (more-or-less) legally available, merge, mix & deduct meaningful knowledge to improve automated business decisions
- ... the inventors of the next-gen decentralized solutions - breaking privacy-related limitations with bleeding edge cryptography
"Dogfight" development
All these cases have one thing in common. Human intellect is not confronted with virgin markets, unspecified user expectations or meanders of supply/demand economy. You're not just running against the clock (time-to-market). It's literally human intellect versus human intellect - a solution against solution (in a direct, head-to-head confrontation - "there can be only one" (left standing)):
- security specialists vs black hats
- on-line marketing analysts vs privacy sentinels
- next-gen blockchain creators vs criminals who want to exploit its weakness(es)
The simplicity doesn't work here. Cheap tricks fall apart nearly instantaneously. You're either very good or you don't count - runners-up are rarely awarded. If you're in the top, you can make serious money out of it, but if you're not - you scrap the leftovers.
Not everyone's sport
Here comes the most important part. Jumping on such a bandwagon alters your game completely. You'll need ...
- ... different kind of people than a typical software workshop (hackers, "infinite game" addicts, dreamers, missionaries-believers, ones who are TRULY competitive)
- ... much more flexible product shaping regime (very exploratory, deep in low level considerations, with far more R&D-style experimentation where the only rule is no rules)
- ... very open, unconstrained minds - of all participants involved; because the majority of traditional rules do not apply: the end-game (its stakes) justifies all means
Cool, but what's the point of this blog post then?
I've observed that people have inclinations either for traditional or "dogfight" development - it almost NEVER happens that someone performs superbly in both categories. Traditional devs don't have the motivation, guts, flamboyancy & "hacker's attitude" to excel in "dogfight" mode, while the "dogfight" naturals lack discipline, organizational skills and architecture-shaping skills to perform well in more traditional forms of software engineering.
My advice is to be very honest with yourself when self-categorizing. And to aim your career trajectory according to this classification so you don't struggle pointlessly, because you're trying to fit somewhere you would never truly belong.