Settling in a software development job may not only limit your learning but also damage your mindset in the long term.
One of the things I found most attractive about my various periods as a contractor¹ over the years in the grand game of software engineering was the ability to move around from job to job on a frequent basis.
Not only did I free myself from office politics, enjoy the happiness of out-earning ineffective and often vindictive anti-contractor management, but I was able to bring my own very specific technical skills to a role.
This made me happy as the skills I was best at were, naturally, the ones I enjoyed using — and by using them more and more I got better and better at them. Well, at least I thought so…
Management types might call this win-win, I call it doing what you love and having fun while you’re doing it².
I was also able to steer my career in specific directions by carefully choosing new contracts that offered me a chance to cross-learn new technologies somewhat adjacent to my own.
Through all this I kept pretty fresh (exciting!), learned the things I wanted to learn, did the things I wanted to do, and could easily turn down or walk away from the things I didn’t.
The only downsides were the added paperwork (get a good accountant to fix this), unpaid holidays (be good at budgeting), and resting times between jobs (rare, but economy dependent, also allows you to do a lot of gaming).
In addition, if I wanted to get into a new area then the onus was on me to learn it, get good at it, and attempt to blag my foot in the door without any practical experience. Once you’re in, you’re golden, that’s the fun.
These also keep you fresh as everything is a real challenge.
What worked against contracting, at least for me, was the necessity of having to often commute larger distances and spend a fair amount of my own time on this unpaid frustrating exercise.