What environmental factors make you lose your motivation?
Boredom. Seriously when a project becomes boring I find it very difficult to work.
The best thing to solve this is to try and make it interesting, think of a cool way of implenting a UI component for instance, do something different! :)
Having to switch to many different projects, thus never being able to develop a feature from A to Z.
Slow compile times. Instant killer to 'flow' and keeping track of things in your head.
When work of the last hour/day is lost because of some stupid reason and I have to do it again from the beginning.
Don't know if this counts as "environmental", but I often lose motivation when what I am doing is no longer an interesting investigation and has instead reached the point of tedious implementation. Usually this is exacerbated by some odious bug which defeats all attempts at me understanding it. At this point I often give up and move onto something else that has grabbed my attention.
The internet is a blessing and a curse in this regard. It provides many interesting new projects, but those new projects then act as distractions from my current project.
- Internal politics.
- Zero innovation.
- Extremely high context switching.
- Inept management.
- Brain-dead development.
...and lots of other things.
I'm not spoiled - it takes quite a bit of these for me to lose motivation.
Interruptions is the big one for me. If I've made several attempts to get into coding, only to have to dump my mental stack to answer a question (particularly one I don't think I should have to answer), it's really hard to try to get back into it.
having to implement a feature the 'quick way' rather than the right way, usually resulting in accumulation of technical debt, and longer hours chasing out the resulting obscure bugs
I'm sure this is going to be redundant in some ways, but here's the short list:
- Internal Politics - These can get really bad at time and just seem to drain the motivation of everyone working on a project. The worst part is they can actually influence the design of a project in such a way that they may cause it to fail.
- Maintaining Bad Code - Maintance programming in and of itself can be dull if you are not working on anything else, but when you can't even figure out what is going on in the code it just becomes stressful and demotivating.
- Inexperienced Manager and/or Managers with no programming Experience - I group the two of these together as a good manager will eventually out grow these, but depending upon how long it takes it can wear on the motivation if you have to explain why something should or shouldn't be done a certain way.
- Unrealistic Deadlines - Asking someone to write a major application in a week is a surefire way to kill their motivation.
- Interruptions - While there is nothing you can do to avoid interpretations, getting ask the same question 10 times in one day by three different people can sap the motivation.
- Excessive Meetings - While meetings are needed to ensure a quality product is developed, excessive meetings - especially if they accomplish nothing - distracts the team from their work and can be demotivating.
- Not Getting Thanked For Your Work - This one might be a bit silly, but when doing maintenance development, only having people stop by to complain about something not working right can lead to lack of motivation as well. It is nice to have someone stop by from time to time to thank you for your work or a new feature that you rolled out to make it feel like your work is appreciated.
- Burnout - Burnout is bad for motivation; however, even beyond burnout is when are feeling the stress and not given time off to recover when it is requested. Sometimes you need a three day weekend so you can come back renewed the next week, when this time off is rejected it leads quickly to people burning out.
- Working alone
- Annoying customers, bad PM, scope creep
- But mostly working alone
I think unrealistic or unclear goals are a major factor that aren't given enough credit in demoralisation/demotivation. Sometimes it can be fixed on your own by sitting down and consciously breaking up tasks into smaller, more concrete ones, and sometimes it requires more communication with your team (if there is one) and getting back to reality. Of course, you first have to realise that it's happening!
Part of the problem with unrealistic, vague goals is that there's very little sense of progress even after a lot of work. By breaking down those goals into doable tasks, there's a sense of progress and gratification as each one progresses, which makes a huge difference.
- Insufficient work done by analysts before the coding itsef takes place
- Poorly written requirements & specifications
doing useless work because the requestor of the work does not know what he wants and so asks for something which he think is right but it's not.
Management theater. Productivity theater. Not having my own office. Loud work environment. You know, everything mentioned in Peopleware.
A sluggish computer. I really hate having to wait several seconds for the computer to respond.
Losing Basketball. I get all angry and start raging at stuff for no good reason.
Changing requirements.
The thing I most hate is when I finish some project/application/piece of code, do it exactly by the given specs, and then the client tries it and suddenly realizes that the thing I created is not what he wants - but NOW he knows exactly what he wants.
When this happens more than once for a single issue, I lose motivation completely.
Increasingly, I'm finding it's largely the result of a lack of a "plan" (i.e. serious upfront design, not just a napkin sketch). You can get away without proper planning for years, but eventually, you start to become wise and realize only chumps just starting writing code and then hacking in all kinds of fixes for a bad design. Sure, everyone TALKS about it, but it takes a fair bit of willpower to avoid the "I just wanna code!" feeling and get the design done first.
Also, a second for "boredom". If the project isn't something new/exciting, it can be hard to get into it. After all, eventually, all coding boils down to a lot of repetition. Who really gets excited about writing file or socket code anymore?
Finally, poor tools always make a job suck, in any profession/hobby (I'm thinking of embedded stuff in particular).
Changing requirements, old hardware and most of all... doing things that have nothing to do with software development (such as training end-users, carrying laptops, etc.).
When I mention the same problem for over 6 months and nothing is done about it other than to acknowledge, "We will fix that soon..."
When I spend many many hours putting a ton of effort into something that gets killed on a whim like it was a scrap piece of paper or less.
Feeling less than respected and valued as someone who does bring something to the company that employs me.
When communication breaks down and instead of things flowing smoothly, there is this jerkiness to how things get done so that 10 steps done today may be 1 tomorrow depending on how others feel like helping with this problem.
The worst thing for me is when you have to repeat yourself when justifying / explaining:
- New Tecnologies in use (from framework to programming envivoment)
- Code repository policies (because former developers never ever had one in place)
- Backup policies
Or even worse - when your (internal/external) client starts (for no apparent reason) to contradict him/herself when explaining / testing a new functionality (after spending days or months coding it).
When a client wants me to take short cuts, and still produce a polished result.
New in Florida - the climate here, unrelentingly warm, warm, very warm. And humid. And warm. This climate drains my energy.
The area culture, architecture, support for creative types, bicycling. The architecture here in Orlando (at least where i spend my time) is bland, cardboardy. Pretty cardboard in some places, but still artistically shallow. Car-addicted culture with pedestrian unfriendly infrastructure. No lighting between home and work.
Having lived in Boulder, Fort Collins, Palo Alto and Ann Arbor, this place is really disappointing. No "there" there, and all that. If i had money or political savvy, i could push to change things but it would be a Sisyphian task.
Good insights on what makes a town attractive to creative types can be found in Richard Florida's writing - http://www.creativeclass.com/richard_florida/
- Layoffs
- Scope creep, especially at the end of a project
- Impossible deadlines
- Managers thinking that lines of code changed per day is a good measure of performance
- Seeing all the ways the end-user can work around all the idiot proofing you took the time to put in to your system
More so than anything else in the world:
No customers using the product.
Heavy, frustrating development tools.
Going from a project using GIT/Subversion to one using ClearCase for source control was a MAJOR shock.
Maintain copied-pasted code.
No matter the language used, I think that when we need to modify something, we should only need to modify it at one and only place.
I admit that's an ideal world and we don't live into one.
Specially politics. The development problems that not are development problems indeed.
Having to do other developer's work , because they aren't capable of doing it !
I usually lose motivation when I'm forced by the programming language to write unclean code. I remember that I actually stopped working on a PHP project I used to spend my spare time on, because there were no package-wide access modifiers and I didn't find a proper alternative way of implementing it, let alone there even are no packages at all in PHP (ok, namespaces since v5.3).
Changing requirements after spending time getting something to work.
When at the job interview you are promised things and afterwards you discover it was practically a joke. It really helps to remove motivation from a new employee. Not sure who can expect loyalty and a long-term relationship after that. Still, employers continue doing that...
Boilerplate code. When I have to code something that I can practically code as fast as I can type, this is really annoying because I feel like a trained monkey could do my job. Most of the time, I'll find a way to extract this code into a reusable library, but occasionally the problem has so many small variations that it's almost impossible to figure out what to abstract, or a fundamental defect in the language prevents me from completely abstracting away the boilerplate.
Realizing how many super smart developers there are out there.
It still amazes me on how many really difficult questions are posted on to stack overflow like 'What's the cure for cancer' and someone posts, here's a simple little method I wrote: cureCancer(personsName).
Waiting on MOSS to compile and the solution to upgrade so I can see my changes.
When you're looking for an answer online and you find only one article that has the question you're after. The person posts, "Nevermind, I figured it out" and doesn't post what the answer was.
woodoo behavior of 3rd party libraries, which your project is based on
Bad business model. I can live with changing business requirements, internal politics and other things I can kind of attribute to the young age of Software Engineering or the nature of the business or dealing with humans. However, I cannot tolerate a bad business model that right off the bat can make the best engineered-code worthless profit-wise.
Tryint to fix css to reflect IE with the world.. kills me senseless
:( When ur PM or team lead take wrong planning and design decisions. and make the project progress looks bad, they suddenly recognized that Error handling, performance tuning, load tests are important after the end of the designing, coding and maintenance, I really think this project will fail.
More worse No testing teams No QA teams
Actually this is the responsibility of CTO, Refuse to hire people, refuse to give sometime for quality measurements, I really don't know what they are thinking about!!
I am in a position/role where there are several things making me lose motivation in the job:
-Incompetent programmers who may not be senior but have more programming experience than me (working for 3 years more than me and have a comp sci degree - even the highest grade possible, more certifications than me, and I still make them look stupid with just more practise and reading on the profession).
-Incompetent programmers who are alledgedly senior, but becuase they have this job title, they have enough authority to make technical and even managerial decisions (eg timescales), when they don't even understand the concepts surrounding the decisions!
-Incompetent programmers who ask a question and then defy your answer, saying you got it from the net. An insecurity/doubt THEY need to deal with, and these same programmers were set objectives on concepts to learn too!
-Office politics.
-All the interesting work (programming) being shared amongst the dev manager and the rubbish coder who knows xyz server technology the most in the team. Everyone else is in a dire need to learn xyz server technology but can't.
-Interest (following on from above), we (the juniors) just do Excel for months and months.
-Lack of pride and passion in other developers. Simple addins for VS which are free and very easy to use which can help with testing (eg Pex) are not known by anyone. This would greatly help reduce the load on the testing team, too.
-When I am asked to do coding and I am given the code! Don't even get me started with the flaws in coders doing copy and paste programming, and the lack of architecture.
-The Project Manager himself making jokes about the project's problems!