One cost engineers and product managers don't consider
firstround.com
firstround.com
Oh, man.
When it comes to my natural reaction to this, the words 'strong and visceral' doesn't even do justice.
It took me a really long time to understand why I had such a deep-seated loathing for phrases like that. Think of some absurd scenario where someone asks you to cause harm to yourself, so they can benefit in some way, and that's how I would respond. I basically translated these requests to something like, "can't you just shoot yourself in the foot, so I can sell your toes?" and reacted accordingly.
This post provides some good examples -- explained in a much more objective and rational manner than I've been able to -- of the cost, and why this bothered me so much. In general though, if engineers have to spend a lot of time mitigating "can't you just...?" then I think it may point to a more systemic problem in the organization. Namely, the business units are so disconnected from engineering they don't even realize the costs of what they're asking for, and the engineers are so disconnected that they reap zero benefit from whatever business goal is going to be accomplished by this.
I'm actually okay with shooting myself in the foot to sell my toes every once in awhile. I just don't want to do it if everyone else is going to make money from selling my toes except me, and they don't care about giving me time to rebuild my foot afterwards.
In software you get this at all levels, including in the freelance/consulting world - people have no clue of the costs of what they're asking for so when they can't even make bad guesses, they go with "how hard would it be..." for a big feature request or "can't you just..." for what they see as a small one.
I always prefer honesty over this - if you have no idea about even estimating the cost for some feature, just ask "How much will it take and how much will it cost to... ?", don't fuddle around with the "how hard...", "can't you..."... these are just weasel words for when you need to overwork and underpay someone because you really know you need something done yesterday and with almost no budget, but you really need it so maybe someone will just shoot himself in the foot to make it work for you if you ask nicely enough :)
"How much will it take and how much will it cost to... ?" condenses down to "how hard…". You can tell they're functionally equivalent because you can give the exact same answer to both.
"Can't you just" is a whole different story, granted.
Now, these ideas may often be very wrong, and may be in fact so wrong that "no clue" is the best description, but its not, for the most part, dishonesty when people act like they have some general expectation of the cost.
If it's something small, then maybe just code it up quick in a branch named after the PM-Feature (so you can keep track). Then ask them to validate the requirement before you merge it in (hopefully you can help with this). At least this way they know that you aren't being lazy etc.
Next time that PM asks for something "simple", do a quick branch list of invalidated feature requests.
My favorite was probably the following:
“Can you just...”
no.
Draw them a picture and have the discussion - frequently.
I don't think it's just that they're disconnected - some of the orgs I've been in - they simply do not care, and never will, even if they completely understand the "costs". Why not? Because they don't have to pay it. It's not coming out of their budget, the 'costs' of higher support later on don't affect anyone who's making the decision right now, and damnit, we have to get this out now or we'll lose marketshare!
This is a toxic division, and seems to be more prevalent at companies that do not see themselves as software-based companies. Yammer is all tech - Yammer couldn't have existed 30 years ago, but plenty of more traditional companies still see software as something divorces from their main business.
"Making something work is pretty easy. Making sure it never fails is the hard part."
Just want to add one extra thought though:
he or she will run reports against the usage data to find
out whether a given feature is often used. That data can
then be run past the product managers who can help decide
whether it's sensible to just drop the feature.
It's important to be careful here, and it's one of the traps that is very easy to fall into (see Gnome). Just because a feature is only used by 1% of your users doesn't mean it's not important. You might have 100 features only used by 1% of your users each, but if you take out all 100 features, chances are you've taken out at least one feature that every single one of your users depends on, and now your product is a lot worse instead of better.I call these User Landmines (they are quiet right up until you step on one).
It's often subtle or intentionally hidden features that cost the most in the long term. Yammer has long had a feature that allows you to begin a message with "to:" and a username to send a private message to someone, or followed by a group name to post to a group. This probably took me an hour to implement, test and deploy back in early 2008. I have easily spent 40 hours of my time -- and, necessarily, 40 hours of others' time -- over the intervening 5 years explaining this feature and its justification.
One likely reason why an engineer - as opposed to a sales or customer support rep(1) - might end up spending as much as 40 hours explaining and justifying a trivial, implemented and documented feature would be a culture obsessed by removing perceived cruft.
(1) If competent sales or customer support reps spend 40 hours talking about a feature then some conceivable variant of it has some perceived value to someone...
Also, you can remap different keys to those keys with the free software KeyRemap4MacBook (https://pqrs.org/macosx/keyremap4macbook/index.html.en). For instance, you can remap \ to be forward-delete and Fn+\ to be typing ‘\’.
Please keep in mind I'm talking about stuff from about five years ago when you run to MSN.jp looking for print buttons.
Complexity is always something we consider - in every team I've ever worked on. DBA's always talk about the complexity of the data. Dev's always talk about the complexity of the code base. And UI Dev's and Designers always talk about the complexity of the UI.
No one understands the cost of complexity better than engineers. We understand the increase in the likelihood of bugs, or the increase in maintenance and refactoring costs. We understanding that making a UI complex means users may have difficulty learning how to complete a task and get frustrated, and we understand the costs of those frustrations.
I'm not sure why this person thinks engineers and product managers don't understand the cost of complexity. In my personal experience, it's always been business and sales people who don't understand how adding a shiny new feature could be harmful in any way.
"Simplicity of usage should always win over simplicity of coding. The purpose of a product is to solve the end user's pain, no one should give a dime about the engineer's problem. IMHO that was the genius of Steve Jobs, he could take any pre-exiting product and increase its complexity by 50x while simplifying its usage by 10x."
I am relatively new to coding, and really, I want to know what do you guys think about this? Does this really scale? Does simplifying the front end often compromise the backend?
Sometimes but not necessarily unless you're making a programming language or a platform. For typical, more direct cases it's not necessarily the case at all.
In a superficial assessment, yes, usage is the objective of software, and it should be as complex as needed to enable its users to have an optimal perfomance.
But then, most software is built in an environemnt where people don't even know* what problem they want to solve beforehand. Ading complexity too early makes it very hard to change your software and leads to a situation where you completely optimized some work that shouldn't be done at all, while the important work got harder because it was overlooked at first.
* They have a general idea, and even that is wrong sometimes.
It's all subjective, and the design of the high level concepts (maybe mechanics?) influence the complexity at every level below it. The idea of a 'file' goes from the GUI down to the hard disc format.
--RFC 1925, http://www.faqs.org/rfcs/rfc1925.html
I highly recommend reading RFC 1925: The Twelve Networking Truths. It's a much faster and more amusing read to get the same information.
Simplicity is an ideal I see a lot more among tech people (myself included), and while I think it's nice to aspire to, it's definitely not something I've seen as a request, requirement, or even preference among the kind of people who are willing to pay others to build things. They want what they want, not a simple implementation of what they need.
Google has (had? I suspect they still do this) company wide 'fixit' days where people would fix bugs for prizes and what not. I suspect a 'delete-it' (or 'simplify-it') might be a useful exercise as well.
"Subscribe to receive future articles right to your inbox"
Tab closed. To hell with them.
It also took a few seconds to load and the page scrolled back to the top, causing me to lose my place. Extra annoying.
Perhaps I should use noscript as well :)
In essence, it is Joel's Law of Leaky Abstractions at work. You can't manage a software project just in terms of a set of features you agree upon with business. The codebase is a key constraint that underlies all of those discussions and unless the effects of feature choice are on the table, you end up incurring radically different costs.
This isn't just about paying attention to technical debt. It's about having the discussion about whether it is worth targeting some features or not, taking the code into account - using it as a factor in business decisions.
http://www.confreaks.com/videos/717-rockymtnruby2011-opening...
http://michaelfeathers.typepad.com/michael_feathers_blog/201...
Useful nonetheless. It puts into words the visceral reactions we have all had at some point to "How hard would it be to...?"
I'm working for the first time on somebody elses code and with a group of develpers, and it seems like the answer to most problems is 'just add another model'. I stay away from that as much as I can, and try to make existing models fit new features and functions.
Maybe it's just my current workplace, but is this a more modern problem?
In the codebases I've worked on, a lot of the complexity I see arose from people changing the meaning of existing code so they could 'reuse' it.
Ok, but did it save so much coding, or not? I do try to restrain myself from being clever when I realize it's really not worth it, but being clever sometimes does pay off. Extra coding is complexity too.
But I honestly can't remember reading once when a user has said they want fewer features. Users want it to easy, yes, but they also want the features that make their lives, well, easier; see how that works?
Whenever I hear builders argue for simplicity I get deja-vu as if I'm hearing union members argue against those who might cross the picket line, or lobbyists trying to convince congress to give their clients tax breaks, or record companies complaining about downloaded musics, or, or, or,... well you get the picture.
For example, there may be a ten-item menu where the user only uses the two features at the bottom. The user is slightly annoyed every time they have to move the mouse all the way down there to select that feature. But it probably wouldn’t occur to them to ask that the other menu items be removed – they are just trying to ignore those items.
Is it websites that pop up a subscription box with no obvious close button?
I haven't run into many product manager that would understand the cost management exposed here. Most product development company I have been at avoid discussion/debates around the real cost of some of the development.
I'm not sure whether it's the lack of understanding, or simply the lack of interest for long term impacts sometime outlived by exit strategies.
I have made similar observations in the past as well:
http://williamtpayne.blogspot.co.uk/2012/05/complexity-it-ha...
As well the mistakes we tend to make when we try to deal with it:
http://williamtpayne.blogspot.co.uk/2012/06/pushing-complexi...
But say you design a distributed system and its protocol, how do you know what is to keep and what is to delete ? We know the problem of over quality or complexity, but how do you know you're just right?
My feeling is that beeing too minimalist might refrain progress and discovery of new loved features.
That's one of my favorite principles of software development (and engineering in general).
The first 100% of the cost is 20% writing, testing and certifying it, and 80% maintaining the result.
The additional 100% is the cost of rewriting it because you didn't actually write it to be maintainable.
Simple products are often easy to use, and document, which is one of the reasons Apple does so well.
This is not true. Users want a manageable and appropriate amount of complexity. Sane defaults, reasonable options.
In the sitcom 'Allo 'Allo, a woman is trying to set up a date with a character who's a stickler: "What if I am late?" > "Don't be late" > "What if I am early?" > "Don't be early. Be punctual."
I'm reminded of this whenever I see something on the minimalist vs flexibility wars. The answer is in neither camp, it's in the 'be appropriate' camp.
+1