Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: How to implement “office hours” as a software engineer?
51 points by elric on Jan 17, 2020 | hide | past | favorite | 49 comments
I suffer from frequent interrupts, and I'm finding it increasingly difficult to go back to being productive after an interrupt. Sometimes coworkers come to me with urgent problems, which is sort of OK, but often times they interrupt me for issues that could have been an email, or non urgent issues that could have been postponed.

I'm thinking about implementing "office hours" where I'd be open to interrupts. The rest of the day I'd like a "no admittance except on ~~party~~ urgent business" sign.

What are some tips to go about this, or maybe some pitfalls to avoid? Thanks.




I have found that using a flag system works wonders. Luxafor makes a USB powered light that I have attached to my station. Green means chat me up. Red means leave me alone. I have it set to an interval of 25 minutes red to 5 minutes green. (Like pomodoro timer). Took some time to get people on board but now its great and has expanded to not only my entire team, but other teams in the org.

Note: not in any way involved with Luxafor. Was given their product by a friend.


I would simply never talk to a programmer who did this :p


great - seems like it works :-)


It's noteworthy that Luxafor supports Windows only. Mac is coming "soon", and no mention of Linux. I'd expect a large portion of hackernews readers to be Linux users.


For the last 20 odd years I've developed on Linux, today I'm setting up the MacBook Pro (the new 16" so decent keyboard at least) work issued me, I had the choice of whatever I wanted but since the rest of the team Mac and I'm the senior I bit the bullet and switched.

Got juniors starting next week and they are issued iMac's so it'll just keep the headaches to a minimum.

Gonna miss the hell out of Fedora though.


Could be a fun reverse-engineering project. I can't imagine there's that much complexity in controlling a LED.


Sounds like a generic usb gpio and a couple lines of bash, maybe a cron job. Nothing.

Maybe a few more lines of bash to do some sort of dynamic activity monitoring, to detect a "coding" usage pattern vs a "checking email, browsing web" usage pattern and adjust the availability automatically.

Still almost nothing.


I have a pomodoro timer (hacked into my window manager), but if I can get one uninterrupted pomodoro per day it's been a really good day. Exposing the pomodoro status to my desk might be interesting. Hell, it might even be a fun little project to hack together.


So, this happens everywhere I've been, but many times, the reasons and who does it are different. Sometimes it helps to look at the classes of interruptions:

1) Coworkers needing help with their thing (rubber duck, for example)

2) Coworkers needing help with your thing where you are the expert

3) Bosses asking questions about the future

etc.

Different strategies can be helpful for these things. For long term planning, make a meeting. Say you'll think about all those things and have some great ideas for the meeting. This takes you off the spot, and hopefully will start some recurring thing where you get interrupted less.

Coworkers working on things is a bit harder, since you don't want them blocked, but you don't want them interrupting your either. I've done a lot of different things for this:

1) Is it something you can document that you are asked constantly by lots of people? Document it!

2) Is it something you can't document or schedule? Sometimes before getting started on something big, or before lunch, before scrum time, (when I am not in deep work) I will proactively ask some of the people who are likely to need me that day if they need me. Definitely ask and get a feeling at your standup if you have one if you need to help people out.

3) Sometimes I've adjusted my hours, where I will work from home for a few extra hours a day, where I'm harder to interrupt. Turns out if you're not in your office, and it takes a little more effort to bother you, that people might not, or they wait.

One of the tricky things to watch out for is when people come to you first after having a problem, rather than trying to solve it on their own. Try to not get in the habit of being the line of first defense. Teach them how to fish.


Fighting for "heads down" time is a worthwhile endeavor. You will never be able to have 100% heads down time, but even a 2-3 hour uninterrupted block in the afternoon is a wonderful thing.

The problem I've had with trying to establish signals that I am heads down (e.g. putting up a sign, headphones are on, hoodie is up, etc etc) is that I will inevitably still get interrupted, and I will be angrier than usual when it happens. An interruption can be small as folks popping their heads over your cubicle wall to "see if you are busy". This drove me crazy, so I stopped doing it.

Another thing I've tried with little to no success: blocking off times on your calendar. People will figure it out and book over it.

Requesting days to work from home or a coffee shop (if possible with your job) is a great option, and I've found that I am way less irritated at interruptions when I regularly take days at home. People are way less likely to pick up a phone and call you.

Another good option, if your office has the available space, is to take over a small conference room every now and then. For this to work, you can't do it every day. Otherwise, folks will start to treat it like an office, and knock or peek through windows to see if you're busy.

But the best advice is to have honest and regular discussions with the offenders. Try not to be angry about it, and try to understand their point of view. If it works, the effect will wear off, and you'll have to remind them every now and then, but I've found this to be the most effective strategy. I usually ask people to Slack me, and promise them that I'll check Slack and respond to them in at least 30 mins. Those incoming messages may break up your heads down time, but you can at least silence them until you finish your current code :)

Hope this helps!


It's definitely a culture thing. I do freelance work so I've been part of 4-5 different companies in the past 2 years alone.

In one team with 8 team members at a midsize company consisting of mostly junior devs and the CTO being a scrum/agile supporter, we would have discussions constantly, and features development would be consensus-based and tasks would be broken into tiny parts. One of the juniors had complained that they have too many meetings and suggested a meeting to address this issue (oh, the irony).

In another team, we're 5 people, all seniors with different skill sets. We do some agile planning with a simple scrum board, but everyone trusts the others to do their job. There have been days where I was in the office with 2 other devs in the room and I spoke maybe 10 words (I mean that literally) in the whole work day.

It could also be a symptom of "nice guy syndrome". I used to be that person. People would not just ask me about project stuff, but maybe the printer is broken. Or WiFi is slow. Or coffee machine needs cleaning. I couldn't do project stuff anymore. With each passing project, I learn how to be less of "that nice guy" towards more of a "that expert guy who will help if it helps the team". And if it's a junior team and everyone keeps asking me tech stuff, I will talk to the tech lead and ask whether or not it would be more sensible to reduce the number of tickets assigned to me and use me more as a coach, doing small workshops and doing pair programming.


> I couldn't do project stuff anymore

Did you have to move to a new company?


Sounds like you need a buffer. A person who's job it is to keep everyone away from you while that person records what everyone needs and presents it to you at specific times.


That, and proper internal documentation. And if that exists, encourage people to use it.

Usually when a single person is swamped with questions by co-workers, this will be because the information isn't properly documented in some sort of internal repository.

Wouldn't be the first time I've heard it argued that this takes too much time to implement.

I'd argue that it takes far less time than fielding all those questions manually.


That's actually a really good point. Internal documentation is severely lacking. Encouraging people to submit more questions by mail/chat would probably make it easier to build up an internal knowledge base (in the sense that I can copy/paste those questions & answers as a starting point).


Kindof like a private stackoverflow... or something else...

I've tried Confluence but without strict adherence to a set of internal rules, that can easily become a mess.


Also if the internal docs didnt work out for them they should probably update it once they figure out how to make it work.


Indeed.

My first question in these situations is: why didn't they go for the internal documentation? And if they did, why isn't that good enough?


FWIW to expand: I am that person in my company. My title is "Technical Lead" and my job as I eventually discovered is just to be "chief enabler" for the team of engineers under me, and a "crap umbrella" - to keep crap from coming down on my team directly.

My company originally wanted me to micromanage and direct everything, but I've found that real leadership is when you can give smart engineers autonomy and entrust them to build and execute a plan. I am there when they need me and can jump in as needed if they get in over their heads.


Well put. I'm also a tech lead and have been through a similar journey. I felt like I was a bad leader as I wasn't micro-managing (deliberately of course!). In my company there are a few senior people who seem to think the best leaders need to have big egos and make the decisions, micro-manage and keep tabs on people but the results and team happiness when leading without ego and being an enabler says otherwise!


So basically an assistant. How a developer can afford an assistant?


It's called a project manager. One of the tasks of a PM is to make sure that the devs have time to do their work and manage any incoming information before relaying it to them.

Is this an emergency? Interrupt them. Is this a minor inconvenience? Could this be talked about in the daily tomorrow morning? Is it something that someone else should actually know about? Block the information from the devs and deal with it in the chosen way.


Sometimes PMs don't do that and don't chastise the dev for not getting work done because they understand they're being interrupted. Then the dev is in a poor position where they want to do focused work but can't.


An assistant/secretary is what a project manager is supposed to be. The title is wrong in that it makes everybody think they are supposed to be a manager, a source of many problems in our line of work.

Edit: to answer your question about affording one, it seems around 5 developers can share one secretary, and split the cost. Incidentally, this is a usual setup with a PM as well, but again, they often seem to think their job is to manage the developers, not the project (which they also often don't do).


It has to be part of the company culture. All our engineers have company scheduled "flow time". This is 5 hours that is blocked off on Tuesdays and Thursdays. If someone wants to add the same on another day I'm sure people would respect it as well.


This would be awesome!


I can't trust people to do what I need, so I invert - if you can find me, you can have me.

And then I pamper myself with work from home days and firewall the access, either with tech or with good habits. Close the email, slack. Boss has a phone number, bosses make good default routes to get to me.

I don't do the pamper thing a lot, because I want to be available. I budget 20% of my week for heads down, inaccessible. I prefer it in 4 or 8 hour chunks because it can take me 2 hours to get into the zone. Once I'm there, I'm getting the majority of my output done in a week.

On the weeks where I do 50% heads down or more, I find I start hurting myself. I can do it for a few weeks, maybe a month or two, but if I run in the red zone for an entire quarter, I took too much and now I'm going to have a bad next quarter. I'm not a 10xer, I need to pace myself to get my 100% in and have something left over to help everyone else out, too.


I have a reputation for telling co-workers to leave me alone. I've had co-workers wave their hand in my face or come and tap me on the shoulder when I'm wearing headphones or send me e-mails marked as urgent and a variety of other ways to get my attention.

I'm nice, especially if I am new to the company.

I ask that if something isn't urgent that they send me an e-mail and I'll review it later, often at home in the evening.

I also would be open to a chat during lunch time, but not over a meal. Come to my cube and let's chat while we eat. I'm eating, you can choose not to do so. Eating is the priority, this isn't a hands on show me the code and get my keyboard all grease and food.

If something is urgent and it's my job, by all means come stick your hand in my face.

If something is urgent and it's not my job and you think I can fix it, please come stick your hand in my face but please don't do this often if it turns out you just want any geek at the company.

During the day I don't answer e-mail except for first thing in the morning and during the evening. I don't have notifications on.

Please don't stick a post-it note on my screen! I'm sure I have an inbox or a mailbox someplace you can deposit things in.

All of this being said, I try to be flexible with everyone, over and over, until I have to insist that I get my projects done. I like completing work that makes everyone say "Wow". This means my full attention to details and general awesomeness.


My personality leads me to feel extremely guilty if I behave this way. I'm not saying you should feel guilty - your post makes complete sense.


Software engineering and building products is a social activity. Embrace it and take pride in helping others. Its part of the role too.

I understand that to you, as an individual, it may seem detrimental and even a waste of time but realize that overall it’s a positive thing for everyone.

Instead of having some engineer waste hours struggling to solve a problem, just get them unstuck and go back to whatever you were doing.

My attitude is that when I’m in the office, it’s all office hours. I’m there to collaborate. If I’m not in a meeting, then I’m available for questions. With that said, it’s ok to say please wait or I’ll get back to you on that.

Please don’t take it the wrong way but I’ve always been bothered by engineers who have this attitude. Very often these are the same engineers that can somehow focus on writing code and watching Netflix on the side. A large portion of what we do isn’t very complicated and it doesn’t really require 100% concentration (hence netflix on the side). IMO, this is just an excuse we engineers use to pump our chest about how important our work is and to be anti-social.

Some tips

- make sure you have good documentation

- create a slack room where team members can ask for help and encourage them to use that instead of asking you directly. Other team members can pitch in too

- be proactive and get to know the engineers you work with. Ask them if they need any help or if they are blocked by something

- figure out the weakness of your team and hold internal trainings to fill in the gaps

- have some empathy for your fellow coworkers


I very much disagree. To characterize engineering as a social activity implies that this is the foremost characteristic. It is not. It is very much a personal art. It is a science, and it is math. It is you vs. the machine. The engineering part is done alone, between you and the universe. It is you vs. you. It is not about people.

Do not misunderstand me, helping your peers and all manner of social skills are used, and are all necessary. There are other parts to this career and it requires balance and diverse skills.

But don't say that "engineering is a social activity". Nope. Bollocks. Staying employed as an engineer is a bit of social challenge we need to learn to deal with. Writing good code is not a social thing. Architecting good systems is not a social thing. The right answer is apolitical almost magically unfies people automatically. Mediocre answers are the domain for arguing and politics.

People are not the solution. Citing Dilbert: https://dilbert.com/strip/2015-04-24 - people are the problem.

Help? Learning? Asking for help is fine, giving and receiving help is fine. This should be viewed as a mentoring or apprenticing and learning relation. But you really need to figure things out yourself or it doesn't count. After the hint, or the explanation, what do you do? You go home, alone, and try to do it yourself.

Engineering is a life of learning to DIY. If you can't DIY, then you should, very much, not be giving advice, nor continuing this career. So by its very nature, the core of this field is a very solitary venture.

All good tips, btw. I concur with all of them. But I'm just immediately suspicious, on purpose, on principle, of people taking the line social first, maths second.

Having drinks with friends is a social activity. It doesn't pay as well.


Professional software development is very much a team sport, even when it comes down to the code. If you're not writing the code with the humans reading it in mind then in most cases I would say your priorities are off.


Had the same problem. Not just me, all sw engineers, but it was more of a problem for the ones that actually were working on bigger projects involving a lot of coding.

A coworker tried using an availability light but.. good luck trying to get people to respect it. Either people will miss it, forget it, or ignore it (specially if they are above you on the org chart).

I tried mufflers a few times, but it didn't work that well. Same issue as availability light, plus the fact that everyone looks weirdly at you and initiate conversations when you have the mufflers on..

So what I did was push working from home more and more until I went to working 1-2 days from the office per week. Now I have a much better productivity, ability to focus throughout the day, etc, besides all the advantages of not having to commute 5 days per week.


Interruption is the enemy of productivity.

Usually unintentional.. when people burst in on your maker time, they’re saying in action what they have is far more important than anything you could be working on. This isn’t true, so it’s ok to at first gently nudge people to set some healthier boundaries so people know how best to get your help.

If you have a helpful nature (very good quality) there’s better ways to not end up a path of least resistance where people can ask you before looking into it themselves.

You can decide if it is best to put up a sign, send an email, or verbally tell anyone who interrupts you to help you help them in one of the following ways:

- Use Calendly to block out available times. use these for overflows of conversations and solving problems. 30 minute slots.

- Answering things via email quicker than than in person. Batch the communication. Save in person for dedicated problem solving.

- Consider starting a lunch and learn on Monday’s to help people share what kinds of problems they helped someone out with that others might have too. People learn to help each other.

- If these are your direct reports you can ask them what they tried before coming to you, not give th,e the answer and work through it with them,

- Use headphones to indicate you shouldn’t be interrupted, ask ppl to respect it. I know someone who would flinch a little when he was interrupted.

- When someone interrupts you, before replying, you can say I’m in the middle of something and have a minutes now if we need more time we can schedule something later in the day. They won’t get all the help they need and will focus on how to best get that, worst case.

- Start using the phrase “I don’t like interrupting you, can we talk when you reach a good stopping point” in your correspondence when requesting time of others. It sinks in over time.

- There is a busy light you can buy that can sit on top of your monitor and is red, yellow or green to be approached. I forget what it’s called but they look interesting.


What has gone wrong such that they can't do things without having to frequently get your take on it? Why don't they already know how to do these things, or if they do know, why do they need to hear it from you as well?

That's the problem here. You being interrupted frequently is just a symptom, and unless you're hoping that making yourself unavailable will force them to rise and no longer need you in some kind of "sink or swim" situation, that's quite a risk. Don't mask the symptoms; cure the disease.


You'll need to prepare the team for when you get sick/go on vacation anyway so better start on that now.


Office hours is the wrong approach or terminology - I would recommend focus hours. The later is more about your block of time to do deep work and less about them but serves the same purpose.


This is one of those issues where you need your boss to resolvec it. I'd request a meeting with your boss, explain how and why these interruptions cost the company money, because you need to refocus after every interruption. Give examples when this happened.

If however, you have a boss that will interpret this as "Yeah, I haven't really worked much because I constantly talk to my colleagues.", it's going to be hard to introduce these quiet hours now. Highly depends on if your boss wants to support this.


Completely agree. You have to present the situation to your boss and let them decide how they want to handle it. Either they respect your assessment of the situation and help you, or they decline to assist or place the onus on you. In the second situation you then have to clarify if they're okay with the decreased work output this situation causes, or if they still expect you to produce at the uninterrupted level at your own personal cost of time and exhaustion. Finally, you'll have to decide if you are okay with the outcome of that conversation.


Come in earlier before the others arrive or come in later/leave later. No matter what scheme you use there will always be a means to interrupt you. The longer the overlap between you and others then the higher probability of interruption as it gives more opportunity to be interrupted. If you reduce the overlap then you squeeze interruptions into a smaller time slice, and you'll get more done.


Schedule personal meetings with yourself on your calendar that aren't any different from ones with teams and others. This is time to get stuff done. Just like a meeting with your boss, a report, or a team it is not to be interrupted unless someone is crying or dying. Set boundaries, set expectations, stick to them.


I did this for a long time. I had random looking recurring meetings on my calendar called things like "Backlog Grooming" and "JIRA Ticket XYZ-1923". It cut down on the bullshit meetings for a while, but people eventually figured it out and scheduled on top of it. It also did nothing to stop the people who just walk up and demand attention.


some people just walk up to your desk/office without checking the calendar to see if you're in a meeting. I'd guess this behavior correlates pretty well with not sending a quick slack message to see if you have time to talk.


If things aren’t urgent tell them you don’t have time right now but if they send an email you will respond when you have time. Make sure to actually respond. If you do this consistently for a while people will learn.

There is nothing wrong with telling people politely that you don’t have time right now. They will respect that.


"Office hours" as an individual contributor developer will never happen. But for the sake of argument..

1) Do you have the organizational and political clout (and skill) to institute this?

You can say "no admittance!" all you like, but if you're a mid-level dev and your lead needs something, you're going to get interrupted. Like it or not this sounds like a big culture change and it's not something even most senior devs have the organizational power to implement.

2) Are you prepared for the objections and potential backlash?

Whether we like it or not software has gotten written for decades with the devs fighting against constant interruptions from peers, managers, and other random coworkers.

3) Do you really need this?

Sort of building off #2, what makes your project or your work so special that you need to be available for only certain specific times of the day?

4) Are you prepared to push back?

So let's say you actually get this implemented. Then your boss's boss's boss comes up to your desk in the middle of your working time and asks to talk to you. Are you going to tell them no in front of all your peers? Are you prepared for them to get upset with you? There's no way your "no admittance" time would be on their radar unless it was a team-wide change (and even then, maybe not).

--

In reality, most of us are not working on anything so complicated and important that the occasional interruption is a terrible thing. The same way 99% of companies do not need to hire the best rockstar developer they can find, most developers are good-not-great at their jobs and realistically being interrupted is not going to cause us to miss deadlines or put out terrible code.


I always chat a higher up or coworker asking if they have a minute for a chat before I go seem them. The fact that this is not common courtesy is annoying.


A personal office hours might come off as arrogant, but pooling with others who support the same topic area / technology can work wonders.


I've found that hiding in a meeting room or even working in a different building works for me. Coffee shops, coworking spaces, etc.


There is no solution, you'll always be interrupted.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: