Thursday, 7 March 2013

What I've Learned From Corporate IT Consulting


I hesitate to call myself a consultant, because really, I don't do much consulting. Most of what I do is coding. Instead of doing it in an office for my company, I do it in a client office for a client. I only call myself a consultant because every once in a while someone will come to me and ask me what I think we should do, and I give them an opinion. Also, my company told me I was a consultant. Since I like having a job, I figured it would be prudent to just go with it.

My current company is a consulting firm. They cater to "enterprise" clients, which really means big companies. Oil and gas is big in Alberta, so anyone that services that sector is also pretty big, like construction. And since everyone needs services, there's also government and various other things.

I've been doing this for just shy of 3 years. Before this, I worked for a year in an IT department of a remanufacturing plant as a co-op student during the summer break of my diploma and the last year of my school. I was attracted to my current job because I wanted to make sure my skills stayed current, and it's hard to do that when you work in a company that doesn't focus completely on IT. The company was also very young, and being there while a company grows has benefits. Because it was so young, it was also very small, and I prefer to work with a fewer people that are of a higher caliber than to work with lots of people.

I started working for my company with the title "Solutions Developer", coding stuff for clients. I would leave the office very rarely. As the client list grew, however, so did the size of the clients. They started requiring that we be on-site, so I was sent out. Over time, it became obvious that client-site work was going to be impossible to avoid. Instead of risking my job trying to fight it, I just chose to embrace it and start educating myself on consulting as well as technical stuff.

Lessons Learned

So now that you have a brief idea of how I got here, I believe you have the necessary context to understand where I'm coming from for the rest of the post. I am going to assume that you are familiar with the job of a developer. If you aren't, then someone else's blog is probably the best place to find a breakdown of what that's like. I wanted to bring a consultant's perspective, since I believe it's very under-reported.

So what have I learned? Very few things are either good or bad. They are what they are, and you must decide for yourself. Here's the list:

  • New things - Your world will constantly be changing. You will be exposed to new things all the time. It may be hard to handle such constant change, but at least it's constant, so you can rely on that... You won't really have to deal with a problem for more than a couple months at a time, but you will also not be able to settle down and enjoy any benefits for too long. The best thing about this part is that you will get experience with both, and more, over the course of your career. You will see awesome solutions to problems and be able to take those to other companies. Probably the ultimate benefit of this point (for me, at least) is the chance to see past the individual attributes of a company and see the roots. Every company is like a person, with its own personality, likes, and dislikes. It's seeing those characteristics that make a consultant so valuable. It just takes time.
  • Change is slow - Change takes (what seems like) forever in an enterprise. I have come to believe that if change is quick, something is wrong (or soon will be). Large groups of people need time to adjust properly. Working in an enterprise presents a chance to chill out, since there is only so much change an organization should make within a certain time period. It also means that not every idea, even the good ones, will be implemented. It can be tough to sit idly by while good opportunities pass by, but it's for the best. Every company must choose which opportunities to grab. So sit back and take it easy. There's very few times I've been called on to work overtime, which means I arrive and leave at the same time. So use the in-between times to prepare for the next move, or learn something new. I prefer to read a company's manuals and other training material to absorb the knowledge they offer. Just remember to respect any NDAs ;)
  • Clients aren't friends - Clients don't really see you in the best light. You really have to earn trust, especially the trust of the employees. Managers see your credentials and have chosen you based on your skills, which means they already trust you enough to hire you, but employees see you differently. Most of them probably don't understand your value, and see you as an omen of change (which most people resist), as well as the guy who makes solutions and then leaves them to maintain it. So be prepared to be disliked. You will get a chance to hone your ability to win people over quickly as you move from engagement to engagement, but it's going to be a constant effort. Once you can get into the good graces of the crowd, things get easier. It just takes time and practice. Also be sure that you are making friends outside of work. A lot of developers tend to make friends through work, and being at client sites means you can't rely on the employees for socialization. Over time, however, you will build a network of people you keep in contact with. It's just not as seamless compared to being a developer.
  • Deep knowledge is key - Keeping your skills up-to-date is key, but it's hard to invest in a specific skill-set when you are constantly moving around. Becoming valued as a specialist takes time, too. So it's important to study the concepts behind technologies. Yes, you should also be aware of specific technologies and what they can do, but a lot of your time will be spent learning background info. This has the side effect of making you look like an idiot to some people, as you become a generalist. It will become harder to explain your job, and any attempt doesn't work that well. You must motivate yourself to learn, or you will find yourself without work. Still, it's a great way to keep your skills up to date.
  • Strangers are good for work ethic - Your typical office isn't a labor camp. There's always time to fool around and take informal breaks to relax your mind. Today's developers are creative and need time away from the keyboard to recharge the juices. It's easy, however, to forget the time and goof off for an hour, which also makes it really hard to get back to work. Being forced to sit down and code under the eyes of budget-conscious managers and judging employees is a great way to develop the ability and desire to sit down and work for hours on end. It's a skill that takes practice. That level of work ethic isn't cultivated in every organization, but will be valuable in all of them. It's also essential when you want to 
As you can see, consulting is very different from being a developer. Corporate consulting even more so. I hope you got an idea of what a consultant's life is, and saw what it offers compared to a developer position.