Why ‘your’ programmers just want to code
hackernoon.com
hackernoon.com
The amount of micro-management that goes into most programmers day to day work makes it extremely hard to be innovative, because you essentially have to justify what you're working on daily -- and any creative person knows that not every idea pans out. You need managerial support to occasionally make mistakes.
There have been a lot of times in other jobs where we'd have a slack in our schedule and I used the down time to make a change that was really necessary and took a minimal amount of time, mentioned it in a standup meeting, and got blasted for not working on our "commitments" for the "sprint" (even when I had nothing to do).
Companies always talk about wanting ideas from workers and how important innovation is, but they're not willing to extend the trust to their people to create an environment where that can happen. People naturally become disengaged when they're not trusted or valued.
The worst part is that it's not just management creating this mentality, it's the other programmers. I've noticed that younger more inexperienced programmers tend to crave the structure of agile, whereas the older more experienced programmers chafe at it. I think if programming had more of a culture of apprenticeship and mentorship, and a deeper appreciation that this is hard and it takes a long time to get good at it, our industry would be a lot healthier.
Scrum is more about keeping your fellow engineers informed on what they are working on so incompatible things rise quickly. It shouldn't be used as a tool for micro management but instead reviewed at the end of each sprint.
If a process isn't getting you what you want then change it. Is it any wonder that repeating a broken process gets you broken results each time?
That is regardless of agile or whatever development methodology you use.
I am also a big believer in hard short deadlines when it comes to doing releases. When the deadline comes, release what you have ready and put it behind a feature toggle if needed to do a phased rollout.
If you encounter situations where you are being micromanaged, try to place yourself in the role of the one who is micromanaging and try to see his challenges. That person is just somebody who is trying do his best. No one wants to suck the joy and energy out of his or her colleagues.
This is the nonfalsifiability of a religion surfacing.
THIS is the problem. This very thing.
The implement is ALWAYS blamed.
I'd tend to think the latter are "doing it wrong", but then again, who am I to say? I just know I much preferred working for the companies who did it the former way.
Also, need to ask question should not require whole team meeting.
And if the response is it's a verb not not a noun then it's really nothing but good hackers employing tried and true practices.
Granted, my team is small and close-knit. But the idea that keeping others informed of what you're doing is considered "asking permission" points to some serious pathology on your team.
And that pathology is not agile or scrum. We do scrum, and I'm sort of lukewarm about how much I like scrum. But whether we're doing scrum or something else, I am completely empowered to make my own decisions about my work. And I simultaneously value that the rest of my team keeps me informed of what they're doing. This is how we kick ass.
The reason you can't really apply "Agile" to research is that having a useful product at the end of each sprint is a central to Agile development but runs contrary to the purpose of research.
Now, you still need to manage your research process. You need to identify the specific research questions you need to answer, and you need to bound the time investment. But let's not try too hard to shoehorn a methodology primarily oriented towards IT consulting into every other domain.
It sounds like you created the tasks yourself and added them to the backlog mid-sprint. If that's what you did I'd be totally cool with it but I can tell you a lot of "agile shops" would blow a gasket over that.
There have been a lot of times in other jobs where we'd have a slack in our schedule and I used the down time to make a change that was really necessary and took a minimal amount of time, mentioned it in a standup meeting, and got blasted for not working on our "commitments" for the "sprint" (even when I had nothing to do).
> The worst part is that it's not just management creating this mentality, it's the other programmers. I've noticed that younger more inexperienced programmers tend to crave the structure of agile, whereas the older more experienced programmers chafe at it.
> I think if programming had more of a culture of apprenticeship and mentorship, and a deeper appreciation that this is hard and it takes a long time to get good at it, our industry would be a lot healthier.
That doesn't really have anything to do with agile or scrum though. Just add a refactor/investigation task to the backlog for the sprint. Those types of activities should be justifiable too. If your team doesn't allow those types of tasks for some reason, that's more of a team problem than a problem with agile.
Think of it this way, in relationships, business or otherwise, what's sub-communicated is just as important as what's explicitly communicated. Often it's more important. And what's communicated via most agile processes is that programmers are unimportant cogs with no business knowledge that can't be trusted to not stray from important tasks. I think that's ugly.
When you buy a grocery product you get a list of every ingredient and all the nutritional info.
It's nothing more than transparency and accountability. The one paying the money wants and deserves to know what it's for.
Also, software development is quite a bit different than other engineering disciplines, at least at the application development level.
Part of the argument is that often the more junior members of them team know the surgeons are making mistakes, but there's no way for them to point this out without being bullied. Anectodes include the wrong leg being cut off while members of the medical team know it's the wrong one, but darent risk their career to mention it.
I'm not sure how this relates to your comment, except your line about other professions reminded me.
On my team, agile is a process used among peers to coordinate. No one is a cog. No one is checking up on anyone. We keep each other aware of what's going on because you have to in order to coordinate and collaborate. My manager is just one voice among many on the team. He isn't tasked with monitoring my work because I don't need a babysitter.
I'm sorry that you work somewhere where you feel someone's monitoring or checking up on you. Where I work that kind of situation is called a Performance Improvement Plan. If you're not in that situation and are a highly productive individual, then your culture is broken and you should look for a different job.
But you're wrong that agile and scrum are at fault. If you used any other process, you'd have the same problem.
Anecdotally, the last place I worked, I was on a small team that didn't really do agile. This was composed of some of the most competent, extremely smart people I've ever worked with that had decades of experience in the CAD field and had worked together for a very long time. We're talking people with like dual PhDs from very respected universities that have been working in the field for like 20 years; kept very sharp by going to C++ conferences, were very particular about testing and code reviews, and so on. I remember the corporate office tried to impose agile on these people, and after humoring it for about a month the whole thing was mercifully abandoned because everyone felt like it was ridiculous and it was slowing things down and causing a bunch of friction when some ridiculous consultant wanted us to do "planning poker". The only people that really wanted it in the first place were essentially remote project managers that were annoyed with these uppity engineers that thought they knew better (which frankly: they did; 20 years writing CAD software and you're going to learn a thing or two, whereas the project managers were pretty much just dabblers -- and when they couldn't convince people to do what they wanted by merits of their argument, they just wanted to install "process" to essentially strong-arm people into doing their will)
If you can't answer "why are you working on this?" easily then you're not doing your job. And if you resent being asked the question, then you either are self employed or you forgot who pays your salary.
It is a balancing act. You do not want to waste company time with oddball ideas, and some of your ideas will be oddball. You need to seek feedback on them so that they can be improved. You need freedom to try them out, and fail. I think this article is good for both managers and developers. Developers should know that this pattern is real, and there are things you can do to protect yourself from going down this path. For me, its basically not always asking for permission to try stuff out... take a risk and believe in yourself, but also get feedback to filter out oddball ideas that waste time.
The downside is when it doesn't pan out, you can have a bit of catching up to do.
That is so true as I am catching up now on a Saturday. You also learn to not roll your own solutions and check a second or third time for a solution on Github or open source community.... and check again if you don't find it.
That works for some things, but not the others. For instance, right now I can almost mathematically prove that we're building the wrong thing, starting from 2 very "common sense" and reasonably easy-to-believe "axioms". I have no trouble convincing fellow engineers that we're not building the right thing, but that's more harmful than useful. I've managed to convince some director-level people, but trying to bring this up to VP-level yielded clear warning signs that not only will I achieve nothing, but it's going to be a career limiting move. The Upton Sinclair quote is quite true - "It is difficult to get a man to understand something, when his salary depends on his not understanding it."
In the meanwhile, my company spent in excess of two years, and increasingly more resources trying to build the same thing and being not an inch nearer to their true goal - I wonder how soon till the outside world starts to notice. The CEO is frustrated because the strategy is sound and he doesn't get why it's not getting done. In the meanwhile, trying to tell to the VP that the tactics is wrong (and how it's wrong, and how to fix it) gets you the axe. It's messed up, but all I can do right now is say "it's not my job to fix this mess" and play along with it/ learn interesting technologies & cash my cheques. :(
I've made the mistake recently of being too detailed an open about the joe and it's come back to bite me since we have "gone agile". I try to be as vague as possible now. The less they know the better. We do have Code reviews by the "dev lead" since most of the other developers are junior, but luckily, I am the "dev lead".
Lifers at the company dont care about new ideas, and any effort to change is met with cynicism and vitriol.
If you have ideas that are both "complete" and relevant to the business, you're right to be ticked.
If you're just spitballing about "things that could be better" without concrete information about what quantifies "better", you're probably not being taken seriously.
Was having design decision overridden by a PM wh had never worked a day as an engineer.
1 - as the article describes, I've been shown an environment that is hostile or apathetic to any of my ideas.
2. When I am with a team I trust to make well-considered, well-timed, well.communicared decisions. Sure, I participate more when in planned or unplanned meetings and my interest level/enthusiasm is high, but my main value-add is to code. If others are great at their jobs I'm free to try to be great at mine. Coders are problem solvers. If the biggest "problems" are my code, then that is where I will focus.
It is worth noting that we've chosen a career about programming, most of us because we enjoy it. At the start of our careers we are constantly learning, feeling accomplished, and have a amount of time to focus on coding. Over time we start contributing in less direct ways - planning features, scheduling, mentoring. The projects get bigger and more complex. We learn the "easy" parts of the craft and start wrestling with the harder, more subtle, and more long-term aspects.
All good stuff that enables more pushing of that Skinner button (coding)...but we get that sense of accomplishment less and less often even as the stakes involved increase. So we yearn for the earlier days and try to recapture that feeling.
We use and write tools that allow for ever-increasing efficiencies. Humans in meetings? Relatively nothing has improved in decades...it is easy to have that feel like time in a meeting is a waste.
We are solution discovering junkies - don't be surprised when we try and find the high.
I had one process that I designed that wasn't reliable. I didn't realize it until the volume started going up. The people in the field were complaining about the process not working reliably, somehow that got translated to senior management as "performance issues", by the time it got back to the "scrum master" and my immediate managers, I was being criticized about working on "the wrong thing" because I was focusing on health checks, auto recovery, scalabiliy, high availability, and most importantly improved logging to determine what the issues were instead of making it faster - ie improving the speed (performance).
After much arguing, I was able to prioritize one improvement that would improve reliability when processing large data sets and I was able to prioritize logging of both successes, failures and time it took to run queries.
I was not able to prioritize connection resiilliancy even though I knew that was part of the issue.
So we had a big outage while we were working on the "performance issues" caused by spotty network connections that could be improved if we implemented retry logic (that got deprioritized). But we couldn't add the resiliency because it wasn't going to make things faster and it wasn't part of the sprint. What was even worse was that part of the exception message from Entity Framework said that the error was "transient" and that we need to Implement a resiliency policy.
Another part of the issue was based on an unoptimuzed set of queries that were causing reliability issues and that was prioritized. But while implementing that, I realized that there were other performance bottlenecks caused by API calls of semi static data that could be cached. I did a simple in memory cache and was lambasted about that since it "wasn't part of the story".
At that point, when you can't change your environment is time to change your environment. But in the meantime, it's a matter of communicating to senior management the decisions that were made by the scrum master and my manager.
On the other hand, I always keep my resume updated, my network fresh, and my skill set in line with the market....
What bothers me more today is that a title, a pay bracket, bothered me; that I am annoyed that I need to come up with a promotion packet. These, to me, are signs that this is just becoming a job. For all of my constant assertions about business relationships and other such comments, I was still holding out hope that it would be more.
So, yeah. Empower your developers. You're paying them a lot of money; make use of and recognize the value of that talent you're buying.
A detailed investigation can easily take a month and then you just make summary of why you rejected it - brevity is often advantage.
These things don't just sneak up on you, at least not if you are planning and scoping your work ahead of time. If your workplace culture doesn't compel you to do that, you should do it anyway, so you don't get into situations like the one you're in.
That's the thing about being an employee at a company: the director says "look into FooBarTech", and so you look into FooBarTech. Ultimately, I agreed that the reasoning behind the investigation - all of the investigations - was sound. Our stack is big enough that any serious attempt to swap out low level technologies is going to take a decent amount of time, and the number of people who understand the whole system to the point where they can even attempt such swaps is small.
So, no, it didn't sneak up - but it still needed to be done, and I was one of three people who could do them without doubling or tripling the required time. Each time I accurately predicted the output, but executives looking to open up new multi-million dollar sales opportunities or to increase their bargaining positions with Cloud Provider X can't rely on predictions.
That said, none of this ameliorates the fact that I effectively have 6 "unproductive" months on my record; that I'm bored to tears of doing work just to throw it away.
I vowed I would never make that mistake again.
The fact that the money and titles are bothering me is the sign that the work isn't something I want to do.
Now, I don't see my next job change as being about money. It's more about using the latest technology that will keep me relevant. But if a company is not willing to pay you market rates, it does tell you something about the company.
But as I've moved up in my career, I've found that the only way to implement the technologies you care about is to both keep your presentation skills sharp and know how to play politics.
That's the tough thing about articles like this. It's an article that is 100% correct, assuming that the developer in question is both talented and on the cusp of enough maturity to grow in response to gentle redirection rather than bristle at it. Problem is, that's a narrow band on the immature/mature spectrum. A more mature developer would address their concerns, a less mature developer will bristle at everything anyway.
* Separating one's immediate emotions from a decision making process
* Proficiency with perspective taking
* A basket of traits along the patience/conscientiousness axis
Those traits often improve with age which is why I tend to lump them under maturity.
As for maturity, what works the best in my view is to hire people of equally high competence but with different levels of experience. You need those people with 30 years experience, just as you need those right out of college. The former provides wisdom and the latter enthusiasm and optimism.
In addition to culture, programmers might want to just code because their time is so consumed by meetings, support, and chat, that they hardly have the chance during normal work hours to code at all.
especially this comment -
> Existing teams have established relationships, and are easy to offend collectively
https://medium.com/@prajjwalsin/this-sort-of-thing-can-even-...
Fwiw, there are companies/teams who act quite the opposite of this article (encourage ideas..). I've been part of many of them and it's something I try to look for now.
Honestly I'd love to hear ways to actually interview the interviewers on things like this. I feel most of the material I read talks about how to interview candidates, but there's not much about the other way around (how to assess the company you're interviewing with?)
What do you mean when you say they "turned apocryphal"? I've never seen the term apocryphal used like that before.
Not all ideas in a dev shop are about business decisions. They could be about reporting, monitoring, alerting, code quality, technical debt, etc..
But that's not what the article was about really. It was more about guy who sounds like he is sick of foolishness and ignorance but hasn't turned in his notice yet. Or else yet another burnt out cynical person who spent too much time heads down in code.
I'll code what they want the way they want it the best I can. That's the job. This approach can lead to some "I told you so" moments when I've been ignored and I deal with those when we run into them.
Over the years I've seen a lot of my coworkers get overly upset in these kinds of scenarios and have endured way too much time listening to them complain about it.
The thing is, there's almost always more than one way to do something. If it's my job to choose the route I'll do that and lead the way, and if it's not I'll follow the route chosen but I don't see any reason to get hurt or frustrated by it because I'm getting paid the same to work on it no matter which route is taken.
That said, there have been a few times when my route wasn't chosen and we got stuck right where I said we'd get stuck and in those cases the project either collapsed or we went back and started over using the tools and methods I suggested. Doing that "feels good" but it pays the same.
To expect otherwise from one's relationship with an employer, particularly in an at-will employment environment, can be dangerously self-destructive.
If my household budget got tight I wouldn't throw one of my kids out on the street.
I also haven't had 6 different families over 20 years because I didn't like the environment or by getting a new spouse I could make more money...
Or in the words of Netflix "we are a team not a family".
A story was posted here and on /r/gamedev not long ago about a game developer who quit their job and moved to a new town on promise of an interview with some AAA studio (I CBA to remember the specifics right now) but they were so emotionally invested in the hype and culture of that company that they were left in dire straits... when that company simply canceled the interview and passed them up because they said a negative thing about the studio in a forum once.
Unless you're independently wealthy, or not living in the US, and thus protected by a social safety net and strong employment laws, you really can't afford to approach the job market with anything but cynicism.
tldr; programmers need to be leaders too, and schedule regular 1-on-1 meetings with their boss.
It's a good insight that when people only have their ideas shot down, they turn away from that and focus on other things. But I don't appreciate that caring about money is (as usual) cast in a negative light, meanwhile the whole point of a modern business is to turn a profit and make the shareholders money. To the author's point, if the programmer is passionate about market share, and suggests something that leads to market share growth, will they benefit materially from that? If not, isn't that also a reason they would disengage? But see, then we have to talk about paying people instead of just being nice to them when they offer up ideas. That’s a whole different ballgame.
I'm not comfortable with how much this seems to imply that leadership shouldn't try to, you know, lead with the vision for the future and all that nice stuff. Input should be welcomed of course, but at some level, leadership should be thinking and communicating about what should be built, and how the world is going to be changed by your "Uber for sandwiches" app. This is why the leadership will take all the money if/when the business is a success.
And your programmers should care deeply about how the thing gets built. Because, just for one thing, if it gets built wrong, that's going to become a big problem for them.
--
Some other thoughts:
The author talks about how if your non-technical ideas get shot down, you won't bother anymore. It can also go the other way- I've definitely been in situations where my technical ideas got shot down enough that I didn't try to offer anything further.
Many companies (tech and otherwise) are ultimately a set of cliques- if you're in with the right groups, you and your ideas matter. It's not set in stone; the membership of these groups change over time. But you have to fight and strive for a place within them. That is also a reason people disengage: it’s not worth it, and getting there sucks.
It's definitely not good if a team member's interactions are often sarcastic, however, the author's response to the "I told you so" attitude is telling. Usually when people don't like hearing "I told you so" it's because they were in the wrong but don't want to admit it. They'd prefer to move on without doing any thinking or discussion about why the wrong decision was made, and how the team could avoid that in the future. To be clear, it is rude and unhelpful to cop an "I told you so" attitude. But it is also unhelpful and dismissive to label that attitude a problem without digging any further.