I work in a small city as a .NET Developer and am currently considering whether I should change jobs. Trying to think through the various options and weigh up the pros and cons of each choice has proved to be a bit of a dilemma....so I'm posing this question out to all of you to see if I can get some good advice.
My current position has me on good pay and working only 38 hours per week. I'm 5 minutes walk from work, 5 minutes walk to the mall, 10-15 minutes walk to the beach which has great waves for bodyboarding. I can eat lunch at home with my wife everyday. Everything is close and convenient.
Work, on the other hand is a different story. While all the people are nice and professional and there are a handful of excellent developers on the team I'm currently not content. For one, our development life cycle is Waterfall...which would be tolerable if it worked but the result has been several large systems that are buggy, hated by their users and developers, and are a real pain to develop for.
There are no code reviews, little to no useful documentation, a lot of the code is an awful mess...the list goes on.
On the other hand, I'm given a fair amount of freedom to practice some elements of the agile methodology such as writing unit tests using TDD and refactoring bad code I come across. We also have a continuous integration server and use fairly current technology like Visual Studio 2008 and numerous open source tools.
All in all, its a fairly decent job which pays the bills and provides me with experience as a developer. So why am I discontent?
Well, to be honest, I'd rather be developing software that users love and which is technically challenging for me to build so I can grow as a developer. I'd really like to be developing using an agile methodology in which I can interact closely with eventual users of the software throughout the development lifecycle so that the software I develop meets the users needs instead of the users having to be told that they have gotten exactly what was agreed upon in the spec put together using the BDUF approach. I'd also like to be mentored as a developer so that I can learn from those who are better than me. At the moment I try my best to read a lot of technical blogs and try to teach myself as much as possible. But unfortunately, there is only so much I can achieve on my own...
Unfortunately, I've looked around and there are no companies in my immediate area that do agile development. I've looked further afield and have found one company that I believe fits what I'm looking for... Thoughtworks [1] They appear to be a well respected firm that does agile development, have excellent developers and mentors, use the latest technologies, and appear to have a good track record of successful projects. (Does anyone know any differently? appearances can be deceiving...)
The down side is that joining them would mean traveling by train for 4 hours per day if I chose to live in my current location.... But if I chose to move closer my rent would basically double just to reduce my travel to 2 hours per day....and would be 8x higher if I were to try to get a place as close as I am to my current workplace. The increase in rent would effectively neutralize any pay increase I might get. Furthermore, instead of being a few minutes from the beach I'd be 1 to 2 hours from the beach...
There in lies the dilemma...should I stay with my current company and enjoy being nice and close to everything....or do I sacrifice that to practice agile development and have a better chance of improving myself as a developer? Or would I be able to improve myself as a developer just as well where I'm at?
What do you think? Are there options I've over looked? Am I crazy for both wanting to stay and wanting to leave? Any one have any advice on how I can resolve this feeling of ambivalence?
Don't underestimate how sucky a long journey to and from work is.
Why don't you think about staying where you are and starting your own software shop on the side. when it is up and running, ditch the company you work for now.
Edit: eg, spend the 4 hours a day (that you would have to spend travelling if you changed jobs) working on your own projects and business. That's 20 hours a week, which is basically half a normal working week - you will be amazed how much you can get done in that much time.
If I were you instead of looking at a new job, which may be less secure, further away and no better, I would be tempted to try and push through some of the changes that are obviously needed to both improve your expertise, but mainly to improve your company's products.
If you can make a good case on paper as to how certain practices will improve the company's profitability and productivity and pass that on to someone who has a vested interest in saving the company money then you're on the right track.
I wouldn't push for agile just yet. It seems that there are more fundamental areas which need attention and most managers will shy away from agile as it can appear too chaotic.
Take it a step at a time, get everyone producing testing software. Show them how it ensures that small changes don't break the code. How it improves reliability. How thinking of how you can break the code prevents you from making basic errors in your coding that aren't picked up by code review.
Remember most opportunities are made not given, see if you can make one where you are that would both enhance yourself technically and your company. In the short term it will probably mean more responsibility without any extra pay, but persevere.
If nothing else you can set a time limit, say 6-12 months and see if you can improve matters or at least start to see if any improvements are being achieved before deciding to jump ship.
Do what I do. Contract out to smaller projects. So I have my regular full time job which I love but is not necessarily challenging, and a few separate projects that I contract out to. These separate projects are much more challenging, use agile development, and much more modern technologies.
So now you get the best of both. Advancements in experience and skills as well as the freedoms the full time job gives.
Sounds like your life outside of work is fantastic, it would take A LOT for me to give all that freedom up.
My (admittedly limited) experience says that a bird in the hand beats two in the bush. Taking any new job is a gamble, and in this economy, frequently those gambles prove to be costly.
But don't stop improving your skills. Contract out, take classes, do what you need to do to keep up.
Especially with that idyllic life outside of work you got there. Having that kind of freedom, for me, would overrule most of the gains I would get from switching jobs.
So wait, for now. Who knows, something much better could turn up soon.
Before you make the decision to leave due to the job/process, read the following stories and see if you can make a difference.
My 2 cents:
Never underestimate the importance of short ways to work, nice work environment and (especially) breakfest with your spouse. It gives you a quality of life that is so much more important than having an interesting and challenging job.
Don't get me wrong, but taking a new job sounds to me a little like running away instead of facing the challenge of changing things. Until recently, I was in a similar situation (just without a beach nearby). I decided to initiate some changes in my department. It was amazing (and very motivating) to see how easy it was to get the rest of the team to accept something that makes their work easier. (Then all of a sudden the management decides to restructure the company and in a few months our department will be gone, but you can't win em all, can you?)
Anyway, my advise is to see this as a challenge to change your working environment. I believe that it will not only improve your workplace, but also yourself. You will learn how to initiate changes, how to convince your coworkers and the management, it will help you to build all sorts of soft skills.
Embrace the challenge!
The grass might look greener on the other side, but as you get older you start realising that your personal free time is invaluable. Four hours on the train each day at least lets you either do work, surf the web or read a book, but it's not what you really would do in that time if given it.
Never mind what happens when you get "kinda-agile" companies which basically means "no development model besides source control and an overall vague target".
Now you also don't want to get stagnant in your current job, and maybe you could bring that up at your next one to one or review.
Alternatively you could rent a room near to your new workplace, and live there during the week, and have a single weekly commute from your existing house. Again, it's not what you'd choose to do - you have a wife you potentially might like seeing more than at the weekend. More dollars doesn't mean more happiness.
I've heard good things about Thoughtworks, but I've also seen photos of one of their project rooms - 50 people crammed in what I would say was a medium-size conference room (on-site project, Atlanta, I think).
You should factor in that travel time and work out the total effective monetary compensation per hour. And factor in the massive increase in effective working hours as well.
Assuming you are on a train, you can regain a certain amount of that time through reading, working on laptop etc, but this would be a killer for me - I can currently commute by car, bike or streetcar.
I doubt this extra work and time lost would be made up for by working for most companies.
Do what makes you happy. My only concern is that there are lot of brownfield projects, so you may not get what you want unless it is a completely new development project. Also, If I were you, I would wait till the fall to decide on a career move, as the economy improves, there is more scope for new jobs and new projects.