I’m now on my second company that offers a policy of ‘unlimited vacation time’. As an outsider coming from a company with a rigid time off policy and time card system, this sounds very alluring. But, does it actually work?
By far the hardest thing you will do as a manager is fire someone. But you will need to do it. There is no way around it. If you want to be a manager, this is just part of the job.
I’ve discovered there are right and wrong ways to execute this. I’m hoping some of the tips below help make the best of this difficult situation.
As a manager, it’s very easy to quickly lose your technical edge. Most of your day will get filled with meetings, planning sessions, strategy sessions, tactical status updates, 1 on 1’s, etc. On top of a day filled with meetings you will need to figure out how to execute various initiatives, and spend nights catching up on email.
Given the above time and mindshare constraints, how can anyone expect you to have time to keep up with technical skills?
The simple answer is, “it doesn’t matter”, you need to figure out a way to do it regardless!
I love James Altucher. In case you haven’t heard of him, he’s an investor, writer, and entrepreneur. He has a popular blog, podcast, and a bunch of books. You can find all his material here: www.jamesaltucher.com
[Photo: James Altucher, source: www.jamesaltucher.com]
One of James’ most popular books, and my personal favorite, is called “Choose Yourself: Be Happy, Make Millions, Live the Dream”. In this book he talks about how the nature of employment is changing, and how we all need to become entrepreneurs. There are several principles that he advocates that I’ve started to utilize at work and have noticed a huge change. All software managers, really anyone in a leadership position, can benefit from the advice in this book and put it to immediate use. I highly recommend you check the book out for yourself. I also recommend you check out his podcast where he interviews various celebrities (from rappers to venture capitalists to authors).
In Part 1 of this series, titled “How I converted my entire company over to Confluence, and lived happily ever after”, I described how I converted my entire company over to using Confluence, and saw huge gains in communication. This was meant to be more of a general how-to article on migrating your company over to a new tool, rather than provide any info on the tool itself.
In this article, I’d like to go into more depth on how we’re actually using Confluence in my company. I’ll also list the plugins that we are currently using.
One thing I’ve noticed about being a software manager is that it’s a practice, not just a skill that is learned, like a new language or framework. One of the challenges with the position is that you rarely receive any feedback on your performance. I’ve reported to various CTO, CEO, and VP of Engineering roles over the years and have definitely noticed the lack of feedback. It’s up to you to be self aware, recognize your blindspots and weak areas, and constantly work to improve them. This requires a good deal of emotional intelligence.
The new year provides a chance for reflection, to think about how we can improve as people. I’m always trying to think of how I can deliver more value in the office, what more can I do to help the team succeed? I’ve boiled it down to my top 5 areas where I need to improve on in 2016. Feel free to share yours in the comment section!
1. Be a Better Listener
This one sounds cliche, but being a good listener is probably the most important skill a good manager can have. I always have to remind myself to be in the present moment when listening to a coworker. Occasionally my mind will jump into problem solving mode, and I’ll start to zone out of the conversation. Or sometimes I’ll just get bored with what I’m hearing and start thinking about something more interesting.
This year I want to get better at listening. What is the other person really trying to say to me? I’ll try to remember to repeat back what I’m hearing, to make sure the other person is being understood, and to force myself to stay engaged. Also, I’ll try to see if there is any way I can help with whatever the other person’s problems are.
2. Give more feedback
I just got a new boss and noticed a technique he uses that has made a positive impression on me and I plan on using it more in the coming year. He gives LOTS of positive feedback, I mean a ton. He’ll quickly reply to an email with a quick ‘Thank You!’ or ‘Nice job!’. It only takes him 2 seconds, but I’ve noticed myself now craving to get that positive response. After receiving these for a couple weeks it finally hit me, I’m not giving my own team enough positive feedback!
As a manager you tend to see everything that is wrong and want to fix it. There is usually so much bad stuff happening, it’s easy to forget to acknowledge all the good things that are happening as well! I’ve already started to make a conscious effort to provide the team with more positive feedback, via email, 1×1, or in a group setting. I’ve noticed that I need to make a conscious effort to do this.
In addition to all the attaboy’s, it’s important to give corrective feedback as well. Also, it’s good to give this feedback immediately, don’t wait for your next 1×1. I think it’s fine to give this feedback via email/chat as well as in person. If your team knows they can get both good and bad feedback from their manager, they will trust you, and will feel more at ease knowing where they stand.
3. Clarify Team Goals
People want to know what the group goals are. What are the near and long term milestones? Luckily I work at a company where the founders clearly articulate the vision of the company, but how is my group helping to achieve that company vision?
Also, I will work to ensure everyone on my team knows what their priorities are. I will have them tell me what their priorities are, so I can hear it coming out of their own mouths. As they knock items off their list, I’ll work to give them feedback (see #2) on how they are doing.
4. Don’t get stressed
I tend to sweat the little things. I tend to over analyze and dwell on what my boss or a peer said in a meeting. I tend to get over competitive with my peers.
As a manager, you have visibility into so many things that are going wrong, it can be very easy to get stressed out. This year I’ll work to live in the present moment and not waste time thinking about the past. When things get overwhelming, I’ll work to prioritize, communicate them out, then execute.
5. Improve my technical skills
It’s so easy to get wrapped up in the day to day, meetings, email, etc. Before you know it, months or years have gone by and you haven’t written any code or learned any new technical skills.
I try to mitigate this by first taking on jobs that are in new technical areas. This forces me to learn some new technologies so I can at least be conversant. However, once I have just enough knowledge, I tend to put it on the backburner and just focus on getting work done.
This year I’m going to work to be more hands on. I’ll try to tackle a low priority coding project at work, something that has been bothering the team, but is off the critical path.
Honorable mention, #6, work on this blog some more. 🙂 These are my top 5 areas that I need to work on, what are yours? Feel free to shoot me an email with feedback and also please join the mailing list to receive updates.
Below are the top 10 questions I try to ensure I have answered before we release a new feature into production.
New Feature Release Checklist
- What is the release strategy? Here are 3 options:
- Big Bang – This is the simplest form of release, where you roll out the feature to your entire user base. This can either be done with a Feature Gate (or switch), or via the deployment itself.
- Incremental – This is where you initially roll out the feature to a small subset of users. You may choose to roll it out to a specific region, user role, or other demographic. Once you have some confidence after the initial rollout, you increase the user base (at whatever rate you desire) until it eventually gets to 100%.
- Parallel – This one isn’t always an option, but it’s great to use when possible. Let’s say you are making some performance improvements to a complex DB query. Rather than using the big bang and incremental approaches described above, or implementing some crazy regression testing strategy, you can use the parallel live technique. With this approach, you run the query simultaneously through the legacy and new code paths. If the results are the same you just return them. If they are different you return the legacy result to the user and log the difference for review later. This approach allows you to test out complex refactoring’s with no risk to your users.
- What about feature gating (a.k.a. feature flags or dark launch)? How will the feature be enabled in production? Can it be turned on for additional users without a redeploy? Check out this Forbes article HERE for some more info on how Google and Facebook leverage feature gating. Another interesting article from HBR on feature gating HERE.
- What is the rollback plan? What happens if this feature causes issues in production? Can it be disabled with a feature switch? Or is another deployment necessary? If so, what’s the estimated downtime? How will we know if there is an issue? Will an alarm go off or do we need to manually test?
- Was the code peer reviewed? This one might sound like a no-brainer to some, but you’d be surprised how many companies still don’t perform peer reviews. If you aren’t using github which has reviews built right into their pull request mechanism, there are still countless other tools out there that make peer reviews painless. One I’ve seen used successfully in the past is Code Collaborator. Also, it’s a good idea to rotate the reviewers or spot check them, as some developers will treat them with a rubber stamp.
- Did you write any unit tests? If you are writing a new feature, you should add in unit tests where possible. If you are making tweaks or refactoring an existing feature it would be great to add in some tests now while you have spent the time to grok this section of the code base.
- Was any load testing performed? Besides standalone load tests (e.g. JMeter, and many others), another great technique to use is HTTP replay, where you replay your production traffic through a staging environment. We’ve seen countless times where our canned JMeter tests didn’t catch all the corner cases that a production user’s data could.
- Did QA approve the feature? Ideally the answer to this question is automated by using some project tracking tool like JIRA.
- Did the PO (product owner) and UI/UX review the implementation? I can’t tell you how many times I’ve seen a seemingly simple feature get misinterpreted between the various stakeholders, including product owner, UI/UX, customer, and engineer. It’s a great idea to just pull this folks over to your desk for a quick review of what is being rolled out.
- What about DevOps? Is any new infrastructure necessary for the release? Are there any release timing dependencies? What about config settings?
- Do we need to communicate release notes to customers? In many companies communication with the customer is handled by product mgmt. However, if you’re in a startup you may need to handle this one yourself.
That’s it! I try to make sure I have a good idea of the answers to these questions for all new features that get rolled out. Unfortunately sometimes things slip through the cracks. However, I’ve noticed that most issues that arise downstream could have been avoided by first getting answers to the questions above before you ship.
EDIT: I recently created a Production Readiness Checklist that condenses this blog post into a single, good looking sheet of paper that you can pass out to your team or hang on the wall in the office. You can get a copy of this checklist by signing up for our mailing list on the right!
Ah, the dreaded weekly 1-on-1! Do you get nervous leading up to your 1-on-1 with your boss? Are you sometimes caught off guard or feel unprepared during the discussion? Do you ever feel like the time isn’t valuable?
Here are some tips I’ve picked up over the years to ensure a successful 1-on-1 with your boss:
Before the meeting
- Be prepared. This meeting is regularly scheduled, and it’s important. You have it every week so you know what it’s going to be like. There is no reason to not be prepared for this meeting.
- Give them a heads up. If there is a specific topic you want to cover, give your boss a heads up a day or so beforehand. This will give them time to think about it, rather than catching them off guard in the meeting.
- Review the past week. Spend 10 minutes reviewing what happened in your group over the past week. I typically write down a bulleted list because my memory is bad. Were there any production issues? Be prepared to answer questions regarding any event that may have made its way to your boss via other channels.
- No surprises. Don’t wait for your 1-on-1 to let your boss know of any big or urgent news. See this post for tips on managing production issues.
During the meeting
- Be on time. Your boss’s time is valuable, don’t disrespect them by being late.
- Let them lead. Even though you’ve come prepared with a list of topics and questions, let your boss lead the discussion. Remember, people have their own agendas and interests. If your boss doesn’t have any topics to cover then you can move on to your agenda.
- Raise Issues. It’s important that your boss hears about issues going on within your team from you first. It demonstrates that you are the leader of your team and have things under control. However, as mentioned above, you should be constantly in communication with your boss of any news on your team. Use the 1-on-1 time to raise up project risks or other concerns, vs. news.
- Listen. Pay close attention to the body language and questions that your boss asks. What is he/she really interested in? Do they want a status update, or just brainstorm and bounce ideas off of you? Let them lead and run with it, but find ways to weave in the questions you need answered. If that doesn’t work, try to move onto your questions/issues after half way through.
- Take Notes. I find that I need to take notes in my 1-on-1 to ensure I don’t drop anything. I usually bring a notebook to take notes vs a computer, as it demonstrates that you are focused on the meeting, and not distracted by email/chat/etc.
- Learn their style. You can learn so much from a person by observing their behavior in these 1-on-1 settings. You should start to see a pattern emerge over a few weeks on what your boss likes to cover in these meetings. If they are a seasoned manager they will be effective, but that won’t always be the case. Use the ‘heads up’ before the meeting to ensure the topics you want addressed are covered. Don’t wait for your boss to discuss your career goals, or potential growth opportunities, bring it up here.
After the meeting
- Take Notes. If you didn’t do so in the meeting, immediately afterwards jot down some notes from the meeting. Pay attention to the topics that they raised.
- Take Action. Were there action items? If so, make sure there is some progress on them by next week’s meeting!
Hopefully you find some of the tips above to be useful. I’d love to hear other tactics that people employ to ensure they have a successful 1-on-1!
When ramping new hires up, it’s very tempting to quickly throw them into the fire, fix bugs, start building features, etc. After they’ve completed their orientation and filled out their paperwork, what better way for them to learn the system?
It’s critically important that your engineers know how the business operates, who the customers are, their needs, and how your product fills that need.
The company I currently work for provides a SaaS offering that is VERY workflow intensive. We have 20+ roles in the system with around 5 major different personas, across 3 different applications. I made the mistake in the first paragraph and am now regretting it. We were under high growth at the time, hiring as fast as we could, and our backlog was growing.
Now, these engineers have been on board for several months and know nothing about the product. When building new features, they don’t have the customer in mind.
Bottom line, when onboarding new employees focus on the product and end users first, THEN have them learn the code. This may take a week or more, depending on your product, but it will pay dividends down the road.
There’s no worse feeling than when your production system goes down. The business relies on your system’s availability. Something happened, a bug, bad code push, a customer inserted crazy data, or whatever.
Now everyone is looking at you to fix it. You are completely dependent upon your team, operations and engineering to come together, diagnose, address root cause, and deploy a fix ASAP.
Your ass is on the line and you are pretty much helpless.
What can you do to help?
Here are my tips:
- Make sure you have the right people on the scene. Have at least 1 engineer and ops person on the issue together. Open a dedicated skype room or google hangout where information can flow freely.
- Quickly assess the severity of the service degradation.
- Notify your management chain, product team, and various other relevant internal stakeholders ASAP. Be honest.
- Provide cover for the team diagnosing the issue. Limit distractions.
- Get out of the way. Your job is to ensure the right people are on the issue, and the org is up to date on the status.
- Once the issue is identified and a patch is deployed, communicate out to the org what happened.
- Afterwards, gather the team together and hold a quick post mortem to find out what went wrong. Some key questions:
- What services were affected?
- What actually happened?
- What is the root cause?
- How can this be prevented in the future? Is additional logging, instrumentation needed to diagnose the issue more quickly in the future?
- Thanks the team for their teamwork, and quick resolve.
- Send out a service incident report to the company that is transparent. Describe the information gathered from the post mortem and explain it in simple terms. Remember, the rest of the company wants to know that you have things under control, and you are taking the necessary steps to ensure it won’t happen again. Most people understand that things go wrong and people make mistakes.
What other steps do you take?