11 ms·
Ask HN: When have you taken a decision in code outside your domain of expertise?
I'm writing a book about the role of software developers in the global economy.
One of the book's themes is that developers hold a strange kind of power: we get to make decisions in code that affect end-users but only other developers (and sometimes not even then) can really hold that code to account before it goes into production. Seemingly mundane decisions in code can have profound consequences.
I'm gathering stories from people who've had to take decisions like this and especially where it was in a domain for which they had no experience.
I'd love to hear from people on HN who have stories to share. I'm also interested in hearing from people who dispute that this is even a thing.
- BossingAround 7y agoFrom my experience, it's more of an accident. For example, one senior backend developer was introducing new feature, and to do that, he created a POC UI. It looked fine. At the time, the project had very little UI, and it was focused more on the developers, so nobody would use the UI a lot. Little did he know the POC UI would not only ship, but become de-facto the face of the product for the next 6 years, since when other UI pages were added, they'd take his simpler design. After a while, pretty much all the UI followed his design.
- Sharlin 7y agoAh, good old path dependency.
- Aeolun 7y agoNothing more permanent than a temporary solution eh?
- aitchnyu 7y agoI would award it The Best UI for being so usable it spread like a weed. I trained juniors fresh out of college who self-learned perfect web UIs in Bootstrap. But when they use custom design (based on Bootstrap) I discover a handful of bugs in minutes. Some design changes seem fine to everybody else but causes your burdens to multiply.
- kazinator 7y agoSo basically, the proof-of-concept UI proved its concept.
- contingencies 7y agoPerhaps in our modern environment it is quite rational to be more fundamentally against the notion of well delineated domains of expertise. All should be open to questioning, in particular from fresh perspectives honed in alternate experience. Everything should be questioned: perhaps not in every project, but at least in each generation. It went as an unspoken, unquestionable assumption that telephony was the right model for data networking. - Van Jacobson There are lots of "old and fundamental" ideas that are not good anymore, if they ever were. - Alan Kay (2016) Living in the present: man, you're just out of it. - Alan Kay (2017) ... via http://github.com/globalcitizen/taoup http://github.com/globalcitizen/taoup
- mprev 7y agoI can see benefits to getting input from outside your of area of expertise but what you’re describing feels like the attitude that led to Theranos. How do you avoid ending up in a Dunning Kruger situation?
- contingencies 7y agoRegarding Theranos, I think we can all agree that the worst capitalist excesses are the unique products of an excess of unchecked greed and incompetence at multiple levels and have relatively little to do with personal efforts or domain expertise. Dunning Kruger, IMHO, is a straw man / false dichotomy. Sure, none of us are perfect, but if you disable your focus by worrying unhealthily about perception by others and where you line up, or if you are ultimately some sort of imposter, then you've missed the boat by definition. The old story of 99% perspiration, enough personability to acquire funding and at least reasonably effectively manage others, and the resulting chain of stubborn achievement will get you almost anywhere... just come up for breath now and then and check you're not failing versus any competition, and/or if you're going blue ocean/greenfield and having doubts make sure people you trust can reassure you you're not completely insane, or the financials are secure enough to justify an onward march.
- mprev 7y agoSo, if you just have enough pluck and funding then you can do anything? Years, if not centuries, of learning and specialism be damned, right?
- xiphias2 7y agohttps://www.lucidchart.com/techblog/2015/08/31/the-worst-mistake-of-computer-science/ https://www.lucidchart.com/techblog/2015/08/31/the-worst-mis...
- speedplane 7y agoI had to add a search engine to an app and I didn't know much about search engines. But whatever, it had to be done and I was the one to do it. So, you educate yourself. You read about all the options, pros/cons, and try to anticipate future needs. Switching search engines isn't quite as difficult as databases, but it's hard, so I knew it was a big decision to make. After learning about the subject, weighing the options, I made a decision. Looking back, it was still the best decision. The moral of this story is that if you're tasked to do something outside your expertise, you make it your expertise.
- LeonM 7y ago>The moral of this story is that if you're tasked to do something outside your expertise, you make it your expertise. I don't think the OP is talking about learning some search engine, library or programming language. With 'outside of your expertise', he meant outside of programming. Say you are writing some medical software that has to diagnose patient based on some inputs. You, as a programmer, are not a doctor and you can't "make" it your expertise within the time constraints of the project.
- Drdrdrq 7y agoStill, the rule is the same - you make it your expertise. You can't competently develop something unless you know how it will be used. > Say you are writing some medical software that has to diagnose patient based on some inputs. You, as a programmer, are not a doctor and you can't "make" it your expertise within the time constraints of the project. Either you need to partner with someone who knows the domain (a doctor) and discuss every detail with them, or you have lots of learning to do. :)
- LeonM 7y ago> Either you need to partner with someone who knows the domain (a doctor) and discuss every detail with them, or you have lots of learning to do. :) Right, so your answer from before wasn't correct. And sure, if you give me 8 years I can do a medical study and make the expertise my own, but in reality there is not a single customer on the planet who is willing to wait 8 years and pay millions for some programmers to become medical professionals.
- arendtio 7y agoProbably not exactly what you are looking for but the topic reminds me of the cookie expire date. About 15 years ago I learned about cookies and their expiry date. At the time it was totally up to you as a developer if you wanted to have a login that lasted 10 minutes or three years. While relevant for security, it was just a number you had to define. So it didn't feel like a big thing. When I learned about concepts like 'remember me' I was a bit surprised, as in my world it was just about increasing the number for the cookie lifetime. In most cases, that is not entirely true as the modern 'remember me' implementations are more complex (e.g. to support re-authentication for modification of data), but the core principle is still the same (using a long living cookie for authentication). So what was just a simple number back then, became a complex topic with legal implications nowadays.
- ape4 7y agoThat's a decision I have made without a spec many times.
- altitudinous 7y agoHmm, if I am an expert in a domain, then there is no decision to be made - it is obvious what the right answer is to everything, you don't have a decision to make - there is no communication to others. All decisions are outside my domain of expertise! The outcome of these decisions are usually compromises based on the needs of a stakeholder, manager or the least stable third party.
- lugg 7y agoSpoken like someone at peak experience.. Real experts have nothing but questions about their own assumptions.
- AYBABTME 7y ago"Real experts do $XYZ" where XYZ is your opinion.
- deathanatos 7y agoWhile the OP may have inadvertently committed a "No True Scotsman!", I think he's nonetheless correct: I think experience often comes with a better appreciation of what's out there, what's still unknown to you. Before, you might have taken X somewhat for granted, but if you delve into and research X, you learn it's a complex interaction of A, B and C; now you have 3 things you're taking for granted / need to learn. A fair number of people have felt stupider after learning, which is of course the opposite of how it should be. Imagine having never seen the inside of a modern car hood, and you open it for the first time. Perhaps all you need to do is "change the battery" (simple, right? You've changed the battery in other things before) and upon seeing the inside of the hood for the first time, one might reasonably be overwhelmed by the amount of stuff crammed inside there. Questioning your own assumptions, I think, falls out of repeatedly learning that often things are not simple, and the experience making your own mistakes and getting burned: it teaches you when to proceed (you don't want the project to get bogged down with "analysis paralysis"), but with caution and the knowledge that you made an assumption. (Whereas a less experienced person might not realize they made the assumption at all.) I would also point to the Impostor Syndrome[1] as a sort-of evidence of that, though it's certainly possible for someone to be an expert and not feel that way. [1]: https://en.wikipedia.org/wiki/Impostor_syndrome https://en.wikipedia.org/wiki/Impostor_syndrome
- lugg 7y agoI think a lot of those are hard to see and you're going to have a hard time tracking them down from the horses mouth. Youll have a better time looking at the symptoms and tracing back to the source.
- mattlondon 7y agoThis happens all the time I've found, particularly in "agile" processes. You are coding away implementing something and realise there is some corner-case or edge-condition that was not considered in the original design and/or UX spec. Stuff that only becomes obvious once you are staring at the code you've just written and are thinking "What should we do if this is null?" So you unilaterally implement something to handle that condition. Especially in agile projects with tight deadlines and the idea of continual refactoring etc, rather than block further work on that feature while you wait for the product owner/business analysts/UX team/etc to come up with an answer and get back to you, you check-in your "best guess" implementation and move on, with a TODO or bug left open to revisit it. A lot of the time (maybe 75%+ in my experience) the developer's instinct tends to hang around as the final solution, even if the developer is not an expert in the context of the users of the application they are writing (this is rare in my experience - generally developers are developers, and not likely to coincidentally be experts in the subject area of the application's use cases unless it is some niche areas - e.g. people writing software for surgery robots are probably also unlikely to be expert surgeons too I would imagine? Not impossible, but I'd want people to be an expert in surgery robot programming, or an expert in surgery and not a half-arsed kinda-ok-done-a-bit-before level of skill in either area!!)
- lettergram 7y agoI had an interesting case a few years back... I was supposed to follow the spec exactly. However, in all the UI/UX diagrams myself and team were given, there was no “close window” or “back buttons”. This included things like pop up notifications. I went ahead and implemented it anyway. Then sent them to the design team to ask if I should remove (took under an hour of work). I was later reprimanded for not following the spec, BUT they kept my implementation and design. This is one experience that sticks out because I was reprimanded. However, I’d say every project I’ve been on has been at least 10% of the the final project designed & implemented by engineers on the spot. Beyond UI design decisions engineering can have a major impact on UX. Every single function can make-or-break the experience. That’s why we, as engineers, wield a lot of power.
- Faaak 7y ago
- Insanity 7y agoThat always happens. You work on something new, so it is outside your expertise. Then you learn and it becomes expertise. :)
- astazangasta 7y agoPretty much all of the code I write is outside of my domain of expertise; my training is as a biologist. I have a computational background only as a result of my own (lifelong) amateur interest. This is the case for most people in biology doing computational work, since there are not many good programs for integrating study of biology and computing (despite the fact that biology is now 100% dependent on computing and statistics to understand experimental results). As a result I ended up taking on the task of creating software infrastructure to support biology work and fill in these holes. This means I'm creating applications from the ground up, handling every aspect of it - front end, back end, authorization, calculation, storage, deployment, etc. I have zero training in any of these things, which is sometimes harrowing. I make the best choices I can, but ultimately I think I'm pretty hampered by my limited understanding of the available methods. I.e., I can write CSS, but I don't know how to write a grid layout engine using flex. I have read some Bruce Schneier books, but I don't know how to design or audit login protocols. I at some point learned how to use a relational database but don't know all the fancy new map/reduce type datastores that are available that might be more appropriate to my work. Etc. I suspect that if you look in any domain outside of computing, you'll find people like me who are writing code by making things work without much specific training.
- sramam 7y agoSpeaking from an end-user experience POV: When I first switched to a mac from windows more than a decade ago, the instant-on feature was one of the most delightful experiences. I have often wondered what the cost of not having that on Windows meant to the world - in lost productivity and green-house gas emissions.
- Dowwie 7y agoI recommend you focus on the management of technology rather than the mythical powers of software developers
- bjornlouser 7y agoWorking title “Over-Under: how the tech industry gambles by overpromising and underdelivering, sometimes with disastrous results.”
- swalsh 7y agoWhen I write engines that implement business rules, I NEVER just "take the liberty". If it's not in the spec, then I either get clarification, or I throw an exception. In my opinion it's better for the program to fail.
- kstenerud 7y agoThe rule of thumb is: Describe the problem, ask for clarification, offer a default solution. Most often, people just won't be interested in the problem, and will ignore you, hoping you and the problem go away, at which point your default solution wins and is documented. But every now and then, it'll set alarm bells ringing up and down the chain of command, and THAT is why you bring it up. Of course it's also important to get a feel for what kinds of issues should be brought up, and what issues should just be quietly solved. This skill is half-technical, half-political, and comes with experience.
- TravHatesMe 7y ago> and what issues should just be quietly solved As a pedant, it sometimes makes me uncomfortable to make these decisions "quietly". While I wholeheartedly agree that this is an important skill for all developers, it begs the question: Why should the dev be responsible for deciding when an issue needs to be brought up? Why should the dev be making these quiet decisions, is this not evidence of incomplete requirements? There should be protocol here instead of relying on the dev's subjective sense and opinion. Generally speaking, I feel like this goes outside the bounds of the developer's responsibility. Not every dev has honed this skill; it could be dangerous. I would choose to err on the side of caution and apply your rule of thumb above in almost all situations.
- kstenerud 7y agoYes, it's not ideal, it could be dangerous, someone could launch nuclear missiles by mistake. But the reality is that we live in an imperfect world, where imperfect things can and do happen all the time, and we have to deal with them. You can't have a rule for everything; when you do, nothing can get done because the rule makers can't anticipate everything, and often get the things they DID think about wrong (rule making is remarkably similar to program design, with the same drawbacks and limitations). So our imperfect world demands that we exercise our own judgment in deciding what to do. If you don't trust your developer's judgment, you shouldn't put them in charge of things that can cause a lot of damage. The alternative is a rule for everything, which is guaranteed to collapse under its own bureaucratic weight.
- daneyh 7y agoAs someone who works in capital markets and seeing more and more power moving to the dev, I totally gel with this theme. Sounds like a really good idea for a book. Anyway that I can follow along from home....release/blog?
- hyporthogon 7y agoOn the business logic side, speaking mainly from experience in enterprise software consulting (and some related research work): the domain is often complex enough, and the knowledge of how the business actually works (as opposed to what your TOGAF/Zachman diagrams tell you) is tacit and distributed enough, that the code you're writing is often the first time that everything in a particular process/subdomain has been made explicit. (This is especially true during 'digital transformation' at e.g. old manufacturing companies, where individual IT systems have been pretty nicely decoupled at a technical level and work together only via people systems.) In these situations, certain 'core' parts of the code quickly become the only accurate spec. (Whether or not it's worth updating the spec docs is a management decision. But the test scripts will pass if the code is correct, and under sufficient time and money pressure etc..) Other developers then treat these 'core' parts of the code (usually some fairly high-level classes, but usually something more concrete than an interface) as the true documentation of the business requirements. If the company respects developers enough, this means that the developers that worked on those 'core' bits of code are also treated as domain experts in future business discussions. On the purely technical side: sheesh, how much heat is generated by horrifyingly algorithmically inefficient or vastly I/O-wasteful or just redundant design (for instance religious/unnecessary use of immediate-mode GUI) -- stuff that quite possibly the IT managers don't care about at all (because of e.g. cheap horizontal scaling and inadequate measures of software project success)? The heat is bad for ecological reasons (locally at least), but also intrinsically (why are you destroying information, O Information Worker?? -- and again e.g. Toffoli gates fix this only locally). Based on code I've seen and, sadly, written (laziness, time pressure and all that) -- there must be many, many orders of magnitude of unnecessary heat/information-destruction happening because of purely technical decisions that on-the-ground developers (not even architects/designers, I mean the people that write the stuff that gets compiled/interpreted) make. @OP if you know some way of measuring this I'd love to hear more.
- cjfd 7y agoAt my previous job I wrote a quotation wizard that customers could use to get quotes. They could select what options they wanted, what kind of maintenance contract and for how many work places and that kind of thing. In the end the quotation wizard would calculate how much this would cost. For the bigger decisions I would consult the sales person but I also made quite a few of the smaller decisions myself. It did turn out that some of the things that I had decided were not that much according to how the sales process actually would go in practice. In particular regarding maintenance contracts. For instance, my quotation wizard would allow a maintenance contract to start at any date while in practice they always start at the beginning of the month.
- TeMPOraL 7y ago> For instance, my quotation wizard would allow a maintenance contract to start at any date while in practice they always start at the beginning of the month. I'd say you made the right call; in my experience, a statement like "in practice they always start at the beginning of the month" is, in practice, quickly followed by "except when they don't".
- travisjungroth 7y agoYeah, in my opinion people often enforce business logic way too strictly. My rule of thumb is “If your boss told you to, would you?” If yes, the data model should support it.
- rb808 7y ago> we get to make decisions in code that affect end-users but only other developers can really hold that code to account before it goes into production. Honestly if that is in an important product then there is a serious management problem. Its also another reason why devs usually specialize in an industry eg healthcare, aeronautics, robotics.
- maxxxxx 7y agoI see that all the time with internal systems. Let's say the devs didn't add an option to export data a file. This omission can later on trigger other departments to create very expensive workarounds but due to internal organization/politics it's almost impossible to change the original system to add an export option. Especially with new stuff often nobody in the organization has any expertise so it's common that the devs take a first cut at the problem. Another common thing is that even if the devs ask for clarification they get none but the deadline still ticks so you just take your best guess.
- tootie 7y agoI work in the digital agency space and have had projects across a huge variety of domains (ecommm, finance, health care, retail) and different types of deliverables including web, mobile, kiosks, IoT or VR. Anytime a developer on my team had the power to deliver something without checks and balances, it's a red flag. We always determine the expected behavior before writing code and always check that behavior before delivery by at least one non-coder and usually more than one. A decision in code that affects the experience is always a bug and it usually gets noticed before anyone sees it. So, I'm honestly not familiar with the situation you're describing.
- mistrial9 7y agoThis is an interesting premise, but .. in many economically-driven situations, a programmer is a team member, who then has a technical lead, who then has a project or product manager, who then answers to management via objectives. The details of the code are serious, but within a context.. because basically, economic activity can be very social, and also rule-based. This makes the problem different.. instead of a coder directly writing an IF-THEN sort of decision, intended outcomes of code behavior are controlled .. BUT if the game rules are such that deception or more often, exerting control over others, is profitable, then a very powerful system is being built to execute a morally-ill process. There are many, many divergent cases, however this sequence is very much at the core of quite a lot of economically-driven programming IMO.
- microcolonel 7y agoSometimes, maybe rarely, the software people are the only ones who have a different enough take on things to do something productive, even if they do not start out as experts.
- kissgyorgy 7y agoAlmost every day I guess? I mean writing new code always needs seemingly subtle decisions which will affect users sooner or later.
- hayksaakian 7y agoLook at the series of articles titled "falsehoods programmers believe in X". Those articles exist because someone at some point made an intuitive assumption about how the world works, which was convenient at the time but eventually ended up biting them in the back side.
- notjustanymike 7y agoI'm a UI developer who specializes in designing and developing tooling for SASS products. My last company was in ad tech, and our UI was for setting up ad campaigns. A big campaign consisted of 1 campaign, 30 line items, 900 tactics, and 2,000 creative assets. We offered managed service, meaning the account managers were in house and I could observe them work. When you're working with quantities like this, every UI choice is hit by a multiplier equivalent to the campaign size. My favorite was a request for table sorting. Makes sense, users want to sort 2,000 creative assets, and sorting is something every UI should have However, asking why they're sorting revealed that they were trying to identify "orphan creatives", assets which had no assigned tactic. They'd open each creative in a new tab, and assign it a tactic. Also not a big deal, until you multiply that action by 2,000. They'd also need to spot check the assets to ensure they weren't accidentally assigned to incorrect tactics, a feature that no one thought to request. Ultimately, the request from our AMs and Product Management was: "Please add sorting to tables." What I ended up building took over a week, and took the shape of a nested folder browser that allowed bulk actions on multiple entries. All because of a sort request that was hiding an issue. So what was the impact? We had lots of large campaigns, which could take up to two stressful days to set up. The new tool minimized errors and took at most an hour (thanks to some smart generator tools I added later on). We had 5 full time technical account managers who went from extremely stressed during Christmas to fairly calm. Errors decreased, resulting in better campaigns. One thing remained, and that was the muscle memory senior account managers had developed for setting things up incrementally. I learned that when you build a tool people use for hours a day, every small task is important. The motions embed themselves in a user's brain. The mistakes or inefficiencies of a UI, seemingly insignificant during development, can become someone else's rote action, stressor, and even source of unhappiness. I don't affect the global economy, but questioning a sort feature made five of my coworkers happier.
- Drdrdrq 7y agoGreat story! It is incredible what kind of impact a competent developer can have if they are given the chance and if they understand the problems users are having. A little automation can eliminate majority of repetitive and mundane work of users, leaving them time and energy to cope with more important aspects of their jobs. Everyone wins, including the company customers.
- bjourne 7y agoEvery single damn morning when I have to decide on what clothes to wear.
- Drdrdrq 7y agoAlways buy multiple sets of clothes then wear them the whole month. This way you only need to make a decision on first of the month. :)
- z3t4 7y agoI can't remember any time where I made a "buisness" decision without being the customer myself or asking the customer. Even when I was the domain expert.
- rhacker 7y agoI think I'm less interested in those decisions having an effect on the global economy and more interested in the effects (a person dying because of a poorly thought out condition, a food delivery person that gets paid less BECAUSE of a large tip, the decision to NOT mask for passwords and its effects). Maybe that _is_ what you mean by global economy, but that is probably more interesting.
- unnouinceput 7y agoMy power? Total access to entire VISA and Mastercard databases of real life citizens credit cards/debit cards. The US company I wrote an entire solution (not just a simple application) also had a part where processing payments was a requirement. Read the user CC, take his credentials, put it in database, start transaction pre-authorization process and later finalization. So to protect the user data from prying eyes I've encrypted the CC data that was read by the magnetic card reader. But for proof of concept I used a simple encryption scheme, which was never meant to be used in production. Countless mails were exchanged between me and the manager regarding the encryption scheme, to upgrade to a modern one, like once per month. Nevertheless this weak encryption entered the production despite my many, countless by now, warnings. Eventually things fallen apart between the upper management of the company and my manager and civil suit ensued. In the end, FBI was involved too and I had to write a affidavit to them regarding this. Offered all my mail exchanges to them which proved that while I was not an US citizen, I had more privacy concerns then the usual US citizen and businessman. Dunno what happened in the end, as I exited the project around 2014, but looking at their site it seems that my code is still in production. Talking about why so many holes and security fails happens, I know first hand how "careful" the average US manager is with sensitive data.
- epberry 7y agoHow often does an average US manager deal with a civil suit and the FBI?
- unnouinceput 7y agono idea. my experience was this one only in 10+ years of freelancing
- RantyDave 7y agoIf (relevant) decisions are made and make it into production, then it's a management failing. Specifically one of testing since at that point (at least) you should know what the system _should_ be doing. Of course, I'm in management utopia la-la land here and, in practice, if nobody objects then it goes in and stays. The very high majority of the time this is fine and has no impact, but every now and then someone decides it's OK to only read the angle of attack from one sensor and ....
- imauld 7y agoEvery decision I make in code is outside my domain of expertise
- schoen 7y ago> I'm also interested in hearing from people who dispute that this is even a thing. My intuition is that it's definitely a thing, but I appreciate that you're engaging with this question! The first argument that I can think of on the other side is this: Systems always effectively make decisions about how to handle every case, even if the rules about how to handle some cases are tacit, implicit, ambiguous, unacknowledged, disputed, or typically punted to some other system. Someone might be mad at a programmer for explicitly handling some situation that had previously not been addressed explicitly (or just skeptical or curious about whether the programmer did a good job), but the programmer's solution might not be worse or a more inappropriate exercise of power or judgment than whatever was happening before. This ties in to a lot of other issues about formalizing procedures and interactions. You might want to look at James C. Scott's Seeing Like a State and perhaps Michael Polanyi's Personal Knowledge for examples of people who are skeptical about doing this -- but I'm sure there's another side there.
- cosmie 7y agoNot directly as a developer, but I've wrangled with this a few different times. The most impactful: I was standing up an analytics function at a growing company. There were several internal systems that had been organically created to handle different parts of the companies internal processes, with little structural support in the form of project or program management. Each system was developed by a single, but different, developer. The developers knew their systems really well, but there was little formal documentation on anything. As part of creating an analytics/BI function, I had to start digging into the data models of the different systems and ETL'ing the data into a data warehouse, and was the first one outside of the initial developer to really dig into the databases for their systems. Each developer used company terminology for their entities that made it relatively easy to intuit the data model. But each one had been left to interpret business needs and definitions themselves, and had done so differently. And neither one of them matched up to how the actual business users defined such things/processes, or presumed the software was defining them. Yet because they were using the same terms, each developer was presuming/projecting their implementation logic for a given process or entity onto the other system, without actually confirming. I spent well over a year finding and having inconsistencies corrected, and getting system processes aligned with what the business actually expected to be happening. By the end of it, we improved our production efficiency[1] by about 30-40%, which had previously been getting silently lost in the void as the two systems would have subtly incompatible definitions of what was valid and what wasn't. Funny enough, the primary value that came out of the analytics and BI team I stood up wasn't the actual analytics work, but rather the operational discipline and system refactoring that was necessary as a prerequisite to support the analytics. [1] What was being produced was digital products, not physical. And there wasn't previously any end-to-end analytics in place, so it was non-obvious that stuff was getting lost in the mix.
- tempodox 7y agoWhat a funny question to ask around here. For true HNers, there is no such thing as “outside their domain of expertise”. Witness the discussions in this very thread.