That should literally never be the case for a developer though.
You can always be improving the documentation, increasing the test coverage, optimizing for speed/bandwidth/complexity/some other metric you've measured, working out how to measure something, learning new tools or tech that could be applied to a project, working on a spike for some future feature that needs upfront research.
If you see those things as "the boring bits" that you don't want to do then you're not a developer. You're a hacker. You want to hack what you see as the fun stuff rather than developing complete, robust applications that can ship. That's fine, and loads of fun, but no one will pay you to that. You don't get a role like that unless you're some sort of programming savant on a par with the likes of John Carmack or Fabrice Bellard - someone has proven they can invent amazing things by being left to their own devices. Unfortunately, you really need to prove yourself first before you can land a gig like that. If it was easy we'd all have done it.
> If you see those things as "the boring bits" that you don't want to do then you're not a developer.
Don't we already have enough gatekeeping in software development? I don't particularly enjoy writing documentation, despite how important I know it to be. That doesn't make me "not a developer." If I were lazy and simply chose not to do the things that bored me (despite their importance), it might make me a bad developer (or more accurately a developer of bad software).
I design and implement software. That makes me a software developer. The pieces of that process that I find boring or exciting are tangentially related at best.
No. In fact I hope anyone who's actually worked in the software industry would see that we don't have nearly enough!
Look I'll agree with you about the evils of gatekeeping if we're talking about who gets to call themselves an artist or a writer. Those kinds of distinctions rarely create life or death consequences.
But software can. Not all the time, but certainly in medical, airplane control, banking and financial, and many many more areas.
I wish software would take notes from other engineering fields like structural or architectural. Can you imagine an engineer building a bridge who was like "I don't want to do the boring stuff like stress analysis or geological surveys, I just want to make cool shapes and build them!" Can you imagine trusting your life to a bridge built like that?
Software increasingly runs our world and real software engineers who work on things that really actually matter know they have a responsibility to "do all the boring things" because those things are essential to doing their job right. Hearing about major hacks and exploits every day like SolarWinds, Experian, Facebook that expose our personal information and put us at risk makes me feel like we desperately need more gatekeeping in our field to keep cowboys and hackers from getting the chance to get anywhere near these systems.
I've been in this career for 20 years and the thing I learn more and more is that writing code is perhaps the most trivial aspect of what we do. It's everything around it -- the process, the testing, the security, the collaboration and how teams and organizations operate that are the real challenges to be solved. Anyone can hack together some working code. The hard part is the systems and organizational structures in which it operates.
There are plenty of things to work on in software which are of no real consequence, but as the OP is finding it's pretty difficult to find someone who wants to pay you to work on something which has no value. That's called a hobby not a profession.
If they wanted someone to just write documentation you wouldn't be hired. A technical writer would be.
If they wanted someone to just test you wouldn't be hired. A QA person would.
Same for whatever processes you create. They would hire a process specialist.
Same for project management. They would hire a pmp certified person first.
Same for business analysis and business requirement gathering.
As a developer there are better people to do all of those jobs at better rates. None of them can code. That's why you are hired. If you couldn't do that than your qa abilities don't matter.
Things have changed over 20 years. Not every company has a qa team or bas or support team. So these tasks end up being picked up by the developer. Often if this slows development teams are created of non-developer specialists. Some developers end up doing very little coding because your job is to go to meetings about projects that never start. But you are still hired to code they just need you on standby.
Anyone cannot hack together something that works. Only a developer can. A hacker would find ways to use an existing system in an unintended ways.
Gatekeeping over this makes you more management than developer.
The tao of programming has a different understanding of what a developer is and isn't
In reality, for a lot of people, if you start refactoring the codebase while waiting for a new task you are likely to break something and its just not worth the hassle for the developer or the company.
Learning new tools is always great ofc but it can be very hard to find the motivation in such a role, where unless you are a senior developer, you probably won't have much say on adoption, and you will likley just develop a half baked understanding of a new library that you will never get to use in production. Its much better to have some real free time where you can focus on your own projects and learn that way.
So in short, maybe it should never be the case that devs are in that position, but it often is. Especially for devs with less experience
The risk of this is in proportion to the lack of test coverage. If you are afraid to refactor, this should be an indication that you need to apply more test coverage, so do that first.
> That should literally never be the case for a developer though.
After 20+ years I've both been in such a position FULL TIME, as have others (eg: Many devs at ServiceNow) - hired on to work on cool things at an old small company and then literally sat around every day with no tasks and no responsibilities while everyone around me either didn't show up or watched TV on their monitors (open-plan btw).
I've seen big company devs do the same, making up busy-work tasks and literally not committing any code for months at a time playing the priority-game of "wait until something more important comes up, someone else will make a workaround" which was surprisingly effective.
The reality that a developer shows up and have nothing to do happens OFTEN in all sorts of organizations - eg last day of sprint, how many times have you pulled in a new multi-day ticket? Developer accountability is at an all-time low when software developers (across many sub-disciplines) can't make accurate estimates, can't meet anyone's estimates anyway, and are at an all-time-high demand. Managers are in a different boat, but same result. Perverse incentives and lack of a consensus (or willpower) on what constitutes value makes for do-nothing-and-get-paid while someone else does the work.
That is not the same as having nothing to do.
At a certain "senior" level (in terms of attitude rather than job title) you're expected to be a self-starter and think of things to do for yourself. Once you can do that you have no excuse for having nothing to do.
I do learning in work time. Learning could be backup for when there is truly nothing to do, like when git is down or something. But those chances are so rare, that I have to learn while there is stuff to do.
> eg last day of sprint, how many times have you pulled in a new multi-day ticket?
I was in exactly one team where you would wait on this situation. In literally all other teams, it was 100% normal to work on something multiday for next sprint. And that one team was dysfunctional in more then one way.
Well put. Professional software is only a mean for business not an end by itself. I recommend not deriving your satisfaction from code only if you work for a company otherwise you risk to both spoil your hobby and always be unhappy at work.
Probably the best way to apply the “if you have time to lean, you have time to clean” mindset, if it must assert itself, is to actually let developers stuff packages or weed the grounds or something else that can clear their minds. :)
This point parallels the distinction made in the Software Engineering at Google flamingo book between programming and engineering. Engineering comprises the tools and processes to maintain software over time (this is a rough paraphrase), of which docs, for example, is essential.
So to use their language with your point: this sounds purely like programming and perhaps not engineering.