Sunday, 19 June 2016

Reflections on my career in Software Engineering & Management

I was going to keep this post in my own internal reflections journal, but then decided not to, and instead, take a leap and make this public, since it may be of use to people who find themselves in a similar situation as I did, that is - the choice of branching out from software development path into the project management path.

So in sharing my experience, I hope it could help and benefit others, seeing that recently I've been approached by a few engineers about switching from a technical path into a project management path, which is the path I've been exposed to - and a path, that I myself am now, again find myself at a juncture, where I'm considering about what to do next(!).

Courtesy (link)
I am by nature, what you would call a Switcher (previous company even made a "switcher video" for people who moved around the organisation). It is probably down to my wiring, my upbringing & challenges growing up, experience of reality and my internal motivations that drives this behaviour - my own biases - that kick in and call for a change of some sort.  It is a state of restlessness that can only be resolved by a change, which I now find myself in, having given myself till March 2017 to implement my next transition.

The rest of the post is set as a series of Questions & Answer session that I had recently with myself, as part of my own introspection, as I took a long walk in the park, on a beautiful winter morning, just after sunrise, and did some soul-searching...I was the only walker, so I had a verbal conversation with myself:

Why did you choose a career in Software?
Why did you switch within software engineering roles?
Would you recommend software engineers to switch domains?
Why did you leave Software Coding and switch to Project Management & not pursue a path in Software Management?
What happens to your technical skills, are they still sharp?
Do you think it mandatory to get a PM Certification?
Do you regret the choice you made into Project Management?
Do you believe you've met your aspirations from Project Management path, looking back from where you started?
Given your PM journey, do you still consider yourself a Project Manager?
Given your experience, what next lies for you in the path of Project Management Career? Where to from here?
So what is this thing called "Project Leadership" then?
Where to from Here? After Project Leadership, what's next?

Why did you choose a career in Software?

I was always passionate about computers, from a teenager (even though I did not own a computer until I was 16). Although my first career choice was Medicine, it was not possible, so Engineering was the next best option. I chose Electronic Engineering and not Computer Science because there was overlap with Software topics within the engineering degree, that I thought would give me the best of both worlds, having majored in software design projects in 3rd & final year. I later did complete a Masters in Computer Science, which complemented the engineering skills quite nicely. I loved all things software, wanted to create great applications. Inspired by Silicon Valley, and the opportunity to work oversees, kept me in the software path.

Why did you switch within software engineering roles?

I switched from embedded development to server-side systems application development to get fuller, end-to-end exposure of the technology domain. Having started my career in the domain of Digital TV, the world was very vast. I felt that I had mastered Set Top Box (STB) technologies and concepts to a reasonable level of detail, and that the future for STB applications will remain static for years to come, apart from implementing new technologies - the architecture, design principles and models for application would not change. 
When I was doing my Masters in Computer Science research, I was exposed to the world of distributed, server-side technologies. I wanted more of this world, so I switched to work on Video-on-Demand systems applications. This exposed me to a whole new world of engineering & made me appreciate the challenges of true software engineering, especially for large-scale, reliable, redundant and resilient architectures. I was exposed to networking, master/slave failover architecture, client/server, real-time streaming. I got to experience core systems programming (enterprise servers), from seamless fail-over orchestration to in-house memory management units. It was awesome.
Over time, once I thought I'd understood enough of the underlying principles of systems engineering (including integration), I switched to project management and then later switched back to software development for a short stint.
My career in technical took the path: 
Engineer-in-Training -> Software Engineer -> Senior Software Engineer -> [Project/Program Manager Switch] -> Principal Engineer [New Technology] -> [Project Leadership]

Would you recommend software engineers to switch domains?

Absolutely Yes! 
Do not consider yourself specialised in just embedded software, or systems, or webapps frontend / backend developer. Allow yourself room to grow, expand your toolsets. Of course, spend the due time in the domains first, before making the switch. It's not a hop-on, hop-off ride - you must spend sufficient time to be exposed to the essence of the domain, then move on.

Why did you leave Software Coding and switch to Project Management & not pursue a path in Software Management?

My ultimate aspiration was to run my own software company one day (apart from working for Microsoft / Apple / Google which I've not forgotten about, but seeing that I'm hitting forty soon, might be a pipe dream(?))...
I looked at the options present in the alternate path of:
a) Software Team Lead -> Software Manager -> Senior Manager -> VP -> Director -> CEO
b) Principal Engineer -> Senior Principal -> Technical Director -> CTO -> CEO
b') Principle Engineer -> Architect -> Senior Architect -> Director -> CTO -> CEO
c) Technical Project Manager -> Senior Project Manager -> Program Manager -> Director -> CEO

Courtesy (Link)
My aspiration was to understand and experience end-to-end, across the business, what it takes to get a product conceived in strategy, implement in product development, delivered to market and the ongoing operations and maintenance life-cycle, and the effect on a company's bottom-line.

I wanted to learn all of these elements because I saw them as valuable building blocks and expertise I would need to tap into, when I would eventually run my own company one day.
Courtesy (Link)

Choosing a) I felt would not expose me widely enough to all the areas, restricting myself to a technology group, or component of a larger system, with limited exposure and interactions with the wider business. In addition to this, at the time, I was (as I am to this day), comfortable with leading people, but not too keen on the HR admin aspects of people management (because I had an issue with performance appraisals as I still do).

Option b) would be taking me down the path of specialising in a domain or technology. I was not ready to specialise, similarly, the path wouldn't have exposed me to the wider end-to-end business touch-points, until pretty much late down the track. I also felt I could pick-up on any technology domain if I felt like switching back, because principles of systems engineering hardly changes (practises come and go, solid principles are hard to challenge).

So I chose c) Project Management path because it gave me the most diverse opportunities and offered the exposure I needed, just to mention a few noteworthy points:
  • Leverage my end-to-end technical exposure to running different technical projects
  • I get to manage teams as a software manager would (apart from HR admin), so the people & leadership skills are the same, instead there's indirect influence, leadership & management style
  • Get to work with all levels of management / leadership. Some software managers and senior managers actually served project roles in my projects, reporting into the project, even though by line hierarchy and job level, were higher in rank than project managers. (How cool is that?)
  • Exposure to senior management folk, through steering councils & strategic forums
  • Exposure to players in strategy
  • Being part of the big picture. Project managers are usually part of a wider program forum, where you get exposed to the big picture. You get to learn the inner workings of the business, and your perceptions & reference points change toward bigger picture than micro-level, blinker-focused project delivery
  • Networking - exposes you to people across the business you wouldn't normally be exposed to
  • You get a well rounded view, 360 degree view of running company
  • You're exposed to the same management / leadership challenges and learnings that allows you to switch back into any other management position
  • The path to a General Manager position is easier to reach because of the diverse experiences project management exposes you to

What happens to your technical skills, are they still sharp?

This is something that will definitely challenge you as you leave software coding and transition into the project management role. It took me a while to make the full transition, and leave all coding behind. In fact, in my first three years into project management, I still maintained side projects as a coder, dabbling here and there, contributing to in-house open source projects, and also even won a prize for the most code-review comments submitted (whilst still being a project manager). I would review log files, even perhaps triage...but eventually I had to just let go.
Courtesy (Link)

Project management is a very broad discipline. Forget about the dogma and the details of project management process - for me, these are simple tools, hygiene factors, just as a coder understanding the language syntax, rules and design patterns.

You have to let go some detailed technical and create room to grow and learn the new skills, tool-sets and knowledge-base, which is much needed to do justice to the project management role. Your technical skills and knowledge will serve you greatly in managing and leading your projects, but it doesn't mean you need to understand every technical detail. This is why as a PM, you rely on the owners to manage the detail. Your job as PM becomes one of leading and steering the project team to success. In addition to this, you leverage your technical competency by learning to effectively communicate to your new stakeholders (who probably don't appreciate technical), but still need a clear, concise and uncomplicated way of understanding the progress of the technical project.

So, yes - you will eventually stop coding. You will eventually stop reading log files. You will eventually stop contributing to code reviews. You will eventually stop reading requirements documents. You will eventually stop reading design documents. You will eventually let go of playing a pseudo-architect role. You will eventually stop challenging development teams estimates "It used to take my team 5 days to do this, why 15 days?". You will eventually stop remembering the days of lore, back when you used to write cool code and now cringe with what you see coming out of young development teams who don't appreciate the art of software engineering. You will eventually....just let go...and focus on developing your skills as a PM...

Instead your work day will be filled with not only project administration & management, but in the variety of soft, unspoken, and hard-to-measure ways of getting the project delivered. You will be improving your communications style, both in writing and presentation modes. You will learn how to traverse the political landscapes of the business, it is certainly like a game of thrones in some organisations. You will be managing risk, avoiding risk, and solving some burning issues. You will be spending time nurturing relationships. You will have very little time to code - unless it's explicitly part of your job.  You will start by becoming a master with MS Project, follow PMI process to the letter, drive the status and plan day-in-day out, send out reports like clockwork...Those are much needed starting skills as a PM, and then overtime, those too become hygiene factors...

In weekends and spare time, sure you can code - it depends on your level of aspiration, do you want to master the art of project management and grow through all the levels, or are you just moon-lighting?

One of my managers once asked me one day, when he saw a development environment on my desk running, whilst I was project managing. He asked me "Hey are you project managing, or you just moon lighting as PM,  doing STB development?"

The transition is not going to be an easy one. In order to learn and grow, you will need to let go the old, and learn new skills and tools. You don't forget principles, but be sure, you will get rusty with the details of technical platforms, development tools, etc. What you lose in technical skills, you gain a wealth in soft skills, communication, leadership, relationship, engagement-management, etc, etc.

One way I tried to keep a handle on technology is through subscribing to ACM Journal of Computing, and IEEE Transactions in Software Engineering. Widely respected journals, covering state-of-the-art progress in software engineering. In this way, I can still keep abreast of the engineering domain.

Do you think it mandatory to get a PM Certification?

No, IMHO not mandatory at all - but recommended only because if you want to branch out into other domains or companies, some organisations look for (or insist on) certification as a minimum (which I'm not too comfortable with). 
Training and self-learning is important. As well as training-on-the-job.
Courtesy (Link)
Specifically in the world of software specialisation, it's better to understand the domain than to have a generic project management certification. Even the agile certifications (Scrum Master, Product Owner, etc) are interesting to have, but I question the true value they would add to companies & organisations who generally implement their own hybrid-mix-bag of process implementation.

Why do I think so?
If you're sticking to software & systems engineering, in other words, your domain of speciality is within Software, then in my experience, it is far more valuable to have a deep appreciation for the variety in process, when it comes to software projects, especially since no two companies are alike, factors such as in-house development process, team culture and company culture factor in way higher than coming in with a PM Certification. 

Going on a course and getting certified proves your commitment to learning, and your ability to pass an exam, in my books(!). Still it is a good starting point. Sure, you will gain the tools needed to help you in the job, in the role as a PM, so you can tick the boxes of the various stages / states / processes of the said PM certification, provide the relevant project artifacts, so it seems on the surface you're practising project management.

A lot of the stuff they teach you in PM Certification (earned value, return-on-investment, value/cost, project prioritisation methods, etc.) will most likely be forgotten and not used in your job, unless there is a serious Project Management Office (PMO) in place. Even so, with a serious PMO, from my experience in software management, most traditional PMO processes conflict with current state-of-the-art in software delivery anyway, where the software divisions end up doing their own thing, sometimes creating Technology PMOs with its own unique identity, process control & measures that don't reflect classic PMOs taught in PM courses.

So I would say attend as many training courses as possible, do a lot of reading & self-learning. Work in the job for a while, then decide whether certification is right for you or not. Going down the certification route will require investment in your time, commitment to seeing the course through, passing the exams. Getting the certificate will no doubt be a good personal achievement, but be warned, that a lot of the stuff & knowledge-gained will not be immediately applicable to the context you would find yourself in (unless of course, you work in an organisation that follows strict PMO processes built on the certification you acquired).

Do you have any PM Certifications?
Currently, as of this writing NO. But I have attended training courses for PMP, went through all the coursework and material (even blogged about the training here). I have also done the IEEE CSDP course work, and even have copies of the SWEBOK & PMBOK that I use as reference.

I have been on PM training: Advanced Software Project Management training as well as Tom Gilb's Competitive Systems Engineering / Evolutionary Project Management material.

Apart from that, I am self-taught, and voraciously consume books from popular subject matter experts. And most importantly, I've learnt on the job, been thrown into the deep end, and have shadowed, was mentored, by some really great project leaders in the field (whilst working in the UK).

My role models are Steve Jobs, Bill Gates, Richard Branson, Larry Page, Sergey Brin, Mitch Kapor, Michael Dell, Seth Godin and many of these people are PM certified??

I have also witnessed first-hand, from the various leaders at my previous company NDS/Cisco, the best project leaders were not PM certified, or even MBAs, and still did an awesome job running projects and getting things done.

Why then are you considering PM Certification now?
Because the reality of the business landscape in South Africa, and because I am now an independent consultant, having a PM certification to my name, doesn't seem like such a bad option, if it means me getting some business-through-the-door.  However, I've not committed to doing this just yet, because I am stubborn like that.
By the way, I am a member of PMI and get their journals of project management on a monthly basis, so I keep abreast of developments in the area - but still don't feel compelled to get the certification.

So you prefer to remain tied to Software Projects which is why you really wouldn't need a broad PM certification then?
Yes and No. 
Yes - because currently I see myself as a pure Software & Systems Professional. That's the path I've taken, even though I spent 10+ years in project management / leadership, the nature was about software products. I am a computer scientist & a software engineer by learning - so software systems is my default.
No - because now that I've reached a point of saturation in my domain (Digital TV/VOD), I am starting to get enticed with large-scale, global, pan-country, pan-company, pan-government style projects - also known as Mega Projects (multibillion dollar). If I decide to go down this route, which is a departure from software, then I will need a PM certification.

Do you regret the choice you made into Project Management?

To be completely honest, during the initial transitional period, I did regret losing my technical game. In the long run, after ten years in the path, I can't say that I regret it. There will be ups and downs, times when you think and feel project management is about herding cats, doing administration that nobody cares about, etc, etc (not seeing the forest for the trees). Over time, through deeper and richer experiences, the wisdom of PM mechanics plays itself out, and as the diversity of experiences increases, it becomes worth it.

Do you believe you've met your aspirations from Project Management path, looking back from where you started?

This is a vital question that sets the stage for what I should do next in my career. The way I answered this to myself was with a series of questions:
Did you get the exposure in working with different teams & cultures? Yes!
Did you get exposed to wider group of leaders (management & technical)? Yes!
Did you experience and learn leadership skills as any software manager would? Yes!
Did you get to work on a variety of projects, small-medium-large? Yes!
Did you get to work on strategy, and can understand what it means to take a product to market? Yes!
Did you get exposed to senior management? Yes!
Are you comfortable with dealing, and communicating with people at all levels of rank? Yes!
Did you work with C-Suite members? Yes! My main customers are now C-Suite members.
Did you work in startup projects? Yes!
Do you know all parts of a business value chain now? Yes!
Can you run your own division now? Yes, but I would need a little support in Financial Management!
Can you run your own product company now? Yes, I believe I can!

Given your PM journey, do you still consider yourself a Project Manager?

A long time ago, yes. A project manager manages one-to-three projects in a specific domain, usually with concrete objectives, generally in one workstream. I now manage multiple workstreams in multiple domains, for projects that are less concrete. 
I now focus on big picture alignment and C-suite stakeholder management, rather than detailed Gantt-Chart, MS Project style tracking. I have not used MS Project for a number of years now, and will probably not do so if I still remain operating at the level I am. Just as a CTO barely writes code, in the same way, I rely on other project managers to manage the detail of project plans & detailed execution.

I don't consider myself a project manager these days, any more than I consider myself to be a software engineer.

This is my journey into Project Management, starting from 2006:
Project Manager -> Senior Project Manager -> Program Manager -> Enterprise Program Manager -> Enterprise Portfolio & Program Manager [Current]

I no longer get great satisfaction from crafting complicated MS Project / Excel project plans, or learning the latest tool, in pretty much the same way as when I realised that I had sufficient experience and know-how in software development to branch out into something new.

Given your experience, what next lies for you in the path of Project Management Career? Where to from here?

My million-dollar, soul-searching question :-)

I've been doing some background analytics recently into my career, because I like tracking stuff and am into the topic of personal data tracking. Also, because I'm considering a PM certification, the last time I checked, you needed to prove your hours working in the project management field. So I created the following map, taking into account holidays, etc - I have spent my career to date in the following:
  • 13 200 hours in software engineering
  • 23 000 hours in project management
If we go by the once-popular-but-now-dodgy Gladwell's 10 000 hour rule (which has been debunked), then I should be an expert in software (which is definitely not the case), and pretty solid in software/systems project management (which is probably more closer to a truth). So right now, I am most likely a Project Professional, specialising in Project Leadership.

Here's the view:
Hours spent in Software Career Paths

So what is this thing called "Project Leadership" then?

Courtesy (Link)

I recently read this book which resonated a lot, in retrospect I exhibit the skills and competencies of a Project Leader as outlined in the book. Incidentally, I had attended a PM training course offered by one of the authors, Donnie Macnicol.

So I have witnessed my journey from project management into project leadership, as shown in the book Table 1: Capabilities of the Future Project Leader, extracted below:

Future Competencies of a Project Leader
From communication planning
To expert engagement of disparate stakeholder groups

From delivering outputs and outcomes
To delivering value, both explicit such as defined benefits but also implicit such as enhanced relationships and trust

From focusing on time, cost and quality as the definitive success criteria
To identifying the range of 'hard' and 'soft' success criteria, recognising the life-time value

From focusing on the control of change
To actively seeking ways of improving value by identifying opportunities and actively advocating their acceptance

From viewing projects as stand-alone entities and trying to manage as such
To accepting their place within organisations and therefore the complex relationships that exist with the many stakeholders critical to ensure success including other functions and networks, informal as well as formal

From rigorously applying standardised P3M (project, program and portfolio management) approaches
To applying in a flexible and agile way to deal with an increasingly fast-moving world where customer requirements are expected to change

From working in static hierarchical organisations
To delivering change continuously in dynamic and innovative organisational frameworks

From being a master of process
To a reflective practitioner with the capabilities and emotional intelligence to learn and apply what is most appropriate from the arsenal of materials available

For the last year and half, the above capabilities have been my way of working. I have left detailed project management dogma behind, and am focused on steering multiple teams and stakeholders, with a diversity of culture, expectations & objectives, by focusing on alignment and stewardship to get large projects delivered.

Where to from Here? After Project Leadership, what's next?

Courtesy (Link)
I am faced in a situation where, as a consultant, getting to a point of choosing the work, and choosing the clients you want to work with - is a privileged position to be in. Alas, I am not there yet, because being in South Africa, the playing field in terms of domain in Digital TV/VOD is limited, and the network is pretty damn small. Branching out into other industries is also challenging because outside of Digital TV, and the lack of a network, it is difficult to break out, but not impossible.

I have not yet reaching breaking point to find an exit from my current domain to another, not yet. The closest domain to switch to would be in Telecoms, but as far as I'm aware, no real, hard-core software development happens much inside South Africa.  Switching to medical, motor industries is possible. Finance maybe at a stretch, and definitely a big no for defence industry. Government is also an option.

Staying within my domain, leaves me with primarily two path options, each option having its own set of variables:
1) Permanent Employment 
2) Remain in Consulting 
2') Run my own Product Start-Up

What would you consider in a permanent path?
I would consider a senior leadership role in running an entire division or department, covering Software & Systems Engineering (Product Management & Development/Integration). I could run an Tech Ops Division too.  I would also consider an opportunity at Project Director-level, shaping up an Technical PMO stream, focused on managing and leading technology-heavy projects. I am however, less inclined to higher-level, business process (finance / IT / Ops) optimisations that run on what I call "common sense efficiency and ownership that should 'just-work' ".

What about consulting path?
I would like to reach a point where the engagements I win are purely strategic, advisory and coaching in nature, than actual delivery management. Instead I can offer training, coaching & mentoring of a PMO team, or help in organisational transformation initiatives in shaping a strategic PMO. I imagine I can set a path for aspiring project and program managers to follow, leading them through their own projects and on-the-job training. 
If I could do this, then it would mean I don't have to work a full five-day week, and instead spare a couple of days, on my own personal initiatives of starting my own product company up!

So do you still have aspirations of running your own product company one day?
Yes indeed!

So, what about the Mega Projects option?
Yes, this too is an option worth considering. Some governmental pan-country projects seem to be very interesting challenges, if I can find an Software/Systems Engineering opportunity. Construction projects are cool too, but that's a big switch to make!

And, what about large-scale IT Systems SAP / CRM / MRP / MDM / Oracle?
As a software engineer, what really interested me was core code, not high level application code. As naive as that may have been at the time, given that job adverts for these application developers or project managers offered pretty damn high salaries, I was stubborn and preferred to remain close to core code. If I worked on SAP or Oracle, I wanted to write the code running the internals, serving the external APIs to enterprise-clients.  
Even as a project manager, these systems come with their own flavour of project methodologies - it just didn't feel right, because I'm not a strict paint-by-numbers guy. 
I have also studied MDM, which I find fascinating from a technical perspective - and could lead a project on MDM - but I don't want do get into detailed project management in these domains.  I have been flying close to the sun, interacting with C-Suite clients, such that going back to detailed delivery role would be a last survival option for me (at a push, the reality is to bite your lip, earn an income and be grateful you have a job).

1 comment:

  1. This is a great article and insights. Thanks for sharing. Can identify with so much of it . would love to catch up about project leadership at some point - Zakiyya