In the course of my career, I have fortunately been exposed to many different types of environment, and I thought I would share some of my experiences and opinions on those environments as I currently view them. My first job, working with my father, was at a software development company that provided Off-The-Shelf solutions to the food, pharmaceutical and fast moving consumer goods market. The company was an interesting mix of corporate and consultancy as most of the software was the kind of thing that could be pre-packaged and sold, but most of the development work was on the customisation of that software to integrate with the client’s existing ERP and / or financial systems. For me, this was good experience as I learned quite a lot of the craft of software development in an environment that was quite forgiving, but I was also very limited on the technologies I could use.
Fast forward a few years and I moved into a vehicle tracking company. This was a pure corporate environment and all software developed was for internal use. This was also my first real introduction to source control and working on a team (albeit a very small one). Looking back, although it was an interesting experience, it was also quite limiting. Being a corporate, technology choices were restricted and all instructions filtered down from the higher echelons. While this was good in a way, in that it meant I knew what I was supposed to be working on, it was also limiting in terms of what I could do. If I hadn’t had the discipline to learn on my own, I would probably not have been exposed to any new technology (more on this in a bit).
After a about 2 years working there, I applied to work at an excellent software development consultancy firm. They are well regarded in the country for the quality of work that they delivered, as well as the staff that they hire (almost every developer has at least a BSc degree, and many have Masters and PhDs – while I had and still have no degree). I made it through the rigorous test and interview process and became an employee. The cultural shift was immense, and I went through a period of intense growth. I was given the opportunity to work with top class developers, as well as work with the latest technologies of the time. The range of different projects I was able to work on got me to flex mental muscles I didn’t know I had, and over the course of a few years I was able to transition from a junior developer into a senior developer (running one small project on my own). Life was fast paced and developers were moved between projects as quickly as possible after delivery so as to get the most out of them. This led to exposure to a lot of different environments (In my time there I was involved in derivatives trading, training management, debt counselling, internal tooling and social buying to name but a few), but big picture thinking was the domain of the analysts (as well as architects / team leads) and the developers on the code-face were expected to see vision of the analysts to fruition.
Now, I have gone back to a corporate environment (an excellent South African insurer – Lion of Africa), and as a senior developer I hope that I can carry my learning from my previous jobs with me. As a senior developer in the company, I am responsible for mentorship as well as running the .NET side of our development initiatives (we have a few different sides – with Enterprise Architecture mainly running with the big SharePoint, Dynamics, and other large Microsoft applications; a team dedicated to our core line of business system who spend most of their time writing VBScript code – horrible I know, but that is how the legacy line of business system is extended; and then our other projects all being .NET based). We are a Microsoft shop, and have an excellent CIO who drives all of our teams to ensure that we stay up to date with the latest technology, down to the versions of our operating systems and office tools (Windows 8, Office 2013, Lync 2013, SharePoint 2013, TFS, Visual Studio 2013, etc). In this environment, as a senior developer I am involved in the selection of tools and frameworks that are used on our projects (although I try to make sure that I don’t fall into a rut and push myself to keep learning what is out there; for instance my current project consists of F#, C#, MongoDB, AngularJS and TypeScript – MongoDB and F# make for insanely fast iteration cycles) .
With that background out the way, I would like to share my thoughts on the pros and cons of consultancy versus corporate. If I were to replay my career I would probably jump right into consultancy as a junior developer. The exposure to different projects, the variety of technology used as well as the wealth of knowledge that is there to tap in to at a consultancy were what made me the developer I am today. That being said, at this stage of my career I definitely prefer to work in a corporate environment where I can be involved in long term strategic thinking and seeing people actually use the projects that I deliver. I find that there is more of an emotional investment in the quality of the software I deliver, because the users know who I am and can reach me easily if it doesn’t work the way it is supposed to.
In a consultancy I found that just as projects started to get really interesting (as they got closer to delivery), they ended. There wasn’t the ability to see it all come together, enjoying the integration of existing systems with the newly developed project. If I were still in a consultancy I think I would be frustrated by the lack of long term vision that many consultancies seem to have – it’s get the project done and get out (which is admittedly what many companies pay them for, but it doesn’t give on the opportunity to think of creative ways that the solutions can be extended or integrated).
So to sum up, in my view consultancies are great places to work and find your feet, but if you want to have a real long-term impact and vision then corporate is the way to go.