[HN Gopher] Expectations of professional software engineers ___________________________________________________________________ Expectations of professional software engineers Author : EntICOnc Score : 158 points Date : 2022-10-07 16:53 UTC (3 days ago) (HTM) web link (adamj.eu) (TXT) w3m dump (adamj.eu) | hguant wrote: | I view these less as actionable items, and more as character | hallmarks. No you don't need to actively be making sure you're | doing All The Things by iterating through this every day. Yes | these are things that should be captured by your company's best | practices, and your own professional integrity. | unicornhose wrote: | All good as far as it goes, but not very common in the industry. | Poor management and no mentorship, and this is what you'll get. | | Now what are everyone's expectations of Mike Acton? If someone | sends me an email like this before I'm about to start on a job -- | I just know he must be feeling some pressure. | omega3 wrote: | Having worked in Unity I'd take engineering advice from their top | execs with a grain of salt. | jstimpfle wrote: | This guy in particular has collected some serious credibility. | In the past he's worked at Insomniac Games. He is also credited | for popularizing Data-Oriented Design and has delivered at | least one talk that went viral and that video thumbnail of him | in his red flower shirt has become a meme for a no-bullshit and | requirement-focused engineering approach. Go check him out on | Youtube. | sidewndr46 wrote: | Is this reply sarcasm? | jstimpfle wrote: | How did you get the idea? Not at all, only sharing what is | pretty much facts. | apiqueen wrote: | It would make my life so much easier as a product manager if my | engineers would feel comfortable to question themselves and me | about what is the value of what they are doing . | analog31 wrote: | The questions read like the typical checklist for a phase gate | review, so they shouldn't seem unfamiliar. A more mature business | would formalize them. | ecimio wrote: | I would include automated tests | matai_kolila wrote: | I didn't have time to go over all 50 but I do like #3, "I have | confirmed that someone else can articulate what problem I am | trying to solve." | | Too often I see devs go down some deep rabbit hole to solve a | problem no user has ever had, and I wish they'd have talked to me | first about it. | | But the author of this article could have generalized a lot here, | many of these could be summed up by the (admittedly less | interesting) "I know how to communicate clearly and do so | frequently with my team." | kodah wrote: | I really love these points as a North Star, but these would be | mostly aspirational for teams I've been on. | | I work on a team now where we get huge scopes of work and a | couple people will tear that work down and would answer these | questions as they do so. However, most teams I've been on deal | with far more interrupts than the team I'm on now does. Those | interrupts are lemented but justified by the business and | definitely impact an engineers dedication to a given projects. | Interrupt driven work is a sort of split brain problem that I | think gets in the way of answering these kinds of questions | because it removes the time that an engineer would otherwise | spend entrenching themselves enough to know the answers and | problemscape. | actually_a_dog wrote: | It sounds like you don't think these expectations are | unreasonable in a healthy environment. Is that what you're | getting at? I believe it's possible to hit 50/50, and I think I | personally do (with the caveat that I don't do all of these | things explicitly, every time, on every project), BUT I'm also | on a high performing team in a healthy work environment. | kodah wrote: | I think the expectations are fine. In a sense I actually | judge the engineer less than Mike does according to these | criteria. If you can answer these questions I think it says | more about how your team organizes and accounts for work more | than the diligence and knowledge of a single engineer. | sigstoat wrote: | > with the caveat that I don't do all of these things | explicitly, every time, on every project | | which is totally fine, most of those things don't need to be | done explicitly. (as such they take less time than many | commenters seem to think they would.) | | being able to articulate something doesn't mean that you've | taken the time to do so. just that you've generally thought | about your task enough before starting it that if your boss | asks you that question, you can produce a coherent answer in | a timely fashion. | arolihas wrote: | This is a great resource, thank you! Gives me a lot of actionable | concrete issues to work on. Maybe I'm just very early in my | career or it has to with the subfield I am in (bioinformatics, | machine learning) but I should have been fired 20 times over by | these standards. | kevingadd wrote: | The reality is that in a healthy workplace, you could whiff on | 25-30 of these and not get fired, because a healthy workplace | gives employees guidance and room to grow. Eventually with | enough time in that place you'd be at 40+. Of course, some of | them (like professionalism) are basically non-negotiable. But | nobody starts at 100%. | actually_a_dog wrote: | Let's be honest here, a green junior or intern could easily | whiff on 45+ of these things and not get fired, as long as | they're in a healthy workplace and they have a growth | mindset. I literally tell interns at my company that I | basically expect them to know fuck all, and that their | opportunities at the company are mostly limited by their work | ethic, their willingness to ask questions, and their desire | to accept and incorporate feedback. | nonrandomstring wrote: | This is useful a for a whole lot more than SE. I've started | teaching a Research Methods course this semester and I think I | might hit the students with this list just for giggles. | sanitycheck wrote: | On one hand, well yes, everything mostly makes sense. | | On the other, I can easily imagine the reaction from most project | managers if they'd asked me put together an estimate for fully | achieving all of these on any given project. Some of them would | involve sitting in on business strategy meetings, which is a | pretty far cry from the level of involvement I generally get! | It's sometimes hard to even get hold of representative hardware | to test on. | horsawlarway wrote: | Personally - I don't see a lot of value in this list (I read all | 50 items and watched the video and I regret wasting the time). | | There are certainly some valuable concepts - but the presentation | is fairly incoherent (including the video of the talk he gives) | and not particularly helpful. | | Many of these items are utterly unrelated: Some are fairly | specific to gaming (profiling/memory layout/timing) some are | basic professional expectations (I can schedule my time well). In | neither case is there real advice for people who actually | struggle with some of these areas. | | My item number 51 would be... "I can articulate my point in a | more compelling manner than an incoherent collection of 50 things | I don't like" | vubui wrote: | I think it has a so what problem. It sounds nice but then | so...? I failed to understand what exactly the author wanted to | convince people to do. Expectations - for who? Let's say | someone does exactly this, then failed to actually ship | something that people want then it's as useless as not knowing | the list at all. | isitmadeofglass wrote: | > I failed to understand what exactly the author wanted to | convince people to do. | | He's writing a list as part of his imaginary shower argument | with his boss and coworkers as to why they are all inferior | and he's perfect and why all the problems they are facing are | easily attributed to his list of 50 points of things he feels | he does that they are failing to live up to. | | At least that's my take away. | [deleted] | perrygeo wrote: | I found some value in this list (read it, but didn't watch) but | I agree that 50 unorganized bullet points is too much. I think | they could break it down into 6 or 7 larger themes: | communication, being a good citizen, using a systematic | development process, investing in developer tools, | understanding real world end-user requirements, technical | requirements, and data flows. All good advice, maybe not the | best delivery. | throwaway292939 wrote: | I see it as a list of helpful reminders. It's hard to do | everything on this list perfectly, for example I'd give myself | a B average. | jvanderbot wrote: | I loved the early and often emphasis on communication. | | That gets swept under the rug far too often. | | This list makes it clear that communication (of designs, of | status, of workarounds, etc) is vital for the professional | software engineer. | BlargMcLarg wrote: | Does it? Almost every day we get articles on every existing | medium regarding the importance of communication. Even the | tech circles in 4chan parrot it. Yes, the place known for | anti-social recluses parrots it, too. | | And it's showing. There is so much emphasis on communication, | people started equating quantity to quality. "Just talk more, | that's what great communication is about" wouldn't be an | observation too far from the truth. | | Far too little is invested into researching what makes | quality communication. It's just the same old rational | arguments against rational arguments, day in, day out. For a | field entirely about managing and sharing information, be it | to machines or to people, that's pathetic. | ySocMedia wrote: | eschneider wrote: | Most of the points seem to be 'Do I have situational awareness | of how what I'm doing fits into the bigger picture.' Generally | a good thing to have. | SevenNation wrote: | > I can articulate precisely what problem I am trying to solve. | | It's appropriate to put this one first because it shows up in so | many of the problems that follow. | | Easier said than done when there's a deadline pistol pointing at | your head. You gotta get stuff done. Show progress. Writing any | kind of specification is just a slippery slope to Waterfall, | geez. There's no time of any of that namby-pamby talking to and | watching users BS. They don't know what they want anyway! Real | developers ship!! | wpietri wrote: | Excess time pressure is behind so many problems. It's the thing | I'm always most concerned to manage when I start a new gig. | That said, shipping early and often is one of the best ways to | mitigate excess time pressure, because it helps build trust | between stakeholders and the team. The longer the release | cycle, the more likely it is that business stakeholders will | get antsy and start doing harmful things. | vinay_ys wrote: | Yeah, right! | | "I can articulate precisely what problem I'm trying to solve" | is not just on that person. It is a function of their | collaborators - product/program/engineering managers and other | engineers around them. | | If you are in a culture where it is acceptable to send tasks at | each other without much context, and with harsh deadlines, and | with a perf management system that rewards execution under such | conditions, then you will get precisely the opposite of someone | who can articulate what problem they are trying to solve. | | In fact you will get a culture where asking questions for | deeper 'why' understanding will be seen as disruptive. | i_like_apis wrote: | This is good. It's been a while since I found an article about | software development worth bookmarking. | | I think anyone should be expected to write a simple bug report, | with reproduction steps and expected versus actual result. There | are a lot of people out there who don't do this simple, necessary | task well! | voxl wrote: | Funny that he works at Unity, I can feel the toxicity oozing from | that company just trying to use their product. | osigurdson wrote: | Items 1-11 (+ a few others) are essentially, "show me the ROI (in | $) of the work that you are doing". That is fair but ROI driven | organizations tend to have very little appetite for risk (or tend | to be command and control driven). Sometimes however you can't | connect the dots looking forward; you can only connect them | looking backwards. So, you have to trust that the dots will | somehow connect in your future. You have to trust in something - | your gut, destiny, life, karma, whatever (I might have heard | someone else say this once, not sure...). | [deleted] | didgetmaster wrote: | If you are truly working on something innovative, chances are | that Plan B is already up and running. It is your competitor's | solution that you are trying to replace with a better one. | | For example, my new data management system can also do many | traditional relational database table operations. If you want to | do fast analytics or queries, then it can do it better than the | competition. For basic stuff, other RDBMS solutions will surely | get the job done; but if you want to build a pivot table against | values in a 10M row relational table then this is the tool you | want: https://www.youtube.com/watch?v=2ScBd-71OLQ | rektide wrote: | Having clear wellset expectations is a general life skill of | extreme value. Greatly under-done, at work and in life. | | Interesting cross-over with Mark Burgess's Promise Theory, where | a promise serves somewhat as a single discrete expectation. | 0x445442 wrote: | > I can articulate why my problem is important to solve. | | At this point in the list we start to diverge from what | engineers/developers are allowed to know in the modern | enterprise. Here is where we start to get push back from the | Program/Product managers, Scrum Masters et al. To proceed further | down the list is to remove the added communication channels | between engineering and the business. | szundi wrote: | This guy lost me when I read that I should implement Plan B | first. | perlgeek wrote: | I guess that's inspired by the famous "plan to throw one away | (because you will, anyway), from Freed Brooks if I remember | correctly. | | IMHO it makes sense if Plan B is much simpler, but not as | efficient as Plan A (remember, this is a game developer, | everything is about efficiency). You build Plan B is a | prototype, and could still fall back on it (and iterate on it) | if Plan A fails. | | If Plan B is more complicated than Plan A, doing it first | sounds... dumb. | zerr wrote: | I recall he was advocating for "C with classes" approach. | philosopher1234 wrote: | > 13. I can articulate the hypothesis related to my problem and | how I could falsify it. | | What? | | 1. Logical positivism is not a proven perspective, it's actually | mostly rejected. How do you falsify "I feel angry"? | | 2. We aren't doing science. What's the hypothesis for "I'm adding | a close button" | 87tau wrote: | Here would be my abbreviated list | | 1) Are you solving the problem that someone (your customer / | manager / stakeholder) wants you to solve right now? what makes | you think the thing you're working on is the priority, have you | checked with someone or got convincing data | | 2) Are you taking longer than expected? if yes, why? What's a | practical solution now and for the future so everyone remains | happy? If no, why do you think so? | | 3) Are the people in charge of your future happy with what you've | delivered? How do you know and what's the reason if they're | unhappy? | | 4) If there's a disconnect on any of the points between you and | the stakeholders, what is a practical solution that you can | implement it quickly? | | 5) Are you knowledgeable enough that people can rely on you to | solve their problems in the most practical manner? | ctroein89 wrote: | > 1. I can articulate precisely what problem I am trying to | solve. | | > 6. I have a Plan B in case my solution to my current problem | doesn't work. | | > 9. I can clearly articulate unknowns and risks associated with | my current problem. | | These rules imply one of 3 things about the author: | | * That author only encounters problems that have been fully | solved before | | * The manager gives zero weight or value to discovery | | * The manager expects the whole project to have been fully | specified before starting | | Yikes, that's toxic! I think it's important that engineers have | the mindset of understanding the problem, but that means that | figuring out the problem is part of the work! Which then means | that engineers should definitely have periods where they don't | understand the problem, where they don't have a Plan B yet, and | don't know what the unknowns are, because they can't know what | the solution will be until they've started the work. | nooorofe wrote: | Term "toxic" is toxic by itself. | | Periods when engineer don't understand the problem should be | spent on analysis of the problem domain. "Now I am working on | defining the problem domain" - is an activity to work "I don't | understand the problem" task. During that period probably zero | code will be written. | | > That author only encounters problems that have been fully | solved before | | He doesn't, otherwise there would be no talk about "plan B" and | risks. When you actively write a project code, you should know | that solution is possible. Having plan doesn't mean "problems | have been fully solved before". You may have POC which doesn't | end in resolution, but it should be clear what is POC for and a | failure is possible outcome. | poopnugget wrote: | datagram wrote: | I don't think the rules imply any of that. | | "No one has ever solved this problem before and I'm not sure | where to start" seems like an important unknown/risk to let | your manager/lead know about. Likewise, the backup plan can | just be "we scrap that feature" or "we solve a much simpler | problem". The point is to be deliberate about what you're doing | and communicate potential setbacks. | ChrisMarshallNY wrote: | _> figuring out the problem is part of the work_ | | IME, finding the problem is almost _all_ of the work. | | Once I can reproduce an issue, and trace it to its genesis, | it's as good as solved. | pardon_me wrote: | Exactly. The hardest part about software is deciding how to | implement the tools we have, and not knowing the answer until | we start developing and uncover the true problems we must | solve. A list of small tasks to complete is solvable by AI. | outworlder wrote: | And that's precisely why 'spikes' or 'POCs' exist. It's way | more common to not have all the answers if you are working on | anything remotely interesting. There should be some time to | explore solutions. In even more interesting cases, solving the | unknowns is the entire project. | | It seems that the author has never encountered the "research" | side of R&D. | MajimasEyepatch wrote: | Where does the article imply that seniors don't do research? | How exactly do you expect that anyone can know these things | without doing research? The point of the article is that | juniors jump into the work without doing the research to | figure these things out, while seniors take the time to | figure these things out. Sure, maybe they can do that quickly | based on experience, but I don't think the article implies | that seniors don't do research. | MajimasEyepatch wrote: | This is a strange interpretation. It does not matter whether | you are working on the simplest web page or a brand new problem | that no one has solved before: it is absolutely necessary that | you clearly articulate the problem you are trying to solve. | Even if you're a scientist working in a purely exploratory, | theoretical setting, you still have to be able to articulate | your problem. You may refine that as you go, but if you sit | down to work on something and realize you can't articulate the | problem, the first step is to stop and focus on defining the | problem better. | | Point 1 is a prerequisite to points 6 and 9. But once you're | ready to start actually building a solution, you should | absolutely have an understanding of the risks and a Plan B in | case your solution fails. | | Nowhere in the article does it imply that you can fully | understand a problem without putting in the work. The | difference between juniors and seniors that the article is | highlighting is that juniors will jump into implementation | without knowing these things, while seniors will take time to | do some research and figure these things out first. Usually, if | you're senior, you should also have the experience to do so | quickly, but that's not always possible. | nottorp wrote: | How much would they pay for someone who satisfies all 50 points? | | Where is the company that gives engineers enough freedom to | satisfy all 50 points? | kevingadd wrote: | At the end of the day, the people signing paychecks care more | about their priorities than they do about these 50 points. But | they can be useful to keep in the back of your mind when making | decisions that aren't governed by anyone else. | vsareto wrote: | This list will impede velocity by quite a lot, especially with | coming up with and implementing Plan B's | MajimasEyepatch wrote: | You only implement the Plan B if Plan A fails. Plan B doesn't | have to be elaborate. It can be as simple as, "I'm going to | look into using this third-party service to solve 99% of this | problem, but if it isn't a good fit or it's too expensive, I | think we can put together a home-grown 80% solution in a | couple of sprints." | vlunkr wrote: | One of the points is "I have already implemented my Plan B | in case my solution to my current problem doesn't work." | | So that's not what they're advocating. Though I think | they're 100% wrong on that point, and most managers would | probably think so too. | vinay_ys wrote: | Expecting an engineer to do all of this even when they are at | odds with rest of the execution machinery is simply not | practical. It leads to heroic behaviours and burnout. | | I hope this guy has a complimentary list of 50 things for other | roles. | actually_a_dog wrote: | Which, if any of the list of 50 do you think is unreasonable? I | don't always explicitly do all of these things all the time on | every project, but I'm certainly _capable_ of doing so. For | example, working in backend web dev, I generally don't go into | it thinking explicitly about, say, memory usage, as long as my | monitoring tools are not telling me there's a problem. Of | course, there are exceptions, which is why I said "generally" | (for instance, if I know I'm making a query to the DB that's | going to yield 100k results, I'll definitely be thinking about | memory usage), but I also don't just YOLO it and see if things | crash. | nottorp wrote: | None of them. But all of them combined. And they never are | all part of the same job description; except perhaps in an | organization small enough to not have job descriptions. | actually_a_dog wrote: | I disagree. I think the list of 50 is an entirely | reasonable set of expectations for a senior (or at least | staff+ level) engineer, with the caveat in my previous | comment that not all of these things need to be done | explicitly, every time, on every project. Like another | commenter said, being able to articulate something isn't | the same as explicitly doing it. | | I also realized, I'd put a small asterisk on "I have | recently profiled the performance of my system," as well. I | would expect that an engineer would do at least some | minimal profiling of their code in order to make sure it's | not too slow in itself and doesn't excessively slow down | any calling code, but for the most part, with a running | production system, it's generally safe to assume that | performance is good enough unless you've been shown or told | otherwise. And I think that all still fits into the spirt | of the expectation as well. | ericmcer wrote: | I mean yeah this is great on paper, and applicable for bigger | projects, but for day to day stuff there is no way I'm gonna pull | another engineer in to run through these steps. | | This kinda stuff always reminds me of someone making a PR for | something like a react component that lets you choose a time | zone. It can be a 100 line simple thing or it can be an 800 line | monster with files for typescript types thorough tests, etc. I | prefer the former but I feel the author would expect the latter. | sigstoat wrote: | > for day to day stuff there is no way I'm gonna pull another | engineer in to run through these steps. | | which of those besides #3 requires day-to-day interaction with | another engineer? | | and i'd expect #3 to fall out of sprint planning, or just | talking with your coworkers about your work. | mjw1007 wrote: | His expectations around producing documentation go only as far as | "Think about what documentation or data users need to understand | and use your solution." | | That seems like rather a low bar, compared to items like "I can | articulate how all the data I use is laid out in memory." | | I'd prefer to live in a world where a professional software | engineer was expected to write documentation, and expected to be | competent at it. | feoren wrote: | > I can articulate how all the data I use is laid out in | memory. | | That's not a high bar, it's an arbitrary hoop. It'd be like | saying "I always know which processor cache my variables are | sitting in". In modern languages it may be literally impossible | to look at a block of code and know what's sitting in the heap | vs. on the stack, and the heap is often broken into many | different components only fully understood by the | compiler/interpreter/VM writers. We _want_ to abdicate | responsibility of this kind of memory management to the | interpreter, just like we want to abdicate responsibility for | handling processor cache levels. If you can articulate how all | the data you use is laid out in memory all the time, you are | majorly micro-managing the runtime. | | Agree with the documentation thing though. | strangetortoise wrote: | Not sure if you're familiar with Mike Acton (as mentioned in | the article). One of his key points of focus is data-oriented | design, and that when designing software, ignoring the | architectural realities of the hardware is ignoring one of | your responsibilities as an engineer to deliver performant | software. | | Now, it's possible to argue that writing performant software | is not important. The prevailing modern sentiment definitely | seems to be "The compiler / interpreter takes care of that". | But given his track record of delivering high performant | running software, and the trend in computing towards | sluggishness, I'm trending more and more towards his camp, | than the "don't micro-manage the runtime" camp (which is | starting to feel more and more like a thinly-veiled "I don't | want to have to think about it"). | | Edit: A summary post he wrote as a source https://cellperform | ance.beyond3d.com/articles/2008/03/three-... | dtdynasty wrote: | I don't think it's thinly veiled at all. Some people might | be deluding themselves into thinking they aren't losing | something by abstracting away the intricacies of the | runtime but I imagine most are actively thinking they are | okay with this tradeoff. Instead they are allowed to focus | more on the domain problems and let their users tell them | when it gets to be too slow. Whether it's the right trade | off probably depends on what their goals are. | Agingcoder wrote: | You want to (I do too!) , but the abstraction eventually | leaks (you get unexpected behavior in long running processes | because of gc/libc/kernel issues, or you need very specific | control performance wise, etc) , and you end up having to | know about it. | gnuvince wrote: | > We want to abdicate responsibility of this kind of memory | management to the interpreter, just like we want to abdicate | responsibility for handling processor cache levels. If you | can articulate how all the data you use is laid out in memory | all the time, you are majorly micro-managing the runtime. | | Unfortunately, in practice, it's not possible to be oblivious | of the layout of data in memory if we want to write fast | code. The CPU/memory speed disparity graph [1] shows the new | reality for programmers: the slowest part of a program is | bringing data from RAM into the CPU registers. Fortunately, | modern CPUs have very fast caches that help amortize this | cost and it's the responsibility of the programmer to | organize data to take advantage of that fast hardware--the | compiler cannot do it. That's why two functions, with the | same algorithmic complexity, and which compute the same | result, can have an order of magnitude of difference in | performance between them [2]. The famed sufficiently smart | compiler that can do those transformations does not yet exist | as far as I know. | | [1] https://gameprogrammingpatterns.com/images/data-locality- | cha... [2] https://play.rust- | lang.org/?version=stable&mode=release&edit... | fjfbsufhdvfy wrote: | Knowing how your data is structured in memory is a trivial | exercise for anyone working on a game engine like the author of | this talk. You don't even need to think about it. The layout of | every data structure used by the engine is known and chances | are you have implemented a bunch of them yourself. | jesse__ wrote: | FWIW, any reasonably competent engine programmer consideres | | "I can articulate how all the data I use is laid out in memory" | | super basic. It's something that you just know by | instinct/reflex at any time. | [deleted] | mkl95 wrote: | > Say it's Wednesday, you have a project due on Friday, and you | get some new task dropped on your lap. You think "I'll do the new | thing now, and make up the time for the original task by | Friday"... mistake! Communicate about the conflict on Wednesday. | Your product manager will help manage the timing and risk. | | My product manager was fired a while ago and no one has replaced | him formally yet. A C-level guy is micromanaging my team's work | now and he sucks at it. I really miss being able to push back on | these conflicts. | eschneider wrote: | Assuming (yeah, I know...) new task is 'critical, it's usually | enough to go 'We can do that, but it'll push X out. Is that | ok?' And if it's not ok, reasonable management will either pick | a priority or get you some help to get them both done on time. | If you're often getting feedback that you 'need to get them | both done by Friday.' you might want to evaluate if your | management has their act together. | Test0129 wrote: | A little early in the week for a list of things written by an | executive about what engineers should do. ___________________________________________________________________ (page generated 2022-10-10 23:00 UTC)