How to Advance Your Career By Becoming an ‘Idea Machine’

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).

Continue reading “How to Advance Your Career By Becoming an ‘Idea Machine’”

Top 5 Reasons to Choose Managing Over Coding

 

Many senior developers have faced the classic software career dilemma.  Do I go into management or continue down the technical path?   Some companies offer a ‘dual track’ where you get to choose one path, but provide compensation advancement in both.  Other companies (oftentimes startups) offer a blend, where the managers remain ‘hands on’ and continue to code.

Continue reading “Top 5 Reasons to Choose Managing Over Coding”

10 Ways to use Confluence for Improved Communication

 

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.

Continue reading “10 Ways to use Confluence for Improved Communication”

How I converted my entire company over to Confluence, and lived happily ever after

 

Note:  I am not endorsing or advertising any specific tool in this article.  It’s merely meant to share my tips from rolling out a new tool across a company.

I couldn’t believe it.

On my first day on the job I asked “so, where’s the wiki?”  The answer was this horribly outdated wiki system which shall remain unnamed.  The most recent article in it was a couple months old.

After just coming from a company that was tool happy (see this article for just a small subset of monitoring tools alone), I was shocked that this promising startup was so clueless when it came to their intranet and communication systems.  I was used to using tools from Atlassian like Confluence, Jira, and HipChat.

Continue reading “How I converted my entire company over to Confluence, and lived happily ever after”

Git – A Brief Guide for Managers

man-114437_640

Overview

Let’s face it, the entire software industry is moving over to git.  Open source has already moved.  A fairly old, but still interesting, StackOverflow article shows some data on how the open source community has largely moved over to git.  You can view the article HERE.  The TLDR is this, you need to understand Git.

If your team isn’t already asking for it, they will be shortly.  You need to understand what the implications are to your software project, and determine a migration strategy.  Also, you need to understand the basic workflow and terminology that Git introduces.

Continue reading “Git – A Brief Guide for Managers”

Top 5 New Years Resolution’s for Software Managers

Funny-new-year-resolution-cartoon-500x318One 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.

 

10 Questions to Ask Before You Release To Production

Below are the top 10 questions I try to ensure I have answered before we release a new feature into production.

New Feature Release Checklisticon_deployment

    1. 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.
    2. 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.
    3. 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?
    4. 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.
    5. 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.
    6. 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.
    7. Did QA approve the feature?  Ideally the answer to this question is automated by using some project tracking tool like JIRA.
    8. 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.
    9. What about DevOps?  Is any new infrastructure necessary for the release?  Are there any release timing dependencies?  What about config settings?
    10. 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!

 

 

Top 5 Books for New Software Managers

Just made the switch from dev to team lead or manager?  Below are my top 5 favorite books that will give you a jump start on the management track.  You’ll find that these books are constantly referenced by other managers.  They vary from business strategy, process, to general leadership skills.

Here are my Top 5:

  The First 90 Days – by Michael Watkins

download

This book is all about transitions.  Whether you are just starting out at a new company, or are moving into a different group/position within the same company, this book is a classic that will walk you through proven strategies to ensure a successful transition.  This book claims (and I totally agree) that the first 90 days set the tone for your entire career, and getting off to the right start is critical to success.  I find myself frequently referencing this book for tips on handling various mgmt situations.  The section on diagnosing your current situation alone is priceless.

 

The Innovator’s Dilemma – by Clayton M. Christensen

download (1)

If you haven’t read this book yet, buy it right now!  It’s a classic that managers love to reference in as many meeting as possible to sound smart.  This book coined the term ‘disruptive innovation’.  Basically, the ‘dilemma’ is that as companies try to do all the right things they end up getting screwed by more nimble startups.  Solution?  Build a startup within your startup.  This book provides a great framework for analyzing innovations in an organization, which can be beneficial to understanding your own business’s product strategy.

 

The Lean Startup – by Eric Ries

download (2)

The most recent book on my list, and this one already feels like a timeless classic.  This book takes the principles of Lean Manufacturing (check out The Toyota Way, by Jeffrey Liker)  and applies them to software product development.  Terms like ‘pivoting’ your organization and ‘minimal viable product’ were coined by Eric Ries.  I’ve found that MVP gets thrown around the office way too much, mainly as an excuse to create a shitty product.  It’s better to read the message from the horses mouth.  It’s all about reducing the time to getting actual customer feedback and create the ‘build, measure, learn’ cycle.  There are a good number of youtube talks with Eric Ries available.  Also, check out the lean startup site here (http://theleanstartup.com/principles) for some more info.

 

Crossing the Chasm – by Geoffrey A. Moore

download (3)

Crossing the Chasm is a marketing book.  It’s all about the technology adoption lifecycle, the various personas at each stage, and how to market to them.  Terms like ‘early adopters’ and ‘laggards’ that are frequently thrown around the office were coined in this book.




 

How to Win Friends and Influence People – by Dale Carnegie

download (4)

 

I was initially turned off by the title of this book.  At first I thought it was a book about how to manipulate people.  In fact, this is a book about human psychology.  As a new leader, it’s critical for you to learn the skill of influencing others.  Influence is not the same thing as manipulation, though it can seem to be a fine line at times.  Basically, you need to learn the skill of understanding others points of view, and how to communicate effectively with various personalities.

 

These are my top 5 must reads for all new managers.  What other books do you recommend?

Monitoring Tools for Cloud Applications

There are a million tools out there for monitoring cloud applications.  The following is a list of the tools my current company has selected to monitor all levels of our stack.  Overall we are very happy with this suite.  Please post in the comments if you can recommend others!

Machine Level

Nagios – Nagios is used to monitor your IT infrastructure.  This tool will generate alerts (via email, text, etc.) when your CPU, threads, disk space, etc. exceeds a given threshold.  The great thing about nagios is that it’s completely free!

Logging

Papertrail – Papertrail is a log aggregator and search tool.  Like most applications, our system runs across a wide variety of EC2 instances on AWS, across many different deployment environments.  Papertrail is great because it aggregates all your logs together in one place.  No need to figure out which machine your user is on, ssh into it, etc.  Just use the web search on papertrail and then easily drill down into your logs.  Well worth the money!

Exceptions

Sentry – Sentry is a great tool that will parse your system logs and aggregate exception errors.  It will create a nice dashboard of all of your system exceptions, group similar ones together.  It allows you to track who is looking into the exceptions, assign them to developers, and even export them to JIRA.  Overall it’s just a great way to give visibility to the system exceptions without having to go through your logs manually.




Performance

New Relic – New Relic is a beast.  They have been rolling out tool after tool.  The one we use most is APM (Application Performance Monitoring), which gives you alerting on system errors and performance bottlenecks.  It provides a great way to drill down into your most time consuming transactions and help guide refactoring.  They provide a host of other tools but we don’t use them that often.

API

Runscope – Runscope is frekkin awesome!  It provides an easy way to create tests that validate REST API’s.  We’ve found this tool to be key for all integration points across our organization.  If a team provides a service that others can take a dependency on, we ensure that a runscope test is in place.  If the API is ever broken, everyone will know immediately.  The tests can be run globally, and there is also some performance monitoring included as well.

 

I know I’m probably missing a bunch of tools, but these are the ones we currently use, and they seem to cover all the bases.  Also, check out my other article “When your production system goes down”, for my personal strategy for handling prod issues, when the alarms do start ringing!

Please comment and tell me what tools you like to use?