I'm supposedly a senior software engineer, but I don't feel like it

How can I have so many years of experience yet be so lacking in skill?

I’m 33 years old, been doing Java & JavaScript development for 12 years. I know the languages well enough and if given a specific task I can code a solution. I’ve always had a job since I graduated from college and have always done well in performance reviews.

But I feel I’m severely lacking in skills like design patterns, architecture, and other big-picture type stuff. I don’t know how to build large-scale systems. I live in fear that the day is going to come where I get assigned something I won’t be able to deliver on, and the house of cards that is my career is going to come crashing down.

I once read someone comparing someone with 10 years of experience vs. someone with 1 year of experience 10 times. I feel like the latter.

I try to read books and articles to fill the gap, but I get overwhelmed with information overload and have a hard time learning the stuff.

Am I totally screwed? What level of skill is a senior software engineer with 12 years of experience supposed to have?

I don’t have any other marketable skills, so software engineering is my one and only shot. I love the work. I love writing code. I’m just deathly afraid that I’m a fraud and won’t last much longer.

To make matters worse, I just started a new job as a Senior Software Engineer about a month ago. I feel like I’m in way over my head. I have yet to really be productive because there is so much I don’t know about how the code is organized, how everything ties together, etc. I’m feeling scared that this is the beginning of the end for me.

4 Likes

Part of me thinks it’s because I’ve had 10 years of piddly jobs where I barely got to do anything interesting. So I have worked for a decade, but I don’t have strong skills in patterns, architecture, and scaling applications.

That doesn’t make me feel any better though. I feel like I’m stuck in Junior positions. I’m not sure how I can get the chance to really learn those “real” skills they want Senior engineers to have.

3 Likes

Hello there, I think I understand what you’re going through, although I’m a junior software developer.

I want you to think about this: do you think that there’s anyone in this industry that does not feel overwhelmed at some point?

In my opinion, if you are feeling overwhelmed, that may mean that you’re constantly pushing yourself outside your comfort zone. Is that a bad thing? Not at all. When that starts to get in the way of our well being and mental/physical health, then that’s a problem.

The panic or stress that we feel, specially at the start of a new job or project is actually what makes us push ourselves to levels of performance that we never even knew that we were capable of. From what you described, I believe that you’re feeling that sort of anxiety.

More specifically, I always spend more than 2 weeks figuring out how the hell am I going to structure my code base, there are so many variables to take into account. Seriously, you are not alone in this, even though I have less experience than you.

The truth is: you’ve been working in software development for 12 years, that is an achievement. But does that mean that you have to meet some specific standards because of that experience? Not necessarily, unless you want to meet some standards that you’ve set for yourself, in that case keep working for them.

I think that you’re suffering from anxiety about a possible scenario that you may not even experience in the future. If you get assigned something that you have no experience with, you’ll be forced to investigate and study a solution. Software design and architecture patterns are not something that everyone memorizes, software patterns were not invented, they were discovered: many different implementations shared something in common, a pattern.

You have a reason that have these concerns, they are normal and that means that you care about your career. But there comes a point were we have to enjoy the present.

That reminds me of something that a doctor has told me when I was constantly visiting his office because of imaginary symptoms:

“Every year, there are tons of people that step into my office convinced that they have cancer. Every year I prove them wrong through several test but they refuse to believe me. They are suffering needlessly. The sad part is that, many years later, they are actually diagnosed with cancer. Now they truly have a reason to suffer, but why did they waste their time worrying about it all those years to begin with?”

Seriously, stop suffering by anticipation :wink:

2 Likes

Don’t be scared, you’re doing really well, life must be freaking awesome for you right now! Years of experience, some good projects and it doesn’t sound like you’re doing overtime much (if at all) so you’ve got a life outside of work! That’s REALLY good.

Someone wrote a good listing of software developer titles and it suggests some tasks that seniors should be taking care of:

A senior software engineer is capable of being given a high level (and often vague) task, and work completely independently on it and finish it.

I.e., a senior software engineer does not need their work broken down into small well-defined tasks for them; a senior software engineer can take a high level (and often vague) task and break it down into small well-defined tasks themselves!

Although senior software engineer could do it all the work on a project completely own their own and independently, they may have other software engineers help them with the project. Especially in times when it is preferable that the work be done faster. (Like if there is a deadline.)

Typically, a senior software engineer is aware of the full software development life-cycle (SDLC) and have good architecture skills such that things like maintainability and testability are addressed.

Typically, a senior software engineer is expected to provide production support (like waking up at 3:00am to fix some problem on production) and to help deal with company-wide concerns.

Typically, a senior software engineer can be trusted to work independently to solve most problems.

It should be noted that some companies stop at this title – at senior software engineer – and have no engineering titles above it. At these types of companies, there is a very broad range of skill wrapped into the senior software engineer title.

So as it says, you’re trusted enough to work on your own and to get shit done on your own. Be confident in your ability as you’ve moved up! Now, if you have coworkers who are more junior, you’ll have to help guide them along and mentor them. You ever notice that management doesn’t have all the skills that you think they need? Do exactly what they do and lean on juniors or intermediates to fill in your knowledge gaps until you’re able to fill them in yourself (by going to school or just learning on a side project).

1 Like

Therein lies my problem. I don’t have good architecture skills, but I should.

That’s negative thinking, stop it! :wink:

You should focus on the positive and on your strengths and do some pairing with juniors and intermediates. They would love to have some kind of say on software architecture and it gives you some ideas on the architecture.

Don’t stress; you have multiple strategies to defer, delay and to finally figure out the architecture (with the help of juniors, intermediates within your company or friends and former coworkers)

Junior, Medior, Senior, and any job title for that matter, it’s all relative to what your employer thinks you’re worth to him/her/customers. At my previous job, which was my first professional job where I sticked for 6 years, I went from junior to senior software engineer pretty fast. I believe it was 2 years junior and 1 year medior and senior after that. When I switched jobs, I went back from senior to medior for a year and now I’m back to senior. To be fair, I don’t care about the job title. I simply love the job, because of the things I’m developing and learning new stuff every day. But ofcourse, with the job title… comes the pay. Which helps a lot in life in general.

But just as @thinksincode, I fear I know to less of everything. There is way to much you could possibly learn in software engineering and the world around it, and life in general. I’m not good in life in general, I’ve skipped that for 30 years and trying to get better at that now. But software engineering, it’s not a breeze and I hope it never will. Because if it’s a breeze, anyone could do it, maybe even a robot, I don’t want to be a robot, I cannot be a robot. One summer I worked at a school books distributer, verifying books for damages. I was hired to do it for 4 week, but I had to quit after 1,5 week or so. Because my mind was getting mad, destructive and simply crazy from doing the same all day without the need for creativity or problem solving. Software engineering is problem solving at its best. I think software engineering is one of the hardest jobs there is, not physically ofcourse as the desk is our friend, but mentally all the more. Because we can’t do our job by learning one single thing or have one specific expertise. We need to know about the whole product cycle, from customer needs to dev, beyond pro, and all the in between. All this is spread out over tens to hundreds of tools, languages, frameworks, programming styles, methodologies, architectures, environments, OS’, networks, etc. of which we, as software engineers, have to know something but can never know everything. And there is always something new, something better, something shiny.

As I see it, we’re all juniors, no matter how long we’re in the business. And I think that’s the way to do it, atleast that’s how I’m approaching it. You’ve some areas of expertise, people come to you for answers on problems in those areas. But outside those areas, see yourself as a junior, act as a junior. Better yet, act as a junior even inside your areas of expertise. Why? Because as a junior you were curious, interested, you wanted to learn new stuff, do new stuff. If you always act like a junior, you’re always learning and seeking for new learning possibilities, keeping up-to-date with the latest stuff. Of course you don’t have the time to learn everything in detail, but keep you ears and eyes out on new stuff. Go to conferences and meetups to keep up to date, get intro’s of the latest and greatest. And when the time comes to really make use of some of those bits and pieces, learn just enough to do your thing and give your opinion or give advise. The rest is learning on the job, as there’s is simply just too much to learn.
And a good way to keep that junior spirit, is teaching. Pair up with anyone who has a question, instead of throwing the answer over the wall. Give presentations and workshops on your expertise areas to anyone who wants to listen. Spread your knowledge the way you want to gather the knowledge from others.

@thinksincode I hope this helps you, even maybe just a little bit. I must say it feels good for me to write this down. And I probably got a thing or two cleared up for myself also, just thinking about this.

And @techmama, find the job that lets you do what you love. If you’re in consulting now, maybe switch to a product company, or if you’re frontend developer, try backend. Find out what you love to do, and find the job that offers that. You say you have no strong skills in patterns, architecture and scaling applications, but what ARE your strong skills? Why would you want to have strong skills in patterns, architecture and scaling? Or if you really want those skills, find the job where you can grow to learn those skills. The better development jobs are not interested in your current specific development skills, but your skill to solve problems, to learn, to grow. See facebook, google, twitter, they don’t ask for developers with specific programming language skills or awesome scaling application experience. Those things are mentioned as benefits if you have them, but more than that they are just looking for good problem solvers and learners. If you are a good problem solver and learner, you can learn the rest on the job.
And if you love your current job, but you think you could/should be seen as more than a junior title. Ask your team/manager why he/she believes you are a junior, and what you could do to get higher up. I don’t know where you’re from, or the company culture your in, but I believe strongly that these are questions you should always be able to ask your team/manager.

2 Likes

I’m a 32 year old woman with 7 years of experience in Java programming language in the same company. This may sound awesome but I have less real experience in Java coding. I happened to code in 2 projects out of 9. Strangely, I’ve very less memory and I can’t recollect the work I’ve done a few years ago. After many trials, I got into a product company wherein I need to code. My juniors here are very good at it and they program using best practices. After my inexperience in coding became very evident, I feel very low sometimes. Added to all this, I’ve Attention Deficit disorder and hence cannot grasp quickly whatever they explain. I feel myself like a person of 3 yrs experience. I pressurize myself to fit in quickly as I’m hired as a lead. It is simply backfiring and I’m experiencing the lowest of self-esteem. I’m also going to be divorced. My career is the one I desperately need now. I wonder why my mind goes blank when I’ve to present my skills and how to improve concentration as I’m afraid that soon I’ll be called by my manager wondering what’s happening.

@everAspiring, instead of the practical experience, you probably have the theoretical knowledge. So you can lead your juniors on the theoretical side. Pair up with them, eg. pair-program with them, provide them with the theoretical knowledge that you have and they will provide you with the practical experience. And by pair-programming, you also get to code with their help. I believe that would be a win-win for all of you.
Besides that, you can do small coding challenges, kata’s, to get back to the coding level you want to be. You can find more info on kata’s on the following links:

And, if you think you’re not that strong, or a bit behind on the theoretical side of things, a good start is:

  • The Clean Code series:
    http://cleancoders.com
    The whole serie would be about 600 dollar, and new episodes are still coming out. But the explanations are impeccable.
    Or buy books, if you prefer reading :smile:
    Or search the interwebs and watch conference talks on the topics you need more info on.
    If time is limited, which it always is :frowning:, a good way is to take a few hours a week to investigate and learn about topics that are coming up in the next week. eg. if you have done sprint planning for next sprint, focus your learning hours on topics of the planned sprint. This way you will be up-to-speed on atleast those topics, and juniors will find you awesome as you’re so knowledable about the topics of the sprint.

Hope these hints will help you a bit in the direction you want

2 Likes

Thanks @pvdissel for ur response! Ur advise to focus on the topics of the planned sprint has been very helpful. Earlier, I was attempting all things at once. And the links u suggested are quite good… pair programming - i haven’t attempted it as i don’t know how to gracefully sort of surrender and tell them that i don’t know how to code :frowning: … my place is a bit far from them… i’ve successfully implemented observer design pattern (u r into java?) for our requirement …i never got the chance before… i saw the videos in the net before night, understood it well and implemented it… felt so good about myself :smile:

2 Likes

@everAspiring awesome! Good to hear I could help.
About the pair programming, just go for it. Roll down your chair to the desk you want to pair with, and say something like “hey, wanna try something different? Do you want to pair-program with me? My coding is a bit rusty and I want to get my hands dirty again.”. If he/she doesn’t know pair-programming, you can explain it. Which gives you another +1 from the junior viewpoint. If he/she already knows it, you can hook in with like “Great! Lets do this :smiley:”.

I haven’t met a junior who didn’t want to work together, juniors love learning. Working together brings two minds together, combining knowledge for the greater good :smiley:

And about java, yes I’m into java.
If you want I can try to help you with your coding skills, like a mentor with some remote pair-programming :smile:
Or you can join one of the many code mentoring and woman who code sites/groups/meetups, like:

(NOTE: I just read the first post :dog: )

I think this relates to the larger topic of software craftsmanship. And on that note I’ve been reading this AWESOME book: Apprenticeship Patterns http://chimera.labs.oreilly.com/books/1234000001813/ Have a look (it’s free to read online). And the problem presented by the OP is actually one of the ‘patterns’ described in the book (ref: Use your title http://chimera.labs.oreilly.com/.../12340000.../ch03.html… ). To quote: “Your job title doesn’t match what you see in the mirror.”

1 Like

Interesting perspective; the link in the book is this: http://chimera.labs.oreilly.com/books/1234000001813/ch03.html#problem_id14

good book, maybe it’ll help some of us out with finding more meaning in our work

Glad to have found this thread today after I threw a bit of a wobbly today in work which left me feeling pretty crap. Anyway found some really good resources on this thread which have really helped me out and gave me a much better perspective on things. Just wanted to say to you everAspiring that you’re not alone - I could relate a lot to your post. I’ve got round to thinking though that the one thing that has kept me going in this game (and I’ve been in it a bit longer than you and feel the same) is that I do have confidence in my ability to learn, and although my strengths may not always be obvious I know that they are there. Just need a little boost every now and then to let them shine - usually involves putting my head down and some hard work in. When I look back at the recurring patterns of my life I can see that doing this has led me from being completely ignorant in something to having a pretty in depth understanding.
Being a female in this game also has it’s own challenges leading to even more angst about not being good enough but we need to keep hold of our faith in ourselves otherwise we’ll end up like so many of our female counterparts - out the game altogether!

I’ve been been having similar thoughts.
I am the senior developer at my place of work. Although there are only two of us.

Sometimes when I read programming blogs or forums, I have a feeling of admiration for the amount of knowledge some people have. That causes me to start thinking that I should probably have know things like that by now.

My guess is this: You know what you know because of what you do at work every day.
You managers/supervisors will tell you what you will be spending most of life doing.
Unfortunately for me, I’m the jack of all trades (with little to no spare time). This keeps my skill set very spread out, but not very in depth in any direction.

2 Likes

How’s it going man? Your topic was the reason I found this site; how are you doing so far now? It sounds like earlier this year you took a new job.

Things are going a little better. I have learned a lot of the codebase now and so I’m a little more confident. I still can’t help comparing myself to everyone else I work with, and their skills are all much better than mine, even those 10 years younger than me.

Don’t compare yourself to others man. I’ve been doing web and game dev for 10 years.

I’ve got friends who moved on to Adobe, Google, and other really cool places.

While I cant write paint brush physics or complex language translations algorithms, I can shard the fuck out of a database. There are few errors I can’t trouble shoot. I know the guys who moved on would suck at web / game dev compared to me now.

I can’t say I’m happy. I feel like I’ll alwayse be in this infinite loop of programing stupid applications for stupid people so I can go eat to sustain a life I never asked for to beginwith…

But I don’t compare my self to others. It will just break you down on a level where you won’t be able to function.

@thinksincode checking in, hope things have looked up in recent months!

I feel a lot like you. Or felt. I don’t know anymore. But every time I get to the point when I think: “what if I get assigned something I won’t be able to deliver on” I stop and realize that one thing - nothing will really happen.

If I or my supervisors realize I’m not able to do that then someone else will start working on it. That’s not really a big thing. Of course it sucks that I’ll realize that I wasn’t able to do something, but I know that already.

What’s the worst thing that can happen really? They can fire me? It would be rather uncommon - the demand on developers is really high. Firing someone, because he’s not good to deliver big solution is unreasonable. It’s better to give him smaller project or just not give him architectural tasks. Firing someone over this is also not seen as a good thing from PR perspective.

But OK, let’s say they fire me. So what? As before the demand for developers is high. I will find a job probably in a week or month. Well, probably not as good, maybe I should look more and longer, but I won’t starve in the mean time. Maybe I will earn less, so be it. It’s not really the end of the world. It’s not that now I can’t be a developer anymore. But as I said, the probability they’ll fire me over things like that are rather small.

1 Like