Principal Software Developer: Key Responsibilities and Impact

I get asked this on a semi-regular basis and I’m finally, after all these years, getting around to writing up what exactly a principal level engineer or principal software developer is. Here is what I’ve got for you in this post, broken down to the big topical points of conjecture of what this role entails. I write conjecture, because in all seriousness, this role is as wishy washy once you include more than a handful of companies.

The Principal Software Developer – AKA principal engineer, is a senior-level professional in the software development or engineering field. This role is typically associated with significant technical expertise, leadership responsibilities, and strategic impact on projects and organizational goals. Here are the key responsibilities and attributes of a principal developer/engineer:

Key Responsibilities

Continue reading “Principal Software Developer: Key Responsibilities and Impact”

A Guide Path for Strategic Growth and Leadership in Software Development

Growing a development team is somewhat parallel to building a skyscraper. You start with a solid foundation – you’d at least hope – add floors with meticulous planning, and eventually, you reach the pinnacle with strong leadership guiding the entire structure. In software development, this process involves strategic hiring decisions at various stages. Let’s delve into why focusing on Senior and Mid-Level developers initially is crucial, the role of Junior developers in the maturation phase, and the point at which hiring Principal developers becomes essential.

Continue reading “A Guide Path for Strategic Growth and Leadership in Software Development”

How to Reconnoiter a New Role!

“i.e. Starting a challenging new role!”

I’m stepping into a role right now, which I announced recently “Career Update: Back to Engineering!“. In that role I have a number of key topics and knowledge specific to the role that I need to attain. Most of this is centered around the current state of teams, members of those teams, work in progress, product, and service status. The following are some of the important steps I’ve taken to reconnoiter the current state of things. These steps I’ve taken to get up to speed as quickly as possible! Continue reading “How to Reconnoiter a New Role!”

Getting Things Done! Coders Unite!

Over the last few years I’ve contributed to, organized, worked with, and been in the audience of hundreds of user groups throughout Portland, Seattle, San Francisco, and Vancouver BC. By far, this area of North America has the most active, resilient, and density of thought leaders in the technology world. There is something missing however and I’d like to start working toward filling this gap. What’s missing you ask?

Problem: People often get together and talk about tech, but rarely get together and do something about tech.

The vast majority of user meetups end up as presentations. I must sadly say, often boring presentations that don’t really teach or demo all that much. Attendees often just come to talk afterwards or otherwise socialize, which is hugely important to the community. However there has to be a way more could be done. A better outcome would be to create a two way conversation, instead of the one way presentation, and to involve ourselves in creating solutions, new technology, and idea. In a few rare situations I have found groups that do something about this void. What’s their solution?

Solution: They actually get together, implement code, pair, and work together on problems. Kind of like a Hackathon, but way more often.

That’s what I’d like to create. To start off with, I’d like a group that is technology agnostic, is fairly skilled yet willing to pair and bring others up to speed, and simply gets together at least once per month to implement a specific project or effort that is predetermined by group submission and conversation (i.e. we’ll use a google group, e-mail list, or such). I think, and feel like there is enough support to get something like this started in Seattle, Portland, San Francisco (especially here), and Vancouver BC. My question is though, would you be interested in helping out, coordinating with me, and otherwise uniting coders to do more, learn more, and better themselves?

If you are interested, please leave a comment and help me out by answering a few questions:

  1. Is “Coders United” a good name for the group? What ideas do you have?
  2. Do you have a project or three or four that may be of interest for a group to get together and work on?
  3. This type of group would probably need to meet for more than an hour, would you be able to meet for 3-4 hours, maybe even on a weekend to implement a full project?
  4. What’s your preferred method of contact (e-mail, twitter, facebook, text message?) and how should I get in touch with you?

Black Hat Agile Cloud Retrospective Quality Improvements

Big enough title?  Meh, that isn’t really related.  🙂  Please read on.

The latest little blurb back and forth in the ALT.NET Community on the ALT.NET Seattle Google Groups thread is about retrospectives and how to increase quality. I won’t post any direct messages but wanted to blog a bit about that.

My fellow coworker Eric Ridgeway mentioned, which I whole heartedly agree, one doesn’t wait until the end to make quality improvements.  One focuses on quality at all times.  This makes me wonder sometimes were the disconnect is for quality improvements.  Even when asked sometimes, I’ll state something that is so simple as “always focus on quality” but then have follow up questions such as, “so when should we focus on quality?”

How did that not translate?  I get lost when I get a statement made back as a question.  I just stated the solution, the solution is to always focus on quality.  When you write a test and watch it fail for lack of implementation and then implement it look to see if it is elegant.  Look for the quality of logic and code usage.  If it looks odd try to refactor it.  If something is just being changed, check the quality.  If you’re white boarding, ask yourself if you should be trying out some implementation instead of just white boarding.  If you’re implementing but it doesn’t seem clear, ask yourself if maybe a white boarding session will work.  If you find your daily process is hampering clear minded efforts to develop good software solutions, ask why the process is low quality and what would make it higher quality.  If your team has low code coverage, or heaven forbid no code coverage, don’t wait, start doing something immediately.  Stop non-quality development and start high quality development.

It really is that simple.  There is no way that should not translate.  Always focus on quality.

While reading this blurb on the ALT.NET Google Groups I got an alert for Rob Hirschfeld’s latest blog entry about Agile & Cloud Computing. In his latest blog post titled “Black Hat Feedback Essential For Cloud Success” he dives right into the process improvement and retrospective conversation. Rob points out a few reasons teams skip on improvement:

  1. All that talking and listening and improving takes time and attention.
  2. Post Mortem or “lessons learned” meetings that never make any difference because they happen after the work is done.  (well, duh).
  3. No one has a methodology that makes the meetings productive.
  4. Lists with more than 3 items on them have too many items to be productive for improvement activities because of reader’s limited attention spans.

One of the quotes he pulls from Lean Agile advocates Mary Poppendieck and Eric Ries addresses this, “The secret to improving your performance is to regularly work to improve your performance.”  This goes back to what Eric, many others, and I keep saying, “always work on quality, don’t wait until the end”.  If you wait until the end, it’s already too late.