Developer productivity: The art of saying no
localizejs.com
localizejs.com
How do I tell my clients that I only do meetings on Thursdays? If they happen to be unavailable one Thursday, do they have to wait a fortnight before I deign to speak to them again?
Is this guy seriously suggesting that the way to stop being overwhelmed by inbox zero is by using Slack?
And honestly, doing one thing a day - really? How in the world does that work? Sure, doing one thing well is better than doing nothing or half-doing a bunch of things, but surely your goal should be actually doing a reasonable amount of things that reflect a solid day's work - and figuring out a strategy for reliably making that happen.
Perhaps I'm just a grouch today, but it feels like this post is either satire or written from a completely different universe, utterly unrelated to the one I inhabit and work in.
That's not to say that it shouldn't be written, as getting your thoughts out there is always a good exercise. It being on the front page of HN is of questionable use, though. Might be of some utility to anyone who has never read HN before.
Is there any explanation as to why this should be on the front page? This seems rather like Reddit - posts there often seem to rise up while most of the comment section is fairly negative.
> How do I tell my clients that I only do meetings on Thursdays?
I generally do 10-15 customer meetings per week. When I get a meeting request, I ask if they're available on the following Tuesday or Thursday with a 90% hit rate. Meetings are almost always not urgent, so fitting them into Tues and Thurs, instead of spreading them randomly througout the week, has worked really well for me.
> How in the world does [doing 1 thing per day] work? [...] surely your goal should be actually doing a reasonable amount of things
In the context of software development, doing a large number of things usually doesn't push the product forward as much as doing 1 big 2-4 hour project.
Personally I still have 30+ things on my TODO list at any given time, but I try to center my days around getting one "big" thing done, and fill the rest of the day with smaller day-to-day tasks.
I'm glad it works for you guys, but I'm often irritated by these preachy posts which seem to say that developers should be treated as delicate flowers and suggest all manner of strategies to preserve their preferred ways of working, many of which, if you actually applied them to the real world, would result in clients saying, "Wow, these guys are hard to work with, can we please find someone else?"
I would go further than saying this isn't really very revolutionary, rather it describes a fairly normal working environment.
Of course, in those environments, developers cannot say "no", they can either keep working under whatever unreasonable constraints they have, or quit. (I've found this a lot more common in companies where the main focus isn't software development)
I agree it's not very revolutionary, but I still find it useful to read about how other people organize their teams and how it works, and very especially what tools they use (Slack and a few others are on my to-try list).
As a company we really want to spend time sharing what we learn.
This is one of the first posts we've written, so we'll try to improve in the future :)
I too am tired of people discovering this "blog" thing.
Exactly. Totally flies in the face of saying "how high" when someone says "jump".
Not only that but a similar attitude of some old timers in a business that I was in (right out of college) was what allowed me to get their clients.
We live in a world where people want instant gratification and answers to their questions. While there may be cases where timing doesn't matter when you are dealing with sales and closing deals and keeping away the competition I have always found the early bird gets the worm. And sometimes you get the deal just by showing up because the other party is to busy to service the account.
I don't think he is really saying to do just one thing, just that we should hang the success of the day on only one priority. It is somewhat similar to the 'today is the deadline' motto from scrum.
OP can correct me if I'm wrong, but I read this more as "here's the ideal I'm working towards, and I follow it as much as I can unless there's a good reason to break it." Read it that way, and there's actually a lot of good advice in there. I've never met a programmer that didn't need to be in the zone to get big projects done well, and everything mentioned here is good advice towards finding time to get into the zone more often. As a start-up founder, I have a ton of little things I constantly need to do, and following advice like this to get those little things into manageable clusters that allow for less context-switching has been incredibly helpful in getting stuff done.
I'd never heard of some of the tools the author mentioned, and I sometimes forget some of the strategies, and a refresher is always nice. Thanks for the post!
- Software developers who as soon as you tell them what you need, they tell you why it's impossible.
- Network administrators who apparently specialize in making machines not talk to each other, because things worked better before their first day
- DBA's whose first priority is keeping you from accessing the data
- Engineers who think it's their job to make things more difficult
Saying NO to all the things is better than getting nothing done, sure. But having the skill to say yes to the things that are needed is better.
If you're going to ask for something unreasonable from someone with domain expertise, expect to make a concession if you want it done since that person has a high likelihood of understanding the true costs of the request. It is all too common to see developers experience burnout from 60+ hour weeks in order to attempt to meet a deadline because managers were awful at planning.
I often take a more neutral stance through explaining that it would take [X] amount of time to build solid & tested pieces of functionality as designed, and then let the product managers assess the information to come to a decision to either scale back or if it is still pushed for, then push back for a concession. It doesn't have to be a Yes or No proposition, it is like bartering - you want to get to a mutual agreement so all parties are satisfied.
Another pattern I've seen is the dreaded "artificial deadline" from on high. A project is structured to meet a tight deadline, resources are reallocated, nights and weekends are worked, stress ripples through the team. At great emotional expense the deadline is met, and the team submits the project, victorious.
And then nothing is heard for several days. No feedback from the heavens. Inquiries are made, and it's discovered that, well, no, in fact there was no particular reason this project had to be finished by that particular date. Managers have moved on, checkboxes have been checked. Because the project was nominally successful, the episode is used to further confirm the management theory that "the dev team needs deadlines, even arbitrary ones, or things don't get done." The project size and time frame is now baked into management's institutional memory as the new baseline.
Not that I've been the developer in that scenario...
The idea of the Lone Wolf Developer sitting uninterrupted in his office 24/7, building the software in a vacuum, gloriously emerging after three months, on time, with software that perfectly conforms to the requirements, that miraculously works exactly according to the customer's needs, is a myth--incompatible with the reality of professional software development.
This works well once everyone understands it.
Unfortunately for it to work, you tend to have to serve as an internal consultant to a company, write good replies and maintain a lot of documentation and technical standards.
Also in my previous companies members of my team had the tendency to talk a lot in the daily standup, making it last sometimes 20 minutes.
Productivity is all about balance, which is a word that never appears in this article. A blog providing polarizing advice won't be any sort of silver bullet, as the definition of "productive" will, quite often, change completely. One day it may be fielding calls, having meetings, and talking to clients. Another day it may mean sitting in a dark room for ten hours with a coffeemaker, a laptop, and yourself, just banging out bugfixes and feature requests.
This is the kind of concept that should be felt out on a project by project / week by week basis, not with a rigid "WE NEVER DEVIATE!" attitude.
Especially interesting, was that I worked at a place that "required" meetings pretty much every day. I just decided to start skipping them, all of them. Absurdly, nothing happened. I was able to complete all of my work by Tuesday afternoon (skipping the 3 monday meetings).
Then I would meet one-on-one with my boss (who agreed that I could try this out), show him what I did, and by wednesday I started something new. Within a month I convinced three of the teams (3 - 8 people) to start doing this. It was pretty awesome it was to improve productivity by just trying to skip meetings I didn't want to attend anyways.
-Inbox Pause
-Thursday Meetings
-and Do 1 Thing a Day.
I personally use:
-Archive Everything
-Never have meetings... ever.
-and Prioritize
My email is like Chat unfortunately, so much back and forth on projects I really can't afford to only chime in once a day or nothing would ever get done. But everything gets archived unless I'm working on it actively, or I still need to reply.
Meetings... I never meet in person now. The time suck is just horrible awful miserable. I will occasionally have a phone meeting, but they aren't much better, but at least I don't have to take time to shave and drive.
1 thing a day would be nice unless your world consists of 200 little tiny things. So, I prioritize and block out hours to get things done. Then I DO apply 1-thing-a-day to my side-projects so they stay fresh.
To each their own.
If there is one thing I have learned it's that the quality of communication in a team usually makes or breaks the project. The quality of communication with a customer makes or breaks the relationship.
It's important to remember that humans have been communicating for thousands of years without email, chat servers or telephones. Our brains are hard-wired to respond to facial expression, tone of voice and body language.
All of this is lost with computer-mediated communication channels. Your post prompted me to look at this study which you may also find interesting: http://www.academia.edu/538403/Face-to-face_Versus_Computer-...
Don't get me wrong, meetings for the sake of meetings are a waste of time but that's not to say that they do not have their place.
The market is ripe for The Secret to Developer Productivity, a product that talks about all the common strategies in a happy but "we all know they don't work" style, while promising to let you in to the True Secret after you break out the credit card.
I've been reading them for years. I'm sure there are vets who have been reading them for longer.
I'm also sure a good portion of management - at all levels - have read it, or heard about it, or attended a conference etc.
So then why does it persist? I'm sure it's not down to just one reason. There are three that instantly spring to mind -
One slightly cynical one could be that management simply views the eroded productivity as an acceptable cost of getting things their way in regards to meetings, agendas, stopping by to bother you and so on.
Another, more self-critical one, is that we as developers just aren't assertive enough in demanding change in the workplace. Maybe we do need unions. I don't know.
A third is that for every one company that "gets it" there are hundreds (if not more) of companies that don't. Most of them not even in your field/industry, but if you want them as clients then external pressure to conform to their way overrides the ability to operate how we want.
I'm sure there's lots of other good reasons it happens and probably plenty of bad ones. I haven't _completely_ given up hope things could change throughout the industry but it's not something I'd cling to.
However I think a lot of developers (Particularly startup ones) have multiple roles, so interruptions and changing flow is a part of the job. How do you suggest to get around that? My only solution would be to split your day up into chunks for the different roles, minimizing context switching.
That's how my last job was. Tasks varied as followed:
* Work on upcoming project X (release date in the future)
* Feature request on project Y (need done somewhat soon for a client on an already operating project)
* Bugfix needs done NOW on existing project Z
* Ops issue with servers, database, etc
I'm happy to eat on company time if you like, but if I'm working it doesn't come out of my lunch break :)
I the whole world read Ury's "Getting to Yes" trilogy, the whole world would be a much nicer place to be.
The post is titled "Developer Productivity..." - most developers (regardless of startup or megacorp) aren't having meetings with clients.
The reality is that the meeting is about communication, and that's almost-as-important-as coding for bigger teams.