I was driving home from work and thinking about ponderous experiences in my past career endeavors. I do that sometimes when I'm not speeding and weaving around like a blind man with Turrette's. It stemmed from a lengthy discussion with one of my nephews about our relative "quality of life" and "career satisfaction" stuff, and so on. Guys often get into this subject matter after blabbering about titties and power tools. (There's nothing wrong with either of those, but you can only talk about them so long before you run out of superlatives and metaphors.)
I said to him "I think I'm in the best situation I've ever been in, at least so far. I'm enjoying it while it lasts, because nothing lasts forever."
We digressed into two aspects of that statement: one for each sentence.
As for the second one (I'm working in reverse): I've been in too many "sure bet" situations that suddenly turned a wrong corner. Once after 10 years, another after 7 years, and another after only 5 months. Shit happens. When you've had a CEO shake your hand and hand you a mixed drink, smile, and tell you with utmost sincerity that "your job is as safe and secure as it could possibly be", only to close your office and lay you off two weeks later, it tends to leave to an impression. That was five months into the new job. The 7 year job was one I thought I'd retire from and live happily ever after. The CEO of that place turned into a vindictive paranoid dick and stabbed everyone, even his VP's, in the back and left with a golden parachute. Those two situations, along with the death of some very close colleagues, really hit home with me and given me a perspective that you have to plan for the worst, hope for the best, and be prepared for whatever comes next.
Enough of that though. On to the first sentence...
As far as building cool applications are concerned, at least where I define "cool" as (A) fun to write code for, (B) produce something that helps not only myself but those around me, and (C) is actually beneficial to my employer's line of business, I can point to three distinct experiences:
Employer 1 - I had an idea to build something that was helpful for my group, but the company pushed back hard at every turn. Their rationale? I was hired to do job "A", so working on something outside of that, even though it automated more than half of what job "A" entailed, was outside the duties of job "A". Period. In one situation, I was flat-out told (and I quote): "We are a defense contractor. We don't get paid to save time. We get paid for the time it takes to do it right." Awesome reflection of the true American work ethic. Regardless of being approached by four peer-level businesses to license it, and three government agencies, the employer refused and effectively killed the project.
Employer 2 - I had a manager with amazing vision and self-direction, who approached me to help him build something that was aimed squarely at automating our daily workload. It grew and grew, mostly with his ideas and direction, based on what he had seen accomplished at each step, and propelling it on to the next level. It was a cool project indeed. The company fought back, again, with a slightly different rational: "Your group is tasked with "A" not developing software. If you wanted a solution, you should have requested the AppDev group." Translation: feasibility studies, requirements analysis, pre-dev evaluation, code and test, evaluation, UAT, the whole stupid-ass CMMI assembly line. And this is to build something that really warranted none of that excessive bullshit. The real aim was control and something to provide time-charge coverage for a bunch of people with not enough work to cover them. In the end, I left and another developer was brought on to continue work on it, but it was eventually given over to the AppDev group and given the lobotomy treatment.
Employer 3 - Both my manager, and the entire management structure saw the results of a small example, pulled me aside and said "do more!". Regardless of my official duties, they allow me incredible latitude to push things as far as it makes sense, as long as it produces results that satisfy others. So far so good.
To sum this up: One place let me build a car but not let it out of the garage. The next place let me build a car, and get it out on the road, but not go faster than 55 mph. The next place let me build it, and take it out on a race track with no limits.
Regardless of technology. Regardless of technological potential. What most often holds back progress, or often outright KILLS it, are people. People with narrow vision, no concern for innovation as it pertains to making real progress, are what build speed bumps. Vision builds roads with few potholes.
No place is perfect. I'm not going to even attempt to say that Employer 3 is perfect. That would be nonsense. But finding the right balance between ideal and tolerable is what makes things work for each person. It's like a girlfriend or boyfriend. You'll never find perfection, but if you can find enough good traits to outweigh the bad ones, it can often work out great.
Each of the three employers had plenty of skilled, intelligent, funny and progressive people. The problem for two of them was a barrier of culture that keeps them from achieving their full potential. I know for certain that most of the people I had worked with, if placed into different environments, would damn near explode with positive results. A suppressed culture suppresses everyone within it. Whether it's by standing up roadblocks, meetings, committees, reviews, forms, forms and more forms, and decisions made by people with absolutely zero understanding of the case being decided, or by the nature of the work itself being limited to one road, rather than a network of roads with unlimited potential, the environment shapes the potential of every employee. The employees become the environment and it becomes them.
All I can suggest is this:
Look for the barriers, the obstacles, the roadblocks, and if you can't remove them, try to work around them. Find a way to get your ideas into action. My manager at Employer 2 did just that, and pressed ahead against incredible push-back and apathy, and refused to give up. I simply drafted behind him enjoyed the opportunity to break out of the assembly line work I was hired to do. If you have a good idea, find others who will listen. Band together and share your ideas and feed off each other's positive views. If you're lucky, that's an easy thing to do. For a lot of people it's a struggle, but don't give up. Do the homework and confirm your beliefs with hard facts and numbers. If you think it will save time and money, be ready to back up your estimates. It's really hard to argue against good numbers. The real people in power live on numbers.
When you run into people at work that just don't get it, move on and find the ones that do.