I?ve been programming C# professionally for a bit over 4 years now. For the past 4 years I?ve worked for a few small/medium companies ranging from ?web/ads agencies?, small industry specific software shops to a small startup. I've been mainly doing "business apps" that involves using high-level programming languages (garbage collected) and my overall experience was that all of the works I?ve done could have been more professional. A lot of the things were done incorrectly (in a rush) mainly due to cost factor that people always wanted something ?now? and with the smallest amount of spendable money. I kept on thinking maybe if I could work for a bigger companies or a company that?s better suited for programmers, or somewhere that's got the money and time to really build something longer term and more maintainable I may have enjoyed more in my career. I?ve never had a ?mentor? that guided me through my 4 years career. I am pretty much blog / google / self taught programmer other than my bachelor IT degree.

I?ve also observed another issue that most so called ?senior? programmer in ?my working environment? are really not that senior skill wise. They are ?senior? only because they?ve been a long time programmer, but the code they write or the decisions they make are absolutely rubbish! They don't want to learn, they don't want to be better they just want to get paid and do what they've told to do which make sense and most of us are like that. Maybe that?s why they are where they are now. But I don?t want to become like them I want to be better. I?ve run into a mental state that I no longer intend to be a programmer for my future career. I started to think maybe there are better things out there to work on. The more blogs I read, the more ?best practices? I?ve tried the more I feel I am drifting away from ?my reality?. But I am not a great programmer otherwise I don't think I am where I am now. I think 4-5 years is a stage that can be a step forward career wise or a step out of where you are.

I just wanted to hear what other have to say about what I?ve mentioned above and whether you?ve experienced similar situation in your past programming career and how you dealt with it. Thanks.

152 accepted

You open a very interesting question. I wholeheartedly agree with you. I've made similar observations.

I've been programming professionally for several years already and what I have observed is that the amount of good programmers out there, of great developers who love their work and can do it with quality and passion is pretty much close to zero. I probably met only one person who could teach me something. Most of what I know I have learned by myself, reading books and forums, asking in forums and googling for revelation thoughts.

After a while I don't regret this much.

The options to learn in a working environment can often be limited. You don't start things. You don't finish them. You don't design, don't improve, don't refactor, don't think about architecture, you just code and hack things together. It's how most of the shops work. Not only you don't learn anything, it's more likely that you will learn mostly wrong things how NOT to develop software. I've been continuously seeing scary things around me, all those anti-pattern you have heard of. What is worse, I'm forced to do them myself.

I don't know how it happened, but I managed to somehow build an input barrier. I stay open, listen and if I see some potential for self-improvement I research and maybe adopt some technique or idea. But no BS can ever get through. I have worked in badly run projects for a long time, but I have not adopted any of those bad techniques for myself.

I pretty much soon understood that if you wish satisfaction with programming, forget about job and have your own personal project. It's where you can apply all your love, passion and knowledge to do things right with the high quality level. You will learn a great deal of stuff, a myriad of things you would never have been exposed to and challenged with when hacking boring corporate staff. I only do my job for paycheck and get satisfaction with my own personal projects.

One thing I truly don't understand is how this situation is possible nowadays. Software development has matured a lot. It has had good and bad experience. Many successful projects and a great deal of failed ones. There is experience with long-term projects and understanding what long-term effects one or the other organization will bring upon the project. There are numerous studies available and good books written. "Pragmatic Programmer", "Code Complete", "Mythical Man-Month", "Design of everyday things" and others. Why nobody but us, the programmers ever reads them? How it is possible that even after 20 years of working in IT most developers and managers never found a time to read one or the other methodology book. They are written for, but hardly read by, those who need this medication most.

Regarding career perspectives. What I also have noticed in general on the job market for employees, is that employers out there increasingly lose interest in quality work (imagine they had it once) are shopping more and more for the cheapest work craft available. You find it hard to sell your knowledge, experience and understanding of the universe to anyone. It's not in demand. What is in demand is having your projects ruined by the juniors who have no experience and desire to do professional work. Cheap people are used and abused and then thrown out so that the next round begins. Projects are also outsourced to low-wage destination where they are done by people who apparently begin to learn programming just with your project. That's one thing I truly don't understand.

I'm entertaining more and more the idea that I will drop employed programming work at some time in the future. I would very much like to work in my own start-up with my own project. If not that, I'm considering trying freelancing or probably changing the payed job nature. After all, I hardly learn anything during working hours and I don't get any satisfaction at all. I can do anything 9-5 and always have satisfaction with my own personal projects. I learn much from online communities. I receive here attention, support for my ideas and on occasions even recognition I could never get with my job and my work colleagues. Will see where I will be in the future.


There was a post by Jeff Atwood on Coding Horror that said that this is supposed to be fun. And part of the job description of being a software developer is enjoying your work. Otherwise it will become a really boring and cumbersome profession for you.

The fact that you continuously search for ways to improve your work, and you keep getting informed of the new stuff and the best practices shows that you enjoy your work in nature. So my advice to you would be to start looking for a new job.

However I do not think that working for a big company will necessarily improve the working conditions. I think the best environments for software developers are small to mid-sized companies, where the people like what they are doing. The best thing to do would be to search and check-out any companies before you take a decision. Try and make sure that the new company is worth it.


Hi !

First thing : a big warning : if you've been developing for 10 years (like I have) there's nothing else you can do better than developing. So if you want to do something else, something new, do it quickly otherwise it may be too late and you won't be good at doing something else.

Just to share my own point of view : I'm a self driven person, self taught. I've learned alone pure C, C#, Amiga C developing, Windows, COM, Delphi, PHP, Cinema4D and now Blender and Python. I've almost always worked alone. Here's the biggest problem I've encountered so far : small companies try to survive and you're one of the ones who keep it alive : it's very stressing but it's also rewarding : you work more, you learn faster, and a lot of stuff quickly, you make products faster (event though you often can't do your job properly). Anyway : too much stress. On the contrary, big companies will always survive but the problem is about people : too many people. It's a jungle, but far worse : nothing is clear : if the people you work with feel like you're better than they are, they'll try their best not to help you to go up but only to shoot you because they fear for their own career. It's the way it works in France (I don't know for other countries).

To make it short : try to find a middle sized company where you feel like it's your place. No matter how long you've been programming, no matter how long you've been working, the day when you get in your car to go to your job and you think "I'm happy to go to my work" will be the day you found your place.

It's not a question of 4-5 years or whatever.

NB : there's a huge difference between "I'm happy to go to my work" and "I'm happy to go to my work because I'll do this and that" / or / "I'm happy to go to my work because I'll learn this and that". If you think "because I'll do this and that" this means "this and that" will end one day and you may not be happy after. This is my 12 years programming experience. And I'm a senior, I'm well paid, but I do realize that 20-25 y.o. people think faster than I do. They just don't have my experience so I've just admitted I can help them to do things, they do it faster, but I help them to make them properly (which is almost never the case when you start developing).

Sorry for my English which isn't perfect, don't hesitate to correct my post to make it proper English.


I've been a software developer for twenty-one years -- among other things, that means I've been doing this long enough to drink! ;-) But seriously, though, I can't imagine doing anything else as well or as joyously as programming. I'm apparently one of those rare birds that really love this job.

I was recently freshening up my resume, and I noticed that I've had many, many jobs in the last two decades -- mostly contracts. But what I realized in looking at that long list is that the jobs I loved most (and the ones I stayed at the longest) were with software firms, i.e. companies whose business model involved selling software to customers. The following theories are probably not universally applicable, but they go far to explain my experience.

As I see it, the difference between a software shop and your typical IT shop is surprisingly obvious. It's merely a question of what those in upper management understand. If the company gets most of its revenue from software, then the top brass will really grok software and how it's made. But if revenue comes from selling widgets, they generally don't have the faintest inkling of what it takes to keep their IT infrastructure running, let alone the processes behind software development. Worse, even though they delegate the task to IT staff, they try to map the IT processes to what they know, with results that generally range from disappointing to disastrous.

One reason is that there's a wide range of talent out there, from the merely competent to the software virtuoso. This runs completely counter to the cookie-cutter, one-size-fits-all mentality that works so well for unskilled and semi-skilled positions. The expectation that any one developer can be replaced with any other with a similar "skillset" may seem ludicrous to us, but often seems perfectly reasonable to a management structure that's focused on raw numbers. If this seems incredible, just look at how many shops are still trying to make the Waterfall model work.

You don't necessarily need all virtuosos on your team, but you need at least one or two. And part of their role must be to mentor the junior people so they can grow into the role (or wash out -- it happens). Otherwise, bad-to-mediocre junior code will prevail, with its attendant misfactoring and bloat. Once that cancer sets in, the code rapidly becomes unmaintainable, productivity across the team falls sharply, and people start to burn out.

This creates turnover, until finally somebody says, "We can't keep this thing going anymore! Let's scrap it and start over!" The investment in the legacy codebase goes out the window, and the process starts all over again. "But this time will be different," you promise yourself. And for a while it is. Then somebody hires away your rock star, and you're left with undirected junior people trashing your shiny new codebase all over again.

Lather. Rant. Repent.

But I digress... So, to answer your original question: No, half a decade is not the midlife of a software career. It's more an Age of Reason, perhaps -- the place in your career where the scales fall from your eyes and you start to see the business for what it is. The realizations come in a different order for everyone, and that colors the conclusions you may draw along the way. But hang in there -- if you come out the other side sane, you'll have a much healthier perspective, and you'll ultimately find this crazy business we're in more rewarding than ever before.


I think you need five more years experience. Then you will be able to accept the compromises and be happy to fix what you can.

At least that was my experience. At about 5 years (about the time it takes to become an expert) I think I actually "got it". I realized my code was crap. I realized my shiny hacks that got the apps working were just that, hacks. I came to understand that I had been creating sub-par code just to make my bosses happy and keep the paychecks rolling.

At the same time I realized that the desires of the bosses were not going to change. They were always going to want it yesterday without spending any money on good tools. They never were going to care if I used a particular design pattern. Never would they be in awe because I increased the maintainability by applying the Single Responsibility Principle judiciously.

I also realized I would be fighting my younger self embodied by inexperienced programmers. The programmer that hacked the program to get it working fast. The young programmer that resisted all the silly things that took me years to understand. The young programmer that thinks having 5 classes is more confusing than have one huge class that does it all.

But now that I am at my 10 year point I have come to see that those frustrations are just like the frustrations I experienced in my first five years. It is the frustration associated with learning a new skill. But this time the skill are interpersonal. The skills are getting non-programmers to understand the limitations of going down the cowboy path. And these skills are maybe more important in the grand scheme of things than the coder skills I acquired during the first five years.

But what is really amazing about this job is that I can continue, and actually must continue, to developing by technical skills while also working with management.

So I say to you keep at it! Because you have become comfortable with the technology you can start working on your skills dealing with the mushy things called humans.


Maybe take a look at The Passionate Programmer by Chad Fowler... quoting from the webpage:

In most cases, remarkable careers don?t come by chance. They require thought, intention, action, and a willingness to change course when you?ve made mistakes. Most of us have been stumbling around letting our careers take us where they may. It?s time to take control.


I've found that there are 2 secrets of relative happiness:

  • do not seek to have everything you want but seek to want everything you have

  • life it's tough - it doesn't matter how hard you can hit (good you are, personally and professionally); it will always hit back harder. it matters how much you can get hit and still be able to move on.

After all it's all a walk in the park and there are more important things than bits and bytes, and practices and stuff. Just enjoy all experiences as they are and fight back as much you can.


I agree with Nikos completely. I think what you maybe need is to find a company that is technology and product focused. There are companies where the software developers consider development just their job, and they never think about this stuff in their own time. The working environment is usually much more geared up for managers doing desk work rather than developers doing mind work. The average standard of the developers is generally low (although you occasionally get one "guru"). They tend to cut corners on (or even avoid) things like version control, testing, process etc. The company generally ships software that does do the job, but it's often ugly and buggy, and nobody seems particularly bothered.

On the other hand there are companies where the developers are just there doing what they'd otherwise be doing at home anyway; they go home in the evening and work on their own home dev projects, and and learn new languages/tech in their spare time. The working environment is usually quite developer-centric, with good monitors, good tools, good atmosphere conducive to thinking. The developers are often of a high standard, and you find yourself learning from all your peers on a daily basis. They generally take things like version control, testing and process seriously. The company generally ships decent quality software, because the developers take it personally if there are bugs or imperfections.

I don't think finding a larger company will necessarily improve matters; in fact in many cases larger companies are worse, and the problems are just deeper ingrained and more institutional.

Obviously I'm polarising things a bit....but if you're a software engineer at heart (and not just on your resume), then you need to try and find one of the latter types of company. Think of some good interview questions you can ask them, to find out whether a company is that kind of place.


IMO the dissatisfaction you obviously feel is not a crisis, but rather a sign that you reached a certain level. You outgrew "I am just a programmer" slot. You have enough understanding now to see the flaws in the current state of affairs and how it can be fixed.

The next step is find a connection between what you see as potential improvement and what the company you work for would see as such. Then you have to convince your boss(es) that this is the way to go.

It is not enough to understand things and know how to do things. You also should be able to convince people that you know what you are doing. And if it sounds like sales that is because it is. But this is absolutely necessary to become "great". You are working not with computers, you are working for people and with people, you have to be able to sell your ideas.

Of course some companies would be too conservative to accept your ideas, and your boss can reject them because of the color of the tie you are wearing. Just keep in mind that selling ideas is no easier than generating ones, and unsuccessful sale is not necessarily a result of your boss' ulterior motives it can be bad presentation on your part.


I have found similar things in my 10 years of programming, and I surmise that these are rather common occurrences. In the business world (as opposed to academia), money (or lack of money) and time drive the schedule, features, and quality of the programming. Often those resources are lacking for doing things fully correctly. This is a prime motivator for finding the most efficient methods to solve problems. This situation has also guided me to keep in mind that my programming should solve only the problem at hand (with some amount of future consideration) instead of building something that contains many more features than is required. This is a crucial lesson to learn, in my opinion.

Your comments on "senior programmers" is also, sadly, common in my experience. I think the reason for this is two-fold - first, many experienced programmers get lazy, using only the tools and methods they have used in their careers. Technology keeps moving forward, however, and this leads these experienced programmers to become "dinosaurs". Second, after programming for a while, it can become easy to fall prey to a bit of hubris ("my talents have gotten me this far, so I must be a pretty good programmer"). I try to combat both of these problems by continually trying to learn new methods or technologies to solve my problems. Sometimes this contradicts the "build only what is required" lesson state above, but the goal is to strive for a healthy balance between the two.

I would suggest using the experiences you have as a motivator to continually improve yourself. I have quit the programming industry myself after about 5 years because I lost the passion to engineer code. But I couldn't get rid of the itch to build programs, and I came back to the industry several months later. I did learn that you have to engage yourself doing what you enjoy doing - if you want to project manage, find a position that allows you to manage projects. If you want to code all day, find a position to do that. Finding a job that challenges you and fulfills your desires is a wonderful and necessary part of a happy existence - I wish you luck in finding that.


Something I've found many programmers don't understand is that not all decisions are technical. Sad as it is, doing something "right" is not always an option. This leads many developers to think their bosses are stupid, or make poor decisions... and yes, often that is indeed the case, but equally as often the fact of the matter is that the company might be out of business, or lose a job entirely if they allowed the programmers to set the schedule and make all the technical decisions.

Sadly, sometimes it's our job to work within the political or financial constraints of the job and do the best we can.

One thing you learn from experience is to be conservative. The latest techniques may not be proven and you may not have a strong grasp on them even if they are. Managers don't like spending time on letting you get up to speed on a new technology just because you want to learn something new.

Programmers forget that many companies are not software companies. They're <insert business industry here> companies that also do software. Your job as a programmer is to facilitate the mission critifcal processes, not write perfect software. Sometimes it works out that those are the same thing, but it's actually quite rare.


In my opinion it's not midlife crisis - I'd say the honeymoon is over.


I can relate in terms of the code written could be better but there has to be a line where one may be too much of a perfectionist as if something works 99.99999% of the time, isn't that close enough to 100% for most people? Part of my struggles at times with negative thought patterns are perfectionism and intense self-criticism and judgement so maybe I can overly identify with that.

4-5 years is enough time, IMO, to figure out a few things:

  • What you want - What practices in your current position do you enjoy?
  • What works for you - This is slightly different in that what works may not always be what you want.
  • What are your dealbreakers - Could you go work for a company that wouldn't let you have an IDE? Extreme example but I would hope that illustrates the point somewhat.

There are other questions like "Roadmap to a better programmer," and "How to become a 'faster' programmer," that may have suggestions for you if you do want to improve your skills.

I've also experienced where the senior title is given to someone merely for surviving in the field for so long, rather than achieving a level of skill. You can either accept this as part of how the world works or you can try to find places that run differently. How many actually exist I don't know, but I can say that sometimes you can find a good place in terms of how you like to work and what the company and co-workers use to get the job done.

"Sources of Insight" is one of my favorite blogs and I enjoy reading it nearly all the time. The material is a bit head heavy in terms of there being a lot of intellectual elements to what is written but there are nuggets that one can take and make their life a little better or at least that has been my experience.

I can remember in school when I was a child that there were often transitions after 4-5 years as while my first school I was at for 8 years(Junior Kindergarten to grade 6), then it was 2 years(grades 7 and 8), 4 years(High school which was grades 9-13 where 11/12 was done in one year in my case), and 4 years(university bachelor's degree).

I can accept the idea of crisis coming at various points in life,e.g. finishing university can cause one to wonder who they are or after working for a while wondering if it is all worth it.

Some places can appear as awesome places to work and others can lead to burnout as that has been a question here a couple of times, "What causes developer burnout," and "Developer burnout stories," while other questions are the flip of that, "What is your motivation," and "Programming (de)motivation and further plans..."

Just for the sake of background in my answer here I've been developing web sites/applications for almost 12 years now as I got my first out of university job in February 1998 and aside from an 8 month drought where I wasn't working I have been doing this all the time in a few different environments: A couple dot-coms, an application service provider and now within the Information Systems department's web development team at a local technology company. I realize this is a long answer, but I think the questions asked don't have short answers to my mind.


In my experience, the first few weeks (months at most) are crucial for the general quality of a project. If you happen to start working at a place where other programmers have already created a mess (bad coding standards, no version control etc.) it's very difficult for a manager, and mostly impossible for a new peer, to establish any improvements. Later, deadlines and budged issues will cause some ugliness an almost every project, but if the foundation is well done, the damage will be limited and manageable.

For that reason, if you find yourself in a situation where you have to work with bad peers on a bad project, try to get assigned to a new project (if this is possible in your company) or find a new job. Don't wait too long, since bad habits are contagious.


I have had the same questions and possibly looked at the same things you have (great startups, inspirational advice, motivated people creating amazing things, processes, algorithms that make your head heart) only to find none of it in my coworkers, current or former, nor in the people I know who are in the business. So this conundrum of matching this deep interest with a paid job has meant a lot of badly slept nights and a search for a project so ingenious that could be taken on the side and yet grow into its own thing quickly enough to provide a way out. Like a lot of people, I have a family to support, and I personally think the energy it takes to build something in a startup targeting the Brazilian market is not well spent if it's not completely IT-ish and boring. And seriously? I do IT-ish and boring things all day long.

So to me the answer has been keeping the will to learn and improve in one place and work in another. I've taken up processing.org and keep trying to draw, write and cook more. It's been great for me, to be honest: sometimes you're so caught up with matching the people you admire and being taken up to the Pantheon of great achievers that you ignore serious facts about who you are and what makes you feel life is worth living. And while work is something that takes a considerable chunk of your day, the minute you stop worrying about what it all means and where you're going is the moment you realize you don't need it to get there. Keep coding if it's what you love, write software at home, contribute to projects you're passionate about. That type of satisfaction hardly ever comes from a paycheck for most people, and maybe that's the case for you too.


I think it is time to be Sr, Developer for you, I m new at this market and learning and improving but employers are not looking for humans, they are looking for monsters like Jr. developer with 6 + years of experience and it is really frustrating.


I find the red thread I have seen in my career has been that when I feel I get caught up in a situation where I have no control of my environment that is when I start feeling bored. Just doing what everybody else is telling you. It is important to have an area that is one's own (IMHO) to have complete responsibility of - maybe that is missing in your work as well?

In that case you should speak with your manager, maybe there is some solution in your current job? Asking for more responsibility is always a good move.


Well, you should learn another domain (mathematic, AI, data mining, BI, integration whatever). Then after mastering this new domain chances are that you have new ideas which respond to real business needs.

At this stage if you are a great programmer, you just need to make a startup. Well it's risky, but way more fun.

Learn different skills and competencies, not just in programming, then combine them to create a new thing nobody has thought. That's easy, you already have the best hammer ever : Programming.


As a programmer you're always going to have to balance your desire for perfection and your employer's desire for a working product. At some companies these two desires will be closer to one another, at most companies the two desires will be far apart.

My best suggestion for dealing with the drain of your day job is to start a personal project on the side, one where there is no deadline, where you can work in areas that you don't usually work, one where you make all of the decisions. The most rewarding code that I've written was while working as a Wii developer, I can suggest that you write a game. You'll be able to touch on every different aspect of programming, 3D, networking, AI, etc... and since you're already working with .Net I'd suggest grabbing XNA or Unity

As far as Senior Programmers not knowing much, you're probably right. Most senior programmers at larger firms were promoted at a time that they did know a lot, or when they were able to get the job done. Now that they're senior they have different responsibilities, mainly as managers. It's expected that their coding skills will slip a little. Some are better than others, and some probably did just get promoted because of who they know, but most senior programmers that I've worked with in the past had a solid (although sometimes outdated) skill set.

So to wrap it up, do a personal project to relieve the day to day boredom, and take it easy on your seniors, just do the best work that you can in the time allotted and you'll be fine.


My personal experience is the same that you mention. Mostly all the projects i have been working on lately all are made in a rush and all could be better. I've been a program developer for roughly 7 years now and been in the same medium sized company. The management dont have a clue and are running all projects as "non-projects". There is very little order in the chaos.

The thing i fear the most is, that I fall into the pit you are talking about and start doing "crappy" programming and stupid decision just to get forward in my career. I hope there is someone there to hit me in the head if that happens.


Hey buddy, it was really good reading your question. I am glad you wrote so. You know what, you dont realize what understanding you have right now. The things you wrote make me understand what experience you have had, and believe me this experience is something that not all programmers can have in their life. You are a self driven person, self learning. Right now you are in a very mature state of mind, after working 4 years for small companies. If you would have been into big companies, you would have had nothing to be considered as an experience. Now you have an understanding of how this industry works, how things are done and how they should be done. What level these so called "seniors" have. I have a suggestion for you, if you are so good a self learner and have practiced self learning for over 4 years, why don't you try freelancing as a career. Believe me you would be working for yourself and enjoying much more.

As an ending note, dont regret what you did in the last 4 years. Its a wonderful experience and only a few have this in their lives :)


The difference between senior and junior programmers, when talking about people with experience at all, is generally just a pay-based one. There's a lot of variability in what organizations value in order to change the title, and often it's determined by what you demand when you get hired.

If it's any consolation I'm having a 10 year mid-programming-life crisis, although I did start programming on an Apple ][+ so it might be a 24 year point; I don't know. I just wish people didn't expect magic from programmers.


Good question Jeffrey. Do you still enjoy programming? Are you passionate about it, do you do it in your spare time? Or are you just sick of some of the terrible programming jobs you have had.

If you are feeling like programming is not for you, there are many other disciplines you could branch off and do at this point in your career - project management, sales, pre-sales, analyst. These opportunities wouldn't have existed when you were a junior/grad, so you might not have started thinking beyond cutting code. Perhaps you can approach your employer to sponsor you for certification exams, or if you want to explore a new technology (Azure/Silverlight/WPF?)

On the other hand, if you feel like your workplace resembles a true-to-life Dilbert comic, maybe it is just time to move on. If you have been working in a large company, how about interviewing for a few startups, or vice versa. You don't have to tell anyone you are applying for jobs, and even when you get an offer, you are in a great negotiation position since already have a job, you can simply decide if the offer get is better than your current situation, and if not then just keep looking. Larger companies can often offer you better career development opportunities and training, whereas with a small company you get more intangibles, like responsibility for the success of the company, flexible working hours, stock options, and seniority/respect later on if/when the company hits it big.


If it's any consolation, I've felt exactly the same way about seniors in my work place. Last week I filed an evidence-based report, and this week I had an hour long meeting with personnel to officially file a complaint about the managers (taking into account I'm a junior). It was either grow some balls or be unhappy in my job. It's not malicious complaints, it's constructive complaints. There's a difference, and it can certainly have a huge impact on your happiness in work.


I'd also say don't just "give up" because you have an issue with people. It seems a lot of people in here just say "quit your job", the truth is that you can make the difference in the work place. It sounds cheesy I know, but I think you'd make change happen and gain more respect if you're pro-active for things to change. Don't be scared to take your boss aside and make a complaint. I have, and already it's made a big difference. We're adopting new technologies, changing our work procedures and more formally approaching tasks all because of what I said (and I'm a junior developer)


There are a lot of programmers, but only a small fraction of them are software engineers of quality. I suppose that's true in any profession.


Welcome to the real world...unfortunately, what you describe happens in most careers with people which just aren't passionated enough about what they're doing. There's only one option (that is, if you love your work): you must find a better shop to work for, though that is not easy in the current days....


I?ve also observed another issue that most so called ?senior? programmer in ?my working environment? are really not that senior skill wise. They are ?senior? only because they?ve been a long time programmer, but the code they write or the decisions they make are absolutely rubbish! They don't want to learn, they don't want to be better they just want to get paid

... followed by ...

I?ve run into a mental state that I no longer intend to be a programmer for my future career. I started to think maybe there are better things out there to work on.

Then it's time to start looking, and to take action. Because if you remain a programmer with this attitude, you will end up just like those "senior" people that you so clearly despise. The operative word is "trapped": you'll make enough money that you can't justify moving to something else, and your skills will be so narrow that you can't move within the industry.


Wow! I like how valuable this conversation is. I am a web developer with 5.5+ years of experience and I love it. I can't vote but I will quote AZ's words. I agree with that!

I've found that there are 2 secrets of relative happiness: - do not seek to have everything you want but seek to want everything you have - life it's tough - it doesn't matter how hard you can hit (good you are, personally and professionally); it will always hit back harder. it matters how much you can get hit and still be able to move on.

The book I'd recommend is: http://www.amazon.com/Software-Measurement-Estimation-Quantitative-Engineering/dp/0471676225


My two points:

I hit mine after a mere 2 years in the industry. I overcame it by bettering myself and learning.

Most of the time, it will come because you are doing the same thing over and over. And if you're doing the same thing over and over... well... you're doing it wrong.

Always improve. Always learn. And hell, if your current company isn't giving you that atmosphere, go find one that will. I did and the last 2 years have been the best time of my life (I'm also probably 100x better at my job than I was 2 years ago too)


Let me give a manager's point of view. The world supply of coding opportunities greatly exceeds the available talent-hours available to address them. Managers run businesses to make a profit, for which reason they try to apply the available talent-hours to as many coding opportunities as possible, so it is only right and proper that things get done in a rush, and on the cheap, provided the consequences don't affect the bottom line.

In my experience the best work gets done when management isn't looking, either as a skunkworks project at a larger company, or increasingly by voluntary contributors working on open source projects.

My advice is embrace the discipline of cost control, look for skunkworks opportunities, find an open source project to engage your spare time, and get into management, because if you don't someone with less technical competence will get to make decisions instead.

PS. I was a C/C++ developer for 12 years and still code Java as a director.


I worked for 2 companies in 2 different continent with total different mentalities but what they have in common that they both don't care about programmers... Programmer is usually associated with the bottom level of companies... They are usually associated with beginners and have the smallest wages... while Project Managers, architects etc... usually take more money and do less work...

I have been working for almost 4 years now and I have nearly the same feeling as you... Switching between projects... trying all the possible programming languages... C, C#, php, ASP.NET, WinForm, C++, Python, VB.NET, VBA... and a lot more was some of the languages I worked with... Since the moment your superiors discover that you can make it with any language that they give you, they will tag you as a "good" resource and give you all the dirty job...

I haven't neither got a mentor to guide me thorough my career... and like many who wrote here... I only find my satisfaction when I do make my personal projects... but unfortunately usually the long hours of work didn't let me to make some serious work...

In conclusion, I will spend some months lost till I decide like the majority of passionate developer to give up and take a merely boring architect post to get more cash


Somehow we have a similar feeling. Now I am wondering if this is happening because we're both having five years of experience or because of the organized rising of those people who read "Clean Code" (we in germany have a quite active community around the "Clean Code Devloper" initiative) , "Pragmatic Programmer" and "Code Complete" like ALT.NET and so on. All the blogs are full of ideas how to do things right and clean.

So I am thinking, that the five years of experience is just a matter of coincidence, while the main reason is the change of the industry - which is quite new: houses and bridges are being build since thousands of years, machines are constructed for many hindrets of years, higher medical stuff goes hundred years, computers some 50 years and we're coding in a 3rd generation language since 20 years. See the point? It takes time to become mature for an industry, and I think the industry is coming to the age of adolescence :-)


Interesting post. I'm midway through my fourth year professionally doing .net development. I'm really unhappy with my current job (I am looking but so far there hasn't been much to say on that front).

  1. I had a teacher who once went absurdly out of his way to stress documenting everything. I don't mean code, I mean "everything". And he said it probably still wouldn't be enough. Well, there's a difference between knowing a thing and understanding it and I've come to understand it, and he's right. There's never enough. I fail to documnt but bring up a recent conversation, I lose. I document, I get told I misunderstood something. I have taken a long, hard look at myself through all of this, and I think some of my own faults are definately at work. But communication is a two way street, and I am not always the one who fucks up. It's even worse when I suggest things or address problems, these get blown off at the time, and then come up later. I sat dumbfounded in the VP's office recently as he and my boss asked why I hadn't done something on a particular page on our most recently released app. And yet I'd asked about doing that thing during development and was shot down. Stuff like this is happening far too often for my tastes.

  2. Learning/keeping up on your skills/etc is dicussed sometimes, but we don't do it. We have opportunitues to do this at work and we still don't do it. Very disappointing. I don't expect us to jump on the latest and newest tech/tool every time one appears. But e.g. we should be doing .net 3.5 development. There is no argument for not doing 3.5 development. But we're still doing 2.0 development. It's stupid. It's mostly good that my boss is distrustful of new things, but it's gotten silly. I tried explaining LINQ to him recently (when arguing for moving to 3.5) and his response was "it sounds like that english language query stuff". I realize part of the problem was me doing a poor job explaining LINQ. But going back to the two way street of communication, that was someone on the other end who didn't want to listen. I don't expect the company to make mentoring me it's top priority. But my group (just 3 developers) could do more to foster learning.

  3. My group's standing in the company has improved somewhat in the last year and a half. But we still have some problems. Our VP is largely responsible for this. It's frustrating, but I could live with this if certain other aspects of the job were more fulfilling.

  4. Ironspeed Designer - god I hate you. And the thing is, I understand why a code generator can be helpful. I have wanted code generators for certain tasks at times in my life. We seem to be becoming an Ironspeed driven group, though. I do not like this, since it will severly hamper my ability to grow on the job.

  5. I care about the craft of software development and programming, even though I'm deficient at both. I do not work with people who care about the craft of software development/programming. No code reviews. I often can't get help testing things (and then can't get users to test though things have gotten better there in the last year. . . and then get yelled at if a bug makes its way into production on a release. I'm one man. I can only do so much).

So I try to learn on my own (I'd do better around someone who is interested in seeing me learn, though). I go through phases where I like to program outside of work, and phases where I can't stand it. We just recently got done with a particularly hectic project that saw me put in significant overtime, and so I haven't done any real learning off the job in about 6 weeks. But I'll slip back into it and re-read Skeet's C# in Depth, and do some more playing around with MVC. . .

I have battled a lot of doubts (self confidence has never been one of my strong points anyway) in the last year and a half. I wouldn't call it a crisis. I soldier on because I do like doing this. Even working at a crappy job.


Unless you find a job doing what you already wanted to be doing with your knowledge of programming, working full time on a related-yet-uninteresting part of programming will dull your interest in what you liked to begin with.

Or, someone with a fierce interest in self-guiding robotics using modern path planning algorithms doing web development work full time probably won't want to see a computer at home, much. The same person plowing their way to the career they actually wanted and not stopping halfway will often gladly work more than a 40 hour week, go home happy, and wake up rested in the morning.

In theory, at least.


I have these on a recurring basis. What happens is that i generally lose interest in my work and try to learn new skills. After that i try to put these skills into my work, but I rarely get the chance. This is due to micro-management and constantly changing company policy.

Worst thing is that i'm more or less stuck at my current employer unless i move to a different part of the country.

The only "senior" developer with us is actually not a developer, at least in my eyes, he's really productive, but i've never seen him write any code. And to my knowledge he hasn't got much longer work experience than the rest of us.

I'd really like to do something else, like building a boat or something. However i feel that i've really past the turning back point after 8 yrs.

But if i had the chance i'd be doing something different, but i do feel somehow that I would return because this is who I am. I know code.


I think you might be confusing disaffection with 'A job' and disaffection with 'THE job'. As others have said, you just might need a change of situation.

Product-focused development, rather than Line-of-Business (LOB) projects, might give you that stronger relationship between your efforts/desire for quality and outcomes. When you are trying to make a commercial product the best it can be, you are very focused and aligned with the efforts of others, especially if your market is in the tech/programmer area - maybe you need to become a software tool developer for example?

At any rate I would certainly advise you against seeking out larger companies with more money - where do you think the average & below average developers go to hide?


I suggest that, given the opportunity of course, you do something else for a time. Like IT consulting, data warehousing, sales, or even support.

You'll either rediscover your passion for programming and be so glad to get back to it (which is what happened to me) or you'll be happy with your new job and pursue a different career that you hadn't thought of before.

If you get back to programming then, it might also open up the possibility to work on different projects in other industries using other technologies than before, which can also be a good thing.


A lot of people have basically said Learn Something, and I agree with that. In particular, I suggest finding a domain you have a special interest in and getting good with it. I know too many web designers who "really wanted to be 3d artists but never figured out how to do it." By far the best way to get hired for interesting projects or technologies is to have experience in other interesting projects or technologies. An unfulfilling-but-undemanding workplace can be used to your advantage, giving you the mental breathing room to take on new concepts.

In general, the best advice I have heard in these situations is not to think positively but to think constructively. Where am I in my career? Where do I want to be? What steps do I have to take to get from here to there?

Even taking a hands-on, holistic view of your own company's activities can be refreshing - what realistic alternatives would you implement to the workflow as it stands? are there any small components that can be introduced without too much disruption? Presenting a written proposal of a new model along with working code for a part of it shows vision as well as technical competence. The difference between a good junior programmer and a good senior programmer is the scope of the solutions they are required to craft.

(Also, 4-and-a-bit years of a 9-5 also represents 10,000 hours put in to a field. Not particularly relevant, but I thought it was a neat yardstick to know about!)


The project is the thing. Really. I've run my own small company, and medium and large size teams. The single biggest thing I see is that everyone is motivated when they dig the project. Won't you work cheaper if the project is really cool? Won't you work longer when you're totally into what you're doing and charged to see everyone else feeling the same way?

We do what we value best. So how can you inject value back into your career when you are working for someone who pays your bills? Through innovation. Innovate and share that with others. That's keeps it fresh.


Imagine if your experience was less than 4 years, be a woman, be pretty, be complete in-love of your work as developer and no one take you seriously. Although if you have squashed one and another time in knowledge the men that's surround you but you must pretend all time that you are a silly girl. Yes sometimes it's really frustrating, but I think that everything in live is how much you love what you do, and certainly the only way to really learn is by our own effort.


If you're good at what you do, as a programmer, most people you encounter in corporate life, will have more to lose than to gain. Senior management would gain from your abilities and you need to ensure you have their support.

Find your own mentor. It is your responsibility, if you love this game, to find someone to help you grow.


From my experience also in some large companies the situation is the same. What matters is the organization's values and policies and much less its size.

Try finding a sub-field of software engineering that you are more passionate about and enquiring what companies have jobs in the field and what working there is like.

The seniors are usually people that either have been there for a long time, or have key positions (e.g. team leaders, architects, ...), however staying in one company for a long time tends to have a negative influence, since you get used to the situation their and the technologies they use and you strive less to change things and try new approaches. - Fresh minds are very important, internal experience is important for knowing how to get things done in that company, companies should have a combination of both.

Also try to get your work place to send you to as many external courses as possible, that you think will improve your technical knowledge and working methods.


welcome to the real world.

life sucks.


looks like its time to start dealing drugs.


There is a difference between 10 years experience and one years experience 10 times.


This question describes pretty well the sad state of our industry: programming is awesome but most programming jobs sucks.


Speaking for myself, there is a cycle. When I started professionally developing I was excited, eager and had a great time working through every new problem. After a few years, I wound up traveling for a company for several months. I wasn't really prepared for the amount of travel required and wound up moving on. The next company I worked for had a problem with being too big and not having a clear focus. There was never a clear intent or business reason for the coding I was doing. As a result, it was mostly filling time.

After that, I became a consultant and found things aren't really that much different from FTE work. I've typically been on multi-year assignments where eventually it just becomes a job. As others have said, you wind up doing lots of evil things to get the job done and get mired in the technology you're using, as opposed to new and interesting things. I spent several years where I didn't really care about the technology. I've seen cycle enough times now that I know that if you ignore a round or two, you won't really doom yourself... but it does take quite a bit of effort to get back on the bandwagon and catch up with the important changes. Last time I had an interview, Unit Testing and MVC didn't really exist in the .NET space and patterns were barely spoken of in the .NET community.

I find the best determinant of if I'm "doing it right" is if I'm coding on my own on the weekends and evenings. If so, then I'm passionate about the technology, interested and learning. If not, my job probably has me on the road too much or has me doing the same thing over and over and I've lost interest... in which case, it's probably time to move on.

Remember: Your boss is in charge of your job, you are in charge of your career. (Blatantly stolen from Brian Prince's great talk on being a better developer)


I've felt the same way for a while. I'm in a large, corporate IT shop, and I'm seeing the same sort of thing; the seniors are mostly stagnant and resistant to change, and that resistance is so ingrained that we can't even get away with streamlining the user interfaces for our software, instead ending up cloning the original almost exactly.

It doesn't help that the original software is mostly terrible; the designs overly complex, very inefficient, and equally error prone... yet the management forces us to make many of the same architectural decisions.

So I'm working on transitioning to freelance...


:-) I assure you, the law of code to market go's as follows:

Larger the corporation the least time to market you have, project timelines keep getting smaller and competition to get your product out quickest makes for almost zero time to write the "perfect" solution if there ever was such a thing.

In my personal experience, some 8+ years development in large corporations, smaller businesses and then medium scale enterprises - the projects I was able to focus the most amount of time and polishing was the SMME (small guys) - Sure cost comes into play but don't sell yourself out either!

As a developer stand up for realistic timeframes, have a game plan that allows enough time for some polish which will make you feel better about what you've delivered. Failing to plan is like planning to fail, a term coined by many to date.

Best of luck with your future plans / career.


Changing your perspective is very important

I think we programmers complain and cry about lot of things. We want everything to be "perfect" ( = we want everything to be our way). I was (still trying to change) a lot like you. But reading Chad Fowler's "The Passionate Programmer" changed everything for me. I now consider myself lucky to be a programmer. I do my 52-55 hrs a week job (yes this is true). It isn't "perfect". But, I try to do my work passionately. I work for an outsourcing firm in India and the kind of work we get is far from being termed as challenging. Programmer are lucky to have a wide variety of opportunities to satisfy their creative urges. We can work on our own projects. We can work on open source projects. We can do freelancing on weekends. I think most professionals in other fields don't have that luxury.


Funny i've just come across this.... I've had enough of programming and plan to leave, but seem to have had the career you desire. Maybe best to follow this thread of mine and hopefully the answers will help us both: http://stackoverflow.com/questions/2055669/how-to-find-part-time-development-it-work I understand your frustration


I would suggest that if you really enjoy programming then make the time to work on your own projects that interest you, outside of work. Even if you?re handed a dream job, the day-to-day reality of working on professional level software can often take the fun out of it, just like anything else in life.

There?s a good reason why programmers get paid well (it?s incredibly difficult to build and maintain software systems, it?s fraught with compromises, and you?re often working under high-pressure time constraints).

My advice is to work hard while at work, learn what you can from those around you who know more or have more experience (even if you think you can do better than them), and continue to enjoy the thing that got you into this mess in the first place: a passion for programming.


I am in the same situation as a four year Java programmer in a big company. I can confirm that I too am facing the issues you mentioned.

My solution is to earn a PHD in computer science in order to find new challenges.


I'm currently working at my third job. I worked at my first job for 4 years and then at my second one also 4 years.

I think it's a combination of wanting to do something and carreer opportunities and job offers.

I mean: when you work at a job for a year or so and headhunters contact you, you're like: "no sorry, I'm happy at my current job". But then like after a few years you might get tempted into looking around for better opportunities until you reach that breaking point and really look out for something else.


Perhaps consider going to graduate school? That might open up opportunities for a different, more long-term-oriented kind of work.


Think of this as a chance to chanllege you beyond yourself.I would suggest you to take initiative to improve your atmosphere. You will learn lot along the way ,no matter you would fail or succee.

It's much easier to complain (I know people don't like this words, me too) than to make positive change.To change you should be able to influence others; you should be able to communicate;you should be able frame common ground; you should be persistent and patient; you should be able to listen and motivate others with you vision. These are the never-out-of-data skill that will benifit your whole life.


The reality is that length of experience doesn't really amount to any sort of guarantee when it comes to competence. A good model of what happens is the Dreyfus model of skill acquisition which although originally popularised in nursing has had a bit of a revival in software engineering - here's an example applied to Ruby (personally I'm a bit dubious about the mapping, but still an interesting read).

Sadly most people never pull themselves past the "advanced beginner" stage in their skills (note that the model should be applied per skill not to a person as a whole) - you'll only get better by not only practicing self improvement but by choosing the right sort of learning which will pull you to the next stage. This is why some people can do lots of courses, pass exams and still be rubbish.

It sounds like that you've reached a particular stage in your skill development (competent or proficient) and so are able to differentiate yourself better from others. The general pattern is that it takes 10 years to become fully expert in any particular non-trivial skill - but most people never do.


A few ramblings from someone who is wondering if after 40+ years of hacking, maybe a new career might be in order ... :-)

Nah. I love this stuff. From punch cards and paper tape, through the CDC mainframes, PDP-*, 4004, Alpha, Nova, Eclipse, Eagle (the hardware which came long before the software), Mac Minis and all the stuff in between. And there are a few of us who still are curious about new technologies after many, many have come and gone. My first confession is how, as a child of the Mini-computer industry I looked at the old fogies of the Cobol/Mainframe era and thought them dated and basked in the knowledge that us young whipper snappers were here to save the technological day and get stuff done, not to mention make millions.

In all that time I never seriously thought of actually leaving programming because there was just too much left undone. Much of it work created by clueless management in a rush to deliver a 5 month baby, time after time after time. And it is that work that is the bulk of the uninteresting work done by 9-5ers or by off-shoring.

The interesting stuff is being done by startups, small companies, and companies like Apple and Google who for different reasons have created work environments that foster creative programming. And in big companies with dysfunctional work environments by mavericks who are willing to be stick their necks out and have their heads lopped off from time to time. Been there, done that and will do it yet again, if only because at the end of the day, there is just nothing like seeing that application, system or library actually working and being used, and most important of all, knowing that but for your efforts, the end product would be worse off still.

Not to worry. If you love this stuff you will be doing it 30 years from now. If not you will, with any luck, find what you do love and it will lead to internal satisfaction and hopefully lots more. In any case, excellent question if only for the opportunity to express some deeply felt passion.


I have worked for large (enterprise) software companies for the past 4-5 years, and as described in the question, have seen a number of solutions just been thrown together without any real thought or design. I have been fortunate enough to work with some great people, but it does get a bit depressing to see the same mistakes being made time after time. More often than not, the problems are not technical, but are the result of poor management.


Here is a book:

  • Apprenticeship Patterns : guidance for the aspiring software craftsman / David H. Hoover, O?Reilly, 2010

If you are planning a career in Agile Software Development, then this book contains good advice. The foreword is by Ward Cunningham. See also the author?s site. 125 pages.


My answer is no. I now am a software developer for 7 years, and my fun it's still getting better. (I'm doing desktop apps in C# at the moment)

For the part of not feeling senior yourself, I recommend two things:

  • Go to a big company with experienced people
  • Get yourself a good education. I do not know what this means where you live, but at my place they have a great post-degree course that is 2.5 years part-time. This opened my eyes for good software and development in general.

what do you do when "personal projects" no longer give you sufficient learning or motivation?


I just started working about 2 months ago in a small company. Programming isn't boring at all if you really love it. And I also rely on the internet to search for answers for my own questions but there is also our manager (who is also a developer/programmer) who I can ask from. Well, it's not all about earning huge income but your passion to get things done. Try to add some skills. I'm not just programming but I'm also writing. I'm also into database design. When I'll have my spare time, I'll start doing my personal project. As of now, I enjoy what I'm doing and I'll be still enjoying it after 5 years.