A reasonable answer but one that pushes several of my buttons. Let me get the more obvious ones out of the way so I can continue the discussion. I decided to leave the industry and the country in 2010, and the industry-related reasons were agile, scrum, and whiteboard interviews. The first two struck me as ridiculous fads and I could no longer do whiteboarding, I identified too strongly with my work and being challenged to impress someone half my age and with a quarter my experience was something I could no longer tolerate.
A year of idleness nearly killed me and I returned, went into freelancing from home, and I was a lot happier. I learned iOS, credit card scanners, and then ASP.NET and worked remotely. I live in Vietnam now.
It was only last September I reacquainted myself with the industry and, well, I am horrified.
I have never viewed software development as a social activity and the only time I had to do pair programming it was clearly intended to push me into quitting my job. It worked. It also harmed me greatly.
So when you talk about cliques and bonds, well, I just don’t get it. I still nurture this idea that software development is a form of engineering, though it absolutely comes nowhere near that.
My expectation is that software developers aspire to the professionalism and discipline of real engineers and are capable of examining an idea on its merits. I can do so. Convince me I’m wrong on some issue and I will painlessly capitulate, concede, and change my habits.
It’s depressing how uncommon this is.
Human nature? Sorry, I cannot accept that as an explanation. Human nature is that which we need to overcome to survive and to have community and cooperation. Human nature is hunt and tribe and kill the intruders. Human nature is bigotry and conquest.
Human nature is savagery.
I reject the concepts of “refactor” and “technical debt.” The imprecision in their meanings makes them unacceptable nomenclature for real work. They are buzz.
If I, as the newbie, identify, and more importantly, objectively justify an inferior practice then the work it creates to improve code quality is incidental to the improvement. It does not mean I expect everyone to drop everything and change the whole codebase; it means I expect the issue to be examined irrespective of who proposed it.
To put it as plainly as I can, I expect people to do rock-solid, legible, stable, and high-quality work because if I have to be at my desk at 3AM Sunday morning (I worked at Microsoft for ten years) then the code I’m working on damned well better be something new and pivotal and not standard everyday stuff that someone did sloppily.
I’ve been rejected by employers because I would not have arrived as a tabula rasa, blank for imprinting like a newly hatched duckling, imprinting with whatever slop standards they had adopted. They may have called me “opinionated,” but what they really wanted was obedience, not experience.
I have a lot of experience, some small amount of what I have the temerity to call wisdom, and I don’t leave all I’ve learned at the door on Day 1.
The industry has changed while I’ve been away, and not for the better. From the beginning I have held high responsibilities; before I finished my third year as a developer I had shipped two Microsoft products singlehandedly, one of them the very first version of one likely familiar to you, the SQL Server Management Console (we called it GUIDE, GUI Database Environment), it was also the very first Microsoft product written in C++. On my last gig I was the entire back-end developer; four servers, database and schema, IIS and site management. One other person did all the browser work and we worked together superlatively.
It was when we found ourselves working for a dev lead to spoke in Agile Newspeak that we both got disgusted; the front-end guy quit and I soon followed.
Now? Managers don’t like the idea of people who expect to handle broad responsibilities. They sneer at me as an “individualistic” developer whom they would not want on their “team.”
I will never function well in a “team” setting. I’m not combative but I expect others to share my passion for high quality work and my disdain for fads and ephemera; I’ve seen them come and seen most of them go and I cant’ wait for the current ones — agile, scrum, XP, TDD — to go into the night. Design patterns are handy communication shortcuts but that’s all they areand they’re the only ones I would preserve at all.
So if I had a Better Idea and it was rejected for “human nature” reasons I would likely withdraw, become distant and uncommunicative, do my work well but reject the social stuff. In disappointment, not in petulance.
So I work either at a very high level of division with broad ownership, or I work alone. At the moment I’m not even coding, I’m doing technical writing and loving it, though I am ramping up on skills that I know to be in high demand for remote work. Even were I willing to relocate, and I am not, I would never work onsite in the jargon- and process-heavy contemporary industry. It’s more foreign to me than Vietnam will ever be. At least here I can understand the language.