2. Your managers aren't perfect people, but their livelihood is in your hands. It's incredibly stressful to be a manager, so try to have compassion and empathy for the position they're in. They have to explain to the executive team the progress you're making, and if no progress is being made, they take the blame.
3. If you can't connect the dots between what you're doing on a daily basis, and the overall trajectory of the company, then something's wrong. There's a broken connection somewhere, and no one other than you is going to realize it. Speak up if you don't think what you're doing is useful.
My job is to write code. Nobody is interested in my opinions about business problems.
I have to be aware, of course. I propose code to write some times, and I have to have some idea that it is a vaguely practical thing in business terms. I want to write code in groovy system A but mundane system B has a better chance of success then my desire for system A goes by the wayside.
But it is my job to write code. That is all.
> Code is an expression of a business solution
At some very high level that may be true. The person who makes the final decision on what code I work on (who happens to be the brother of the CEO, poor fellow!) may have to consider "business requirements", but only lightly. We implement what we are told to implement. I am a worker.
> The meat of any application is in the business rules it enables and enforces
No. That is crazy, and very high level. Where I work the "meat" is tight loops, memory allocation, network latency, data reliability....
> To be an effective engineer
I have not been to Engineering School. I am not an engineer. Engineers are people who have been to engineering school. I am a computer programmer working on low level iOS plumbing. "Engineer"? Huh! Putting on airs, I do not do that.
> To be an effective engineer, you need to have a solid understanding of how the code you're writing solves the needs of the company.
To be an effective computer programmer I have to understand the requirements that my firm has of the hardware. I can give very good advice about whether the hardware can be persuaded to do what they want. I cannot give (good or valuable) business advice about whether the things the firm wants are the correct things.
I understand a lot of people here really want to be successful "founders" and come at it from an engineering perspective. Very good. It is different for them than for me.
A lot of us (at least one of us...) here are workers who want to do a job, for a salary. Happy to work for one of those founders if the money is right. (I have to make a business decision about who I work for, in the best scenario. In my case I took what I could get, and got lucky - thank you universe!) I am not qualified (I am actually, another story) and am not employed to give business advice, or to care. I am more valuable to everybody if I stick to my knitting.
My point is that the code, and all it’s material constructs that you pointed out (loops, allocation etc), do not exist apart from the business, because it’s the only reason those things exist in the first place. I’m not sure how much experience you have, but if you have enough, you should know how easy it is for an engineering team to become disconnected with the goals of the company. I’ve seen devs waste literal months on things that, had the primary stakeholders known about it, they’d never have agreed to.
Now, you could look at that situation and envy the job security. Sure you could just see yourself as just a cog in the machine, with no responsibility whatsoever in wondering why the fuck you’re doing what you’re doing. But I certainly would not hire you.
But there are lots, and LOTS of people who would, and want EXACTLY THAT. They want people to be told what to do, and do it, and not question why.
I see it in the same way I see security. A company is only as secure as its most vulnerable employee, so everyone must be vigilant about their own personal security practices. Same goes for "product security" - ensuring that the micro-actions taken by each IC reflect the company's objectives. It's an all-hands-on-deck practice.
What else is that true for? All the way down. Biology, chemistry, physics, quantum physics.... All that we work on exists in those contexts too. Yet we just swim in the sea and ignore the water. The same is true of business matters. They are the ocean I swim in
> I’ve seen devs waste literal months on things that, had the primary stakeholders known about it, they’d never have agreed to.
That is poor communication. Communication is a necessary skill for all cooperative endeavours.
I am a cog in a machine. Unusually for some one in my position I actually have a good understanding of business (studied it for years) and I prefer computer programming. Having computer programmers stick their oar in over financial matters, unasked, is not good. So I do not do it. I know my place, I like my place.
> That is poor communication.
…yes…as I said, there needs to be a tight chain of command with clear directives at each layer, in other words, good communication. When there is a break in the communication chain, the only thing you can rely on is an individual developers judgement.