Ok, I voted for the one that gives me the biggest payoff, but for one other option I would suggest "All of the above" because I figured out I could only select one option and most of those make me happy when they happen.
When you tell the powers that be, who are giving up on an idea because they've failed at it for several years, to allow you to take a shot at it... and in two month, you have a functional system with far better performance than they were hoping/looking for.
When the company writes a press release/article regarding something you designed/wrote and the feedback in 100% phenomenal.
When you find out that the system you designed/wrote resulted in a large number of license upgrades to use said system.
I actually get a low when the project gets wrapped up. I feel a little lost on what to do next, unless there has been another project that I've also been working on at the same time.
I have a great time building, until that 98% mark which for me is just small punch list stuff to finish up, I find myself slowing down or not really wanting to finish. one of my previous jobs, it was one app that grew over 20 years: expanding, and rewriting as time or requirements changed. there was really never a finish date, I think I got too used to that.
You know you're getting old when you realise that that's not the way things are done "these days" and you wonder why the hell not.
I had to do it more than once. When working on 100+ people projects on ECUs you often are tasked with developing code before one or more of this conditions verifies:
1) The board is ready;
2) The bootloader is written;
3) The board actually boots up (Lifecycle module);
4) Other dependencies are not met (i.e. missing CAN communication, missing OS, RTOS tasks still to be defined).
And most of the times there are no emulators, code must be downloaded to the hardware and the hw must be correctly intiialized before even thinking of running a debugger - debugger which half of the times fsck up the timings of the firmware and causes unexpected behaviors, by the way.
GCS d--(d-) s-/++ a C++++ U+++ P- L+@ E-- W++ N+ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- r+++ y+++* Weapons extension: ma- k++ F+2 X
I never get tired of the feeling of triumph when something complicated works right the first time or a difficult task is accomplished. (smarter IDE's these days certainly help)
Other addicting feel-good moments: 0: User recognition - Yesterday on a remote/phone call, the end users invited me to lunch...they are only 90 minutes away and on the coast...I'll likely be taking them up on this offer very soon! 1: Reaping the benefits of longevity - This relates mainly to 22+ years with the same company. The flagship product (lob desktop app) first released 20 years ago is still generating revenue. I've been the only developer here for the last 15 years, so 99% of the code is mine. I understand the code, the business logic, and the database structure and how it all interacts. I also understand the ramifications of making changes and how best to respond to change requests or bug fixes. Tried and true objects/designs form the foundation for future products. I'm lazy, but hopefully clever, so one of the primary goals is always reuse. Saving time means more time doing more interesting things. 2: Using my own software - Password App, FTP Client, assorted database utilities (upsize, downsize, copy, backup, restore, migrate, scripting), custom modules deployment toolchain, color picker, etc...basically anything I have built to make my job easier. If I need to change it, I've got the source code. A good example would be generating a database script file for a customer that saves hours of setup time. Another would be identifying a bug on a remote with an end user and be able to find and fix a bug, (if it's simple) compile, sign, seal, deliver, download, and update an executable/library in less than 5 minutes, all while holding a conversation about their kids/grandkids/spouses. Good tools will make you look good. 2a: Actually using the software we sell (dogfooding) - I provide frontline training/support for everything I write, usually these days using remote desktop. Knowing that I will actually have to use a screen/feature means that I design everything with the user (and a reduction in keystrokes) in mind. It's a win/win and also means that support features are built in. 3: Appreciating the 'magic' of what we do...make something out of nothing and charge people to test it!
I still enjoy doing the end-to-end development and would probably work every weekend (more productive w/fewer distractions) and take fewer vacations if it weren't up to my wife! Indeed, there are many weekends, dripping sweat while doing yard chores, that I look forward to Monday! That said, the thing I like most about this job is that every day it seems to get easier as every day builds on all the days before. Maybe my problem solving skills have improved, or maybe the available resources and knowledge base has improved, probably both, but I'm not 'stuck' as much as I used to be and I tend to get things right the first time more often than not.
"Go forth into the source" - Neal Morse
"Hope is contagious"
I need a good dopamine hit a lot more often than the compile/run/test cycle would provide.
And the frustration is that I use a TON of different IDEs all of which differ ever so slightly in how their autocomplete works. NPP (Notepad++) being awesome, but one of the worse, because I often replicate data, and edit one piece on every line, and it keeps auto suggesting the wrong stuff, and gets in the way.
the most satisfying moments are, when I need to step into an older library of mine, and see it's code after years again and it _still_ feels like "code I would write exactly the way it is".
When I implemented classes that still feel right, when a new feature can be added without any trouble, when all still looks like it is in its correct place.
The best satisfaction is seeing your own work still be alive.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
Rating helpful answers is nice, but saying thanks can be even nicer.