In this talk, we’ll explore the properties and traits of a Senior Developer, and attempt to demystify what that phrase means. We will focus on how our knowledge, confidence, experiences and relationships combine to create the complete picture of us as developers, and will talk about ways to strengthen each of those attributes. We’ll discuss learning immersion, community involvement, and open source participation and how they can help us grow our skills, and shorten the path from Junior to Senior and beyond. Finally, we’ll discuss the intermediate steps along that path, and learn how to market ourselves to prospective clients and employers during our journey.
6. About Me
Senior Software Engineer at
22 Years as a Software Developer
Launched a Startup; sold to Ecolab
Technology Consultant at
Digital Media
Married to Awaisha 19 years
Kids: Brailen & Ryder
31. 3 YEARS EXPERIENCE !== SENIOR
5 YEARS EXPERIENCE !== SENIOR
10 YEARS EXPERIENCE !== SENIOR
32. NO AMOUNT OF EXPERIENCE
AUTOMATICALLY MAKES YOU A
SENIOR ENGINEER
33. NO AMOUNT OF EXPERIENCE
AUTOMATICALLY MAKES YOU A
SENIOR ENGINEER
Our career is a thirty to
forty year journey.
Do we achieve mastery
5-10% of the way
through?
35. Seniors can
Self-Manage
Prioritization and Workload
Management Skills
Can identify the most critical tasks
Can set accurate expectations with
team and clients
Understands the Value / Effort
Matrix and apply it to their work
Frequently communicate current
status, projected status and any
barriers to success
36. LOW EFFORT
LOW VALUE
HIGH EFFORT
HIGH VALUE
HIGH EFFORT
LOW VALUE
V A L U E
COST/EFFORT
LOW EFFORT
HIGH VALUE
37. Seniors can
Estimate
Analyze problems and
determine accurate level of
effort estimates
Can mentally break down tasks into
smaller, time-boxed chunks
Is conservative when estimating to
account for unknown challenges
Considers full lifecycle of a task, not
just time to code
Can estimate the work of others on
the team based on past experience
with that team member
38. Seniors can
Tune / Harden
Create production-ready
applications that are both stable
and performant
Understand how to tune various
parts of an application for improved
performance
Has experience with caching
methodologies, indexing and
refactoring
Has knowledge of hardening
techniques such as encryption,
obfuscation, surface limiting,
patching, port limiting, etc.
40. Seniors are
Multilingual
Real-world experience with
multiple technology stacks
Two or more general purpose
programming languages
Multiple secondary technologies
Multiple ancillary technologies
Familiarity with a variety of
technology stacks aside from their
primary environment
42. Seniors are Fad-
Resistant
Have experienced multiple
technology cycles and know
what tech has longevity
Puts the needs of the project and/or
client ahead of their desire to work
with the latest technology
Understands the impermanence of
technology and can recommend
solutions that meet customer needs
Understands the longevity
requirement of their project and the
available current and future
workforce
45. Seniors know
the full SDLC
Understand the Software
Development Life-Cycle and can
manage all aspects
Understand the full lifecycle of
projects from concept to delivery to
maintenance and support
Knows the roles of the various team
members involved in the lifecycle
Has experience working in multiple
roles within the cycle
Can educate and inform team
members on the roles they play
46. Seniors know
the cost of Tech
Long term ownership,
maintenance and support costs
are understood
Personnel & Development cost
Total Cost of Ownership over time
Upkeep and Maintenance cost
End User Support cost
Hosting and Infrastructure cost
47. Seniors can
Identify Debt
Surface, document and
communicate debt-creating
code and tasks
Understand what Technical Debt is
and how it impacts projects
Understand how to reduce and/or
eliminate debt
Understand when it’s appropriate to
create technical debt
Document and track debt-creating
tasks for later mitigation
48. Seniors can
Identify Risk
Understand the impact of
change, poor requirements,
missed delivery, etc.
Identify and quantify Risks when
they are presented
Understands the Risk to Reward
value of a given task
Doesn’t introduce Risk into projects
that are already behind, late or at
risk
Tracks Risk throughout the project
to be able to accurately gauge the
chance of success or failure
60. KC
TIME
In the early phase, our
knowledge is growing at a
rapid pace.
Our confidence is starting
to build, but we don’t yet
have any experience.
61. As we continue on our
path our knowledge
continues to grow
K
C
TIMEE
Our confidence continues
to grow and we start to
gain some experience
62. As we continue on our
path our knowledge
continues to grow
K
C TIMEE
S
Our confidence continues
to grow with each new
experience
63. After getting a hand full of
projects under our belt
our knowledge deepens
and matures
Our confidence continues
to grow with each new
experience
S
S
S
TIME
64. As we continue on our path,
our knowledge continues to
grow and we start to develop
subject matter expertise
TIME
S
S
S
S
S
S
Our confidence continues
to grow with each new
experience
65. At some point our attributes
reach peak maturity and we
grow steadily with each new
experience
We have established
subject-matter expertise
in multiple areas
S
TIME
S
S
S
S
S
67. TIME
Our knowledge, experience and
confidence combine with the subject
areas in which we work, and the
successes and failures we have been a
part of to define our persona as an
engineer.
68. TIME
All of this is to say that the definition of
a Senior Software Engineer is far more
complex than a number of years, or a
proficiency level with code.
Abstract
In this talk, we’ll explore the properties and traits of a Senior Developer, and attempt to demystify what that phrase means. We will focus on how our knowledge, confidence, experiences and relationships combine to create the complete picture of us as developers, and will talk about ways to strengthen each of those attributes. We’ll discuss learning immersion, community involvement, and open source participation and how they can help us grow our skills, and shorten the path from Junior to Senior and beyond. Finally, we’ll discuss the intermediate steps along that path, and learn how to market ourselves to prospective clients and employers during our journey.
Good evening everyone! Before we get started I’d like to say a quick thank you to our sponsor, Signature Consultants, for providing this space, the food and drinks and giveaways for tonight’s Meetup.
Congratulations to all of the recent graduates, the final cohort to graduate from The Iron Yard Charlotte. Also a quick shout out to The Iron Yard for all of their contributions to the Charlotte Tech Community over the last several years.
If you’re not already doing so, join us on #Slack at CLTDevs.com. There are discussions for every interest including channels just for Junior Developers, JavaScript Developers, Job Postings, Tips and Tricks and much more.
Explore the properties of a Senior Software Engineer
Demystify what the phrase means
Focus on how Knowledge, Confidence and Experience combine to create a complete picture of us
How to strengthen those attributes
Learning Immersion
Community Involvement
Open Source Participation
Intermediate steps along the path
Learn how to market ourselves to prospective clients and employers
About Me:Senior Software Engineer @ Skookum
22 Years as Software Developer
Launched a Startup; sold to Ecolab in 2011
Technology consultant at Imperatives
NASCAR.com (Digital Media) for 3 years
Married to Awaisha (painter) for 19 years
Two kids: Brailen (16) and Ryder (7)
My wife is a painter, you should check her out on Instagram @awaisha_art.
#shamelesspromotion
Here are some of the companies I’ve had the pleasure to do business with over the years in a number of different capacities.
We’re here to figure out what a “Senior Software Engineer” is.
There are lots of definitions, there are lots of opinions and there are lots of things already written on this topic.
We’re here to add to this discussion, explore the traits of a Senior Engineer and figure out how to get there from where we are right now.
Before we can define what a Senior Software Engineer is, we first have to know what a Software Engineer is.
Perception: We’re some super connected techno-nerd who lives and breathes all aspects of technology.
This is partly true, but it’s not nearly as cool as this cyberpunk image ...
In reality we’re just normal people who happen to enjoy the art of creating things through code.
We don’t necessarily look any different than anyone else and we don’t all look like one another. We don’t all have the same background, nor do we have the same interests outside of work.
There used to exist a stereotype of the developer as a Star Wars (or Trek) loving nerd who is super into fantasy books, sci-fi, video games, dungeons and dragons, who struggled to get a date and was the outcast in school.
While some of those things might be true for some of us, they’re by no means true for all of us.
However, there is one thing that we all have in common, at least those of us who really love this profession ...
We are almost all without exception, people who love to learn. This is critical, because no matter how far we go in our respective careers, we will always be learning.
Having a passion for learning, for problem solving and a high level of comfort with change is critical to our success as software engineers.
This is a profession where you learn your craft and then spend years honing your skills using a constantly changing set of tools.
The things that make a successful Software Engineer aren’t necessarily the things you would immediately expect. It’s not knowing a certain language, or being able to write a for loop with conditional logic without reference.
It’s not being able to write a beautiful and performant SQL query or knowing how to use ActiveRecord like a boss. While those things are the output of Software Engineers, the things that make us good Engineers are more behavioral and less rote.
We’re mostly all coders here, so let’s talk about this in a language we all can understand. That’s right, we’re going to build an Engineer in code.
To do that, we have to start with a base class from which we can inherit properties. Now that we’ve established that we all have some commonality (that doesn’t include Star Wars and Dr. Who), let’s use our known common traits to get started:
Class Student
The Student is the very essence of a Software Engineer; the traits of a good Student are the same traits of a good Engineer. Let’s quickly explore some of these basic properties. We won’t spend a lot of time here, but note that these traits are expounded on a bit in the CLTDevs GitHub repository: https://github.com/cltdevs/developer-survival-kit
Present
Engaged
Receptive
Aware of what’s going on around us
Inquisitive
Responsible
Goal-Oriented
Flexible
Passionate
Learning
This is a phase where we are accepting input. We are receiving information and processing it, but not providing much feedback or output. In this phase, we are actively accumulating knowledge and starting to build some confidence.
Once we have graduated from the “Student” phase of our career, we enter into the phase where we begin to hone and perfect our skills.
We’ve changed from our role of simply accepting input, to starting to create output.
We’re now generating real things, no matter how trivial or insignificant they might seem.
What’s important to us now isn’t necessarily creating things, but rather learning how to create things in our given environment.
We now have to start thinking outside ourselves and consider the bigger world around us.
We have a team to merge with.
We have a shared codebase.
We have standards and procedures to follow and we have to learn how to apply the things we have learned to the things we’re being asked to produce.
We also now have to start commenting on and providing feedback to our teammates who are in their own phase of learning and honing their skills.
I’m reminded of a quote by a famous man: “I have a real interesting story, well it's not so much interesting as it is long.” - Abe Simpson
Prior to my career as an engineer, I embarked on a career in the lucrative field of fine arts.
In particular, I studied sculpture in bronze, stone, wood and clay.
My instructor was an eccentric man who wore the same outfit every day: black t-shirt, blue jeans, black tennis shoes and, when it was bitter cold, a blue flannel shirt.
(Later suspenders were added by two female classmates after a couple of unfortunate incidents while bending over to assist with lifting.)
I digress, getting back to the story, it’s Ceramics 201 and we’re learning to use the pottery wheel.
Everyone was excited for this day, and particularly excited to start creating things and taking them out into the world to share with our families.
We all had visions of taking home that first rough bowl or cup to show the parents that they really hadn’t wasted thousands of dollars on an Arts Education: WE ARE MAKING REAL THINGS PEOPLE WILL BUY!
However, those dreams dashed and we all looked at one another in collective horror when our instructor announced he wouldn’t let us walk out of the studio with one single creation, nor were we even allowed to consider finishing, firing or glazing a single piece until we had produced 100 instances of that piece.
Mom and Dad will have to wait a little longer to recoup that investment ...
Repetition Yields Proficiency
I’m not sure how many of you have ever used a potter’s wheel, or know what a “kick wheel” is, but suffice it to say, it’s not a trivial process.
Using a wheel requires a surprising amount of dexterity and hand and arm strength; the kick wheel added a one-sided lower body workout that makes me wince to recall even today.
To throw 100 cups or bowls takes weeks and weeks of work, not only because you have to wrestle the clay into submission on the wheel as wet slip flies everywhere, but also because first you have to go through the monotony of kneading and preparing a 5-10 pound batch of clay each time you start working.
It wasn’t fun. In fact, it sucked pretty hard. However, what I gained from that experience wasn’t just the ability to create a consistent, well formed and properly structured product, but more importantly the ability to transcend the monotony of the preparation and an understanding of the importance of that process to the final product.
In the end I learned that throwing the piece, forming it and giving it shape were the most trivial aspects of success.
I also learned that getting the preparation right made the act of creation far more enjoyable.
Repetition Surfaces Efficiencies
In repeating these time and labor intensive tasks over and over, I began to find ways to work more efficiently and cut down on the time it took to prepare my medium.
I found that having adequate water nearby when mixing the clay was helpful.
I found that keeping a couple of extra cheesecloths around for separating the prepared balls was useful and
I found that pre-measuring the water led to more consistent and predictable results.
I was able to cut down the time it took to prepare the clay and yield a better end-product through pre-planning and measurement.
Repetition Encourages Teamwork
Then, several of us discovered that there were parts of the process that we were better at than others. I watched as a woman in our team expertly kneaded a ball in about half the time it took me.
As it turns out, she was also an avid baker and kneading was second nature to her.
However, she was older and less physically capable of lifting and mixing, so we decided to work together.
I mixed the clay, got the measurements right and prepared the raw material, she broke out the segments, kneaded them to make sure there were no air bubbles and to maximize platelet alignment.
I covered and stashed the prepared balls in a cool, damp area and another classmate picked up scraps and mixed slip to use later when throwing.
Our repetitive tasks encouraged us to work together to make the work go faster and we learned to take advantage of working at scale.
In the process, we all learned how to accomplish each task more efficiently by observing our peers who were more capable in one way or another.
The Critique
One thing I haven’t mentioned here yet, and many of you who I talk with on a regular basis have probably heard me say this, so I apologize for the repetition (sic) … but part of the “Art of Repetition” included a group critique after every session.
By repeating this process every day, we began to learn how to communicate with one another in the language of our craft. We developed the ability to have a deeper and more meaningful dialog as we learned more and more about how to prepare and to create.
Initially our critique would start off with lots of benign platitudes: “It’s good”, “Nice job”, “Nice form”, etc. but eventually we began to recognize flaws that were invisible to us before.
The act of repeating the process of analyzing and critiquing, coupled with a deeper understanding of our medium led to meaningful peer review and feedback: “The shape is nice, but there are some fissures near the apex of your curve. It’s probably an incomplete mix or a dry patch in the clay” or “Your glazing is nice, but the two starbursts in the finish mean there was an air bubble - it could have caused the piece to crack in the kiln”.
Learning to critique, to speak the language of our craft and to accept input and give feedback in constructive and helpful ways is integral to our success as software engineers.
It’s something that you rarely learn as a student in the technology field, but instead learn during the first formative years of your career.
This is one of those less tangible benefits of an Arts or Liberal Arts education, and it’s why I don’t differentiate between a CS major and a Fine Arts major when it comes time to hire for a position.
Both students have something to learn. One of those things is a rote task (syntax) and the other is behavioral (giving and accepting feedback). It’s arguably easier to teach the first than it is the second.
Repetition Enforces Process
That’s a lot of slides about Fine Arts education and about working in clay, but the medium is irrelevant to the message.
All of these same principles hold true with learning to be a musician, a poet, a physician or software developer.
Actually coding a solution is rarely the most critical or the most difficult part of a software development project.
This is something Senior Engineers know, and it’s why you rarely see them immediately open a code editor when a problem arises.
Jumping in with both hands ready to hack out code seems like the most direct path forward, but in reality every minute you spend preparing yourself to code is more important to your success than the time you spend coding.
Speaking of coding, let’s get back now to our Engineer in progress ...
So now we have some additional properties to help define our new role. We’re going to build on top of our Student skills and add some new behaviors, primarily the things we talked about in my anecdote:
Is practicing the art of software engineering on a daily basis
Is a Team Player
Helpful to our teammates, our leads and our clients
Give Feedback as needed on projects, processes, etc.
Constructive in how we provide feedback to others
Achieving fluency in our chosen technologies
Able to articulate our capabilities, our projects and our work and can speak in the vernacular of our craft
Is Quality Focused
Produces Results
We’re here to figure out what a “Senior Software Engineer” is.
There are lots of definitions, there are lots of opinions and there are lots of things already written on this topic.
We’re here to add to this discussion, explore the traits of a Senior Engineer and figure out how to get there from where we are right now.
This is my favorite meme. I use it to talk about myself all the time.
I recently got salty in the Slack channel about React, Angular and all things “framework-y”; I’m known to do that on a variety of topics including TypeScript, NoSQL (both of which I actually adore) and virtually every other piece of tech I come in contact with.
This is basically the same meme, but from Thomas Fuchs (did I pronounce that right?) who created things such as scrip.taculo.us, Zepto, Freckle and some other interesting, JavaScript-y things.
I’m a big fan of Thomas and his Twitter-self.
Senior software engineers are just regular engineers who have some additional attributes and properties.
So, we’ve learned what a “Software Engineer” is, it’s someone who is in the act of perfecting the craft of building software.
It’s someone who is producing results, and working in symbiosis with their team.
It’s someone who is actively accepting input, producing output and providing feedback to their peers and leads.
A Software Engineer is a creator who is engaged in learning.
So what is a Senior Software Engineer NOT?
First, let’s figure out what a “Senior Developer” is not.A CS Degree doesn’t make you Senior
Being the best coder in your organization …
Being a “full stack” developer doesn’t make you Senior
And lastly, being Senior does not make you a Lead … that’s an entirely different talk.
Other things that don’t make you a “Senior”: 3 Years of Experience
Other things that don’t make you a “Senior”: 5 Years of Experience
Other things that don’t make you a “Senior”: 10 Years of Experience
That’s right, there is no amount of experience that automatically qualifies you as a Senior Engineer.
Becoming a “Senior” is more than years, it’s more than age and it’s more than just time spent coding.
What separates a Junior or Mid-Level from a Senior isn’t just their coding ability, but rather a specific set of traits and properties that a Senior exhibits.
I was talking with one of my colleagues this morning about what it means to be a Senior, and he provided some great feedback
In our personal lives, many of our goals are roughly 2-5 years away: Grade School, Middle School, Teenager, High School, Driving, Voting Age, Drinking Age, College, Marriage, Kids, etc.
When we start our careers, our horizons become much further off.
Our careers last 20, 30, 40+ years
Why would our expectation of reaching the pinnacle of our profession, or achieving seniority be in that same 2-5 year time horizon?
Perspective is important.
So, seriously now, we’re 30 slides in and we still haven’t defined this thing yet. Let’s get moving and talk about what Senior Engineers DO.
Can identify the most critical tasks.Can set accurate expectations with team and clientsUnderstands the Value / Effort Matrix and apply it to their workFrequently communicates current status, projected status and any barriers to success
(Cost) Effort / Value Matrix
Can mentally break down tasks into smaller, time-boxed chunks
Is conservative when estimating to account for unknown challenges
Considers full lifecycle of a task, not just time to code
Can estimate the work of others on the team based on past experience with that team member
Understand how to tune various parts of an application for improved performance
Has experience with caching methodologies, indexing and refactoring
Has knowledge of hardening techniques such as encryption, obfuscation, surface limiting, patching, port limiting, etc.
Let’s go ahead and add these first things to our new SeniorEngineer class, which is an extension of Engineer (of course);
remember, we’re also still inheriting the properties of our Student class as well.
We’re now starting to develop a pretty rich hierarchy of skills, but there’s still more to add ...
Two or more general purpose programming languages (JS, Java, Python, Ruby, Go, PHP, etc.)
Multiple secondary technologies (SQL, NoSQL, MapReduce, Redis, XML, CSS, SASS/SCSS, LESS, etc.)
Multiple ancillary technology concepts (REST, SOAP, VoiceXML, Sequelize, ActiveRecord, etc.)
Familiar with a variety of tech stacks and environments aside from their current (LAMP, MEAN, LNPR; Heroku, AWS, Azure, self-hosting, etc.)
WARNING! HIGH SALT CONTENT AHEAD!
Technologies come and go, as do practices, methodologies and the latest ideas for how to approach our work. Adopting the latest-and-greatest is always the most fun and exciting part of a new project, but often it can lead to problems down the road for us and/or our clients. Case in point, a team who made the decision to work in CoffeeScript in 2011 or 2012 is now facing the very real possibility of not being able to recruit new developers. Likewise, groups that are bound to frameworks that have become passe or that are no longer popular will have similar problems. Choosing something new and shiny now might seem fun, but if your client plans to own their technology for 3, 5, 10 or 15+ years, choosing platforms and technologies that are more likely to have longevity is wise.
Has experienced multiple technical cycles (Flash, XML, NoSQL, ASP vs. ASP.NET, J2EE, etc.)
Puts the needs of the project and/or client ahead of their desire to work with the latest technology
Understands the impermanence of technology and can recommend solutions that meet customer needs
Understands the longevity requirement of their project and the available current and future workforce
Understands the risk involved in choosing the latest-and-greatest new technology for mission critical apps
I wanted to share this meme last week on #Slack when (again) I was being all salty about React or Redux or some such framework-du-jour, but I refrained. It seemed troll-y at the time, so I saved it for tonight when it could be next-level troll-y. You’re welcome.
Also I’m sorry, because this meme is pretty sexist and I’m not super comfortable with it. Women receive enough harassment without us making memes out of it. I sincerely hope none of us here are this guy. Let’s just move on, ok?
Let’s go ahead and add these first things to our new SeniorEngineer class, which is an extension of Engineer (of course); remember, we’re also still inheriting the properties of our Student class as well. We’re now starting to develop a pretty rich hierarchy of skills, but there’s still more to add ...
Source Code Management
Branching and Merging Strategies
CI / CD (Continuous Integration / Continuous Development)
Design Process
User Story Creation
Agile Processes (SCRUM/Stand-Up, Sprint Grooming, Sprint Planning, Sprint Retro, etc.)
Code Authoring across one or more Environments
Unit and Behavioral Testing using code, libraries or browser automation
QA Testing and Bug-Triage Process
Backlog Grooming and Review, etc.
Technical Debt is the term for hidden work or future work we create for ourselves throughout the lifecycle of a project. Things like hard-coding values, working with mock API’s, leaving Unit Tests incomplete or building incomplete or stub features for a demo deadline are all debt-creating tasks. Projects often suffer when these tasks begin to create a mountain of undocumented and untracked work for future us. Seniors understand the impact of this debt, work to minimize it and the impact it has, and track and surface debt-creating tasks to project teams to be addressed in future cycles.
Risk identification and quantification are important roles for Senior Developers. When stories are brought into a Sprint late in the process, when requirements are incomplete at the onset of a Sprint, or when Scope changes after commitments are made, Senior Engineers identify and call-out these risks. This information is then tracked throughout the life of the project to be able to accurately predict the likelihood of success or failure. Factoring in Risk, Debt, Scope, Cost, Priority and other factors is an important role of the Senior Engineer. Senior Engineers view the introduction of new technologies, untried/untested processes and/or new and unknown frameworks as “Risk-Generating Decisions” as these decisions have the ability to impact the success of a project in a significant way.
Going back to our code sample, let’s add these new properties to our SeniorEngineer class.
Going back to our code sample, let’s add these new properties to our SeniorEngineer class.
Has experienced multiple technical cycles (Flash, XML, NoSQL, ASP vs. ASP.NET, J2EE, etc.)
Understands the full SDLC
Understands maintenance and cost of ownership
Understands technical debt, how to avoid and how to clear
Understands technical risk, how to avoid and how to plan for an eliminate
At this point in our career, we have gained additional skills through experience and continued learning and we have grown in confidence. We’re now not only accepting input and producing output, we’re now informing how output is created and guiding the process of creation.
So, we’ve learned what a “Software Engineer” is, it’s someone who is in the act of perfecting the craft of building software.
It’s someone who is producing results, and working in symbiosis with their team.
It’s someone who is actively accepting input, producing output and providing feedback to their peers and leads.
A Software Engineer is a creator who is engaged in learning.
So what is a Senior Software Engineer?
Gaining a deep understanding and mastery of our craft is one of the main drivers of our career.
Aside from knowing how to assemble the bits and pixels in the right order, we have to know alternate ways to achieve the same end result and understand the processes by which we can achieve those results in the most efficient and effective way possible.
Of the three main components of our professional self, knowledge is the one we have the most control over. Knowledge is not necessarily limited by age, by years of experience or by the type of education you pursued. We can put in extra effort to compensate for deficiencies in any of those areas. We live in an age where more knowledge than we could ever hope to consume is literally at our fingertips.
Spending time immersed in technical learning can speed up the acquisition of knowledge.
Whether you’re in a traditional university setting, a code bootcamp or self-learning using online tools, staying immersed in learning is important to your career.
If you’re looking to shorten the road from Junior to Senior, immersive learning is a great vehicle
Being confident in our skills, in our presentation of information and in the way we interact with our peers is as important as our knowledge.
Having the confidence in yourself to accept challenges - even those outside of our comfort zone - can be a catalyst to growth.
Our confidence will naturally grow over time as we engage in different projects and as we interact with others.
Hacking your confidence can be a great way to shorten the path to a Senior position: a big part of becoming a Senior is trusting yourself to succeed in the role.
Involvement in community-based projects, groups and initiatives is a great way to boost your confidence, particularly when you are job-hunting or portfolio building.
Interacting with those more senior and those more junior helps to solidify your own understanding of your skills and your place in the community.
Supportive and nurturing communities can help our confidence grow exponentially as we begin to realize that many others are in the same place as we are.
Experience is the hardest road to shorten on the path from Junior to Senior.
Unless you’re taking on projects left-and-right, working all hours of the day and night, there are only so many hours in the day in which you can work.
Again though, keep things in perspective. You have a long career ahead of you.
There are a few ways to gain more experience than you would traditionally, but it involves a lot of extra work. There are people who finish school more quickly than others, were you one of those people? For most of us the answer is no, we’re bound by the constraints of time.
One way you can gain additional experience over and above your classroom or workplace projects is by contributing to Open Source projects.
Regardless of your skill set, there is a role for just about everyone to play in the Open Source world.
Whether you’re documenting features, fixing bugs, writing i18n content or translating to another language, or whether you’re contributing to the main feature set in code, there is always a job to be done.
Participating in Open Source projects helps to expose you to a number of new ideas, ways of working and different technology stacks that you otherwise may not get exposed to.
If you want to hack time, Open Source participation may be your best path.
Of course the best and most natural way to gain experience is to get hired and throw yourself into your work projects.
Regardless of the way the company you work for works, there is something to be learned from each engagement.
Even if your takeaway is to absolutely never do what this company does, you’ve learned something valuable and have an experience to look back on for guidance on future engagements.
In fact, I would argue that it’s important to have some bad jobs throughout your career (don’t worry, they’ll find you) to be able to better appreciate good opportunities that present themselves.
As long as you need. It’s not fast, but it’s also not a race.
Let’s take a look at a timeline of our career and layer in Knowledge, Confidence and Experience along that timeline.
When you start, basically all you have is knowledge and a little confidence
As you learn more, your confidence grows and you begin to have more experience
At some point, knowledge reaches a bit of a plateau as you enter the confidence-building, experience-building phase of your career
Eventually your confidence and your experience grow to match your knowledge. However along the way you’ve started picking up new, secondary or industry-focused skills that make you an SME in some area.
As we continue on our path, our knowledge continues to grow and we start to develop subject matter expertise.
Our confidence continues to grow with each new experience.
Eventually your confidence and your experience grow to match your knowledge. However along the way you’ve started picking up new, secondary or industry-focused skills that make you an SME in some area.
Eventually your confidence and your experience grow to match your knowledge. However along the way you’ve started picking up new, secondary or industry-focused skills that make you an SME in some area.
Our knowledge, experience and confidence combine with the subject areas in which we work, and the successes and failures we have been a part of to define our persona as an engineer.
All of this is to say that the definition of a Senior Software Engineer is far more complex than a number of years or a proficiency level with code.