one piece of advice that stuck onto me till date: "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
Architecting applications for the cloud is a non-trivial problem. Lot of forethought needs to go in place while choosing a particular infrastructure component. And the ideas of resiliency, robustness (what can be bucketed into 'graceful-degradation') etc along with the most important Monitoring needs to be put in place right from the initial days of the app, so that rearchitecting is does NOT end up being a costly affair.
Couldn't agree more. The cloud just makes it clear where you didn't architect for resiliency properly, in your own DC you work around this by doing things that you can't do in the cloud.
But the biggest difference is automation. Because in the cloud you have a full suite of APIs, you can literally automate ever piece of your infrastructure. In your own DC you have to design this stuff to be automated from the ground up, which just making a poor layer2 choice can make that task astronomically more difficult.
Management is not easy as it sounds. Leading people and setting strategy needs a lot of experience. The culture of the company to take calculated risks should gel with your thought process when you are higher-up. You are also responsible for the people who report into you and need to make sure that all are 'taken care of'.
Being in Management has nothing to do with Coding; you should be a good manager of time/tasks, so that you can afford to code atleast a few hours every week, if you dig such.
I have moved from being a Principal Engineer, to Product Management and now am leading Engineering. Must say that I have enjoyed the journey so far, and the learning has been exponential. I was hands-on when I was a PM, and am still. As a PM, quick PoCs helped me get across my idea quicker and when you lead Engineering, complete understanding of the details is the most important so that course corrections and strategy can be defined well.
Being hands-on keeps me sane.
Did a 1-year part-time Management course in one of the top BSchools, at the end of my tenure as a PM - wasn't of great benefit, as I think that the idea of a MBA is becoming largely irrelevant. I think a good selection of courses in MooC helps; in fact, for me, I was so much fascinated by courses in Coursera that led me to do the part-time Exec Mgmt course. But I must say that the experience of the Professors and getting back to school after almost a decade was enjoyable. Just listening to the lectures of the Profs was much needed.
During the whole journey, I cultivated the habit of reading and writing(a lot!) and I can personally see my thought process mature. But I know it's just tip of the iceberg.
I think the most important trait is not to stop learning whatever you do. I know it sounds cliched, but it is what it is.
Am always on the lookout for smart people with whom I can work with and learn.
I would agree. Shit happens; deal with it without wasting more resources on it. [BUT, If you can afford the legal fees and more importantly -- the TIME -- go for it, but do not go with the idea of vendetta in mind, but rightful compensation.]
I somehow like the idea of 'Let Go', though easier said than done, this will make you realize many things in life and prepare you for the Future than continue to lurk in the Past.
You might have to embed yourselves in the company(/Customer) as a contractor and show them the value-prop, build confidence and then take over complete projects. The first customer is primarily though word-of-mouth!
(Sorry, but this is pretty much the standard advise for any consulting gigs)