22 ms·
“This project will only take 2 hours”
- commandlinefan 5y agoI did that a fair bit when I was starting out and I've learned to be conservative. The problem is when I run into somebody else who insists that (I) should be able to do something in two hours because it's simple in their mind.
- jameshart 5y agoI think the student’s first instinct was about right. For a program idea that sounds like it’s kind of a user whim ‘I think I’d like to have a log file of URLs I copy pasted’, it seems like it would be good to get a prototype into the professor’s hands to see if he actually finds it useful or if in fact it just winds up recording a bunch of URLs he never looks at before investing more than a couple of hours in making it super user friendly. Instead, he just explained to the students why it’s much more complicated than that, probably discouraged them from trying to build anything at all, and as a result is no closer to having any kind of way to capture the URLs he copy pasted during the day. No value was created in this exchange. My overall reaction to this is this feels very much like an academic approach untethered to what kind of practices actually work for creating products in industry, and instead is working to inculcate students in bad habits that will turn them into the kind of developer who, when asked to solve a problem, comes up with a long list of reasons why it’s too much effort to be worthwhile, rather than a list of ways to figure out how to solve the problem. In particular, this pattern of listing ‘but have you thought about…’ questions is amateurish product owner BS and it does students a disservice to suggest this qualifies as any kind of requirement analysis model, let alone a first step in deciding how to go about building a piece of software. It is a great way to stop yourself from even starting. Requirements gathering doesn’t consist of guessing what things a user might want, or even asking a user what they think they want. Yet the professor goes off positing a need for a pause mode, timestamps recording next to URLs, log encryption… all of which are maybe interesting but none of them seem like they make or break the viability of the product. On the other hand, if it turns out you can’t actually make a program that has sufficient permissions to read arbitrary clipboard contents without triggering a malware detector or getting blocked from installation on a university computer, that would rather screw with the entire project, so maybe focus on verifying that you can at least do that first before you start wondering about what color the system tray icon is going to be. And maybe your research will turn up some interesting affordances or edge cases in the clipboard API that you hadn’t thought of that take the project in a completely different direction? The fact one of the students said something important that identified a key risk to the entire project concept: ‘I’ve never interacted with the clipboard api before’ - and then that got glossed over for discussion of all the shiny affordances that could be bolted on to the solution - was a real miss of a teachable moment.
- devilduck 5y agoTypical programmer hubris
- batch12 5y agoThis could be a powershell script that should only take 10 minutes.
- h2odragon 5y agoGreat point, and a good way of illustrating it. But I have to respond: Or you could grab something similar and use that as a beginning point. Say, for this application, `clipman` which gives me a popup list of the last few clipboard entries. Get into that and add some regexp filter and log output and it need not even interfere with the original functionality.
- dmz73 5y agoI think that both article and you are missing a very big aspect of development - ongoing support. This is specially problematic when using existing code to create new product for a specific use case\client. It may not take very long but what everyone seems to forget is that this new product has to be maintained. Every time new feature is added to base code, it has to be tested with that new product as well. Repeat that 10-15 times and it becomes difficult if not impossible to add new feature to base code without either breaking some downstream code or getting bogged in updating numerous programs and then testing and then fixing the issues then testing again...
- bcg361 5y agoWhy can't simple programs these end up being just finished forever?
- h2odragon 5y ago"The new product has to be maintained" ... If i'm the only one using it, i kindof assume that burden implicitly. One of the great ideas in open source is that others can use my software without me having a "maintenance burden" for their use. They can maintain their own copy if they like, depend on me, or decide shit don't work. If I did my proposed hack i doubt I'd bother the upstream developers with it; if dozens of users like it, maybe later it could be made worthy of further public consideration. But "is the maintenance burden too high" as a consideration before you begin writing is a great excuse to never try.
- kiawe_fire 5y agoGreat example. This is something I struggle with myself, but it especially annoys me when my non-engineer friends complain about bugs or missing features when we game together. “Why can’t I just do {x}, it would be easy to implement, any programmer could do it, why are {y company}’s developers so incompetent”. Now I have a link to send them rather than awkwardly coming up with an example on the spot of why {x} is probably way more complicated than it seems, assuming you want it to actually work in any meaningful way.
- dkdbejwi383 5y agoI've found that asking non-engineers to explain to me how to make a cup of tea can be helpful in explaining why software development is so complex. They'll usually say something like "boil the kettle, pour the water in the cup and wait a few minutes" So then you go in and probe all the requirements and edge cases: - what if there's no water in the kettle? - what if there's no power to the kettle? - what if we're out of tea bags? - how do I know when the kettle is boiled? - can I put the tea bag in the cup while the kettle boils, or do I need to wait for the kettle to be ready first? - what size cup do I need? - how do I remove the tea bag? - what if there are no clean spoons?
- rytcio 5y agoThis sounds more like a problem of scope creep than unexpected complexity
- adorton 5y agoScope creep happens when you discover new requirements after defining a project scope and delivering an estimate. The type of analysis outlined in the article is helpful to define a sane and reasonable scope upfront, to hopefully avoid creep down the line.
- Jensson 5y ago> Scope creep happens when you discover new requirements after defining a project scope and delivering an estimate. The author defined project scope. Student discussed and came up with 4 hour estimate. Then after that estimate was made the author added a lot of requirements and said the student estimate was too low.
- ClosedPistachio 5y agoIt's in the article: > The goal isn't to fall into a feature rabbit hole, but rather to understand your assumptions about the project. If I don't do this exercise and I try to build it, then I will often run into two or three crux issues that I could have easily known about from the start. Don't go implement every feature idea you come up with from this exercise!
- alasdair_ 5y agoThis is only true if you believe software development to be the practice of slavishly implementing ill-defined requirements regardless of what the user actually wants.
- rockstep 5y agoI prefer to think of it as pushing out minimum viable products as soon as possible and implementing finer details afterwards. I think that's a principle of being agile.
- turbocon 5y agoHonestly I learned this lesson as a young engineer, as I suspect many others did, by giving a project manager an off the cuff answer to "how long will this take". The next month of embarrassingly explaining why I was late every Tuesday and Thursday was enough for me to now take a serious amount of time, come up with a realistic estimate, and then add a lot of buffer. Better to under promise and over deliver.
- deleted 5y ago[deleted]
- hinkley 5y agoThere's an old saying that you can tell developer maturity by the units of time they use for estimating code. Only brand-new developers (and Sith?) estimate things in hours. Experienced devs estimate in days, but senior developers won't give you a number in increments smaller than weeks. Also, any manager who trusts an estimate from a new employee or especially a new developer is an ass. They should have known better, and giving you grief about it is just doubling down on a category error. We've all had that experience, but I'd like it if we all learned to reframe such experiences as abusive. Especially if you're going to be in a position to repeat those sorts of experiences on a new generation. Break the cycle of stupid.
- onion2k 5y agoOnly brand-new developers (and Sith?) estimate things in hours. Experienced devs estimate in days, but senior developers won't give you a number in increments smaller than weeks That just reflects the size and complexity of stories they're asked to estimate.
- moksly 5y agoI think it has a lot more to do with how far away from academia they are. I side job as an external examination for CS students, and the way they are taught to do estimates are some of the most useless ways imaginable. Have you ever actually seen something like a planning poker session in action amongst only juniors? I have, and while this is very anecdotal, it has always played out like this: the most confident programmer in the group grossly underestimated the task. Often this person has a valid reason to be confident, but because of this, their opinion also weighs much more heavily in the group, so that even if someone throws the 100 card, the task will still end up with a 2. The longer you work in the real world, the more you realise that estimates aren’t a showcase of you. They are timeline project managers need to implement projects, and if you fail to give a realistic estimate then you fuck with that timeline which is often the worst thing you can possibly do as a software developer. Even if you “know” how to implement a really simple task, you simply need to make sure there is room for a days worth of searching for something really stupid, and you’re never going to be asked to estimate something really simple. Not as a junior, not as an experienced developer and not as a senior. I do understand why students are taught to estimate wrongly though. Their projects aren’t very long. But I personally think we are doing them a huge disfavour by making them estimate in hours. Because why wouldn’t they expect that to be the norm if that’s what they’ve learned to do?
- Jensson 5y ago> A few students came to me asking if I had any ideas for a software project that they could work on outside of class. > I explained an idea for a utility that I had been wanting: A desktop program that monitors my clipboard for URLs and logs them automatically. I think this person misunderstood the students, the student wanted a project to practice programming, not a project to practice project management. The programming parts of this would take 2-4 hours, it isn't a terribly hard thing to code. All the project management parts would take days or weeks or even months or years depending on how polished you want it to be. Giving them a project management project because in your mind project management is more important just to prove a point doesn't help them at all.
- kaishiro 5y agoI've often felt the difference between a junior developer and a senior developer is that a junior developer believes anything that isn't in-the-seat, headphones on, IDE cranking isn't "real development".
- Jensson 5y agoBut you need some level of technical skills before you should start worrying about user concerns, so junior engineers should first and foremost think about the technical parts while the seniors who are more skilled can take a bigger picture view.
- pirvudoru 5y agoSee if you can reuse anything fr here https://github.com/agilefreaks/winomni https://github.com/agilefreaks/winomni This is the windows client for a cross device clopboard we worked a while back but dropped because we couldn't get users. Other components: https://github.com/agilefreaks/webomni https://github.com/agilefreaks/webomni https://github.com/agilefreaks/droidomni https://github.com/agilefreaks/droidomni
- edflsafoiewq 5y agoSounds like Windows software.
- meowface 5y ago>The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time. - Tom Cargill, Bell Labs
- XenophileJKO 5y agoI really wish this weren't so true....
- moksly 5y agoWhy? This is true in most processes that involve building things. It doesn’t take very long to finish the foundation and frame of a house either, but making it liveable takes quite a while. When we build a new city hall (under time and budget by the way), the actual building was finished after a year. It took another two years to make it useable as a city hall. Why would software engineering be any different? The only real difference is that you have to do all the parts rather than specialising in brick laying, electrical stuff, plumbing and so on. Yes, this is really how little I know about construction and I still managed all the parts of the project concerning IT and networking (without really knowing anything about the instalment sides of that beyond the blueprint and trusting my operations guys either). So maybe I’ve talked myself into agreeing with you, but perhaps not for the same reason. Because I wish it wasn’t true either, but mainly because I wish the software development industry wasn’t still so infantile that it still can’t predict and distribute the workload in a manner so that projects can be delivered under time and budget more often than not.
- ciphol 5y agoIt's predictable that the walls/ceiling of a building will take X time, and the wiring/furnishings Y time. Software development is different because even after you have allotted time for every issue you can imagine, unexpected further issues end up appearing which delay you beyond the projected deadline.
- bottled_poe 5y ago
- owenfi 5y agoWas curious if I could pull this off, and managed to get a Mac version "working" at an "acceptable" (there isn't even a quit button yet) level to serve as a starting place. Was embarrassed by the quality, since it's just 5-6 snippets (of various style) pasted together...but I might as well share it anyway to prove the point: https://github.com/owenfi/clipboardcopies https://github.com/owenfi/clipboardcopies The article does strike me as "scope creep" or missing the point of the question...I've taken this super crappy version and added it to my startup items, I think I might find it useful, and if I do it might grow over time. The polish can happen later if needed. I was able to accommodate a bit of the polish out of the gate by saving to individual files based on the time. The granularity roughly corresponds with the polling frequency. (Turns out there isn't a clipboard did change notification?) To me the "complexities" are those things lurking beneath the surface, that a newbie doesn't know how to resolve, and an expert forgets to even point out. In this case the complexities I saw were: - Getting it to run required revoking and updating my provisioning certification (could've been solved another way I'm sure), this was fast because I've done it plenty of times in the past but things like this often throw up unnecessary roadblocks that aren't foreseen in the scope. (luckily I already had Xcode installed.) - Writing to the directory I wanted (~/.clipboards) proved futile due to sandboxing, and after 5-10 minutes I just gave up, since I want to consume this in terminal I can just cd into the app bundle documents area (or fix later). - How do you get git to merge up 2 repositories that were started independently (maybe I should've started from github in the first place, but I didn't think I would be saving or sharing it). I'm not saying it's not worth thinking those things through or practicing project management...just that the first student was right.
- bsrhng 5y agoI think interpreting the intention of the author and the students should take into account that the author's research is in human-computer interaction and that the students most likely are aware of that fact as well.
- owenfi 5y agothat's fair, and maybe if they wanted a "project" then project management was the right thing to look at.
- teraku 5y agoReminds me of this post: https://lucasfcosta.com/2021/09/20/monte-carlo-forecasts.html https://lucasfcosta.com/2021/09/20/monte-carlo-forecasts.htm...
- jonathanstrange 5y agoThis post ignores the fact that an answer to questions about development time depends on the technology used, i.e., the tooling, programming language and platform/supported operating systems and, first and foremost, how familiar the developers are with these. I believe the student who said it's going to take them 2 hours. For example, I can guarantee you that I would have been able to finish this project in less than an hour back in the time when I was fluent with Realbasic. Today, it would probably take me 4 hours in Go + Fyne because I'm not yet familiar with Fyne. It would take me the same amount of time in Gtk because the framework is kind of complicated and the docs are sometimes a bit obscure (though overall excellent). If you add testing, documentation, and deployment then it's going to take at least 10 x the original time. That wasn't part of the original description, though. The example just goes to show that if your original spec is incomplete, doesn't specify the quality, testing, and documentation requirements, and you pile up feature after feature (like cloud uploading), then it's going to take much longer. I'm sure the student knew that, however.
- foxfluff 5y agoThe other thing is, how well researched do you want to be? When I'm learning something new, I usually want to gain a deep understanding and really get to the ins and outs of it. So when figuring out (for example) how to do X in language Y, I'm not very likely to stop at the first SO answer and call it done, because very often there's more to it (e.g. tradeoffs in performance, compatibility, composability, pitfalls & caveats, etc.). But the difference it makes in time taken can be massive. Maybe finding that first SO answer takes a minute, but gaining a deep understanding can take a few hours of reading and experimenting. This ends up feeling weird for these take home assignments if you're using a new stack. My normal mode of operation is to gain deep understanding (and people generally consider me insightful, which I attribute to that pursuit of understanding), but this may look bad to someone who already knows the stack and/or thinks that you should just cope & paste.
- jstx1 5y agoReminds me of how some companies give take-home assignments to job candidates. > Here's a task that takes a day to do sloppily and at least two days for you to show your best work. We want to be respectful of your time so please don't spend more than 2 hours on it.
- nnoitra 5y agoYup, the worst aspect of it isn't that it takes a long time to make it work right but the feeling of imposter syndrome and the fear of expectations if one manages to get in. Like, if you expect me to write 1K lines of code in 2 hours as I read documentation, debug, test it - then god knows what the expectations are at a full day at work.
- sildur 5y agoI only accept paired assignments. If you are going to use my time, the least you can do is offer an equal amount of time on your side.
- nextlevelwizard 5y ago"Thank you for your time, we will keep you in mind. Next!" Point of programming assignment is to see if you can actually write code. No one is waiting for perfect implementation, just working code that fills the spec, documentation, and tests.
- wongarsu 5y ago"here's a computer, please implement a function in $languageOnYouCV that receives two words and returns true if they are anagrams of each other, false otherwise, if time permits add some unit tests" seems to fulfill that need just as well, and should be quick enough that being in the room or not is more about what makes the candidate more comfortable and gives the most insight for the interviewer.
- sethammons 5y ago
- ZoomZoomZoom 5y agoInterestingly, humans tend to underestimate complexity even when it's right under their noses. In music world you can see it everywhere with your average band attempting cover versions of popular songs. It's the reason the results often sound nothing like the originals: melodies vastly simplified, textural sounds are omitted, harmonizing melodies absent, rhythm parts dumbed down, timbres approximated. "Yeah, it's a simple song with 4 chords, we can rehearse it in a day or two". When your ear develops, you can hear that the real simple song is an outlier.
- jcun4128 5y agoWhile back I applied to this PHP/Laravel job. I had to make a CRUD app and I did it, took me like 9 hrs, I made it... but I was a noob too back then regarding repos/how to share code. So I attach it in an email and it never made it... so days later I ask like "did you get my project?" realizing it didn't go through oh man.
- ajsnigrutin 5y agoI've gone down this rabbitole before, and yes, there are things that take two hours, and there are things that take a lot more. The problem is the scope - ie. are you trying to do what you said you'll do (miniature software to log urls), or are you adding 100s of requirements to the scope (gui, filters, privacy,...). We had a bunch of .xml files containing some data, and someone wanted a .csv file... sure, an hour max, and it's done. Fire up some perl, loop, xml->hash, take the data needed, print line by line, done... less than an hour. "Hey, can you add just this and that, and separate folders for this and a total and rolling sum?" ...yeah sure... hour or two. "and this and that?" ...sure, another hour... "Can this be made for that department to use.. just add a simple gui" ...and we've gone from an hour or two, to weeks or months of work. Nobody wanted a gui application made for "normal users", with all the checks and verifications and documentation and everything when you made a request... the scope was a simple one-off script, and that actually took an hour or two. This is like requesting a bicycle, than wanting to add a hitch for a boat trailer and making it higway-legal. And the added problem is, that your script never intended to do "all of this", and you either have to rewrite it from scratch, or you software looks like "the Burrow" (from harry potter).
- jiggawatts 5y agoI vaguely remember a rant some famous Linux developer went on about how setting up printing in Linux requires a dozen parameters, half of which are arcane nonsense that the printer manufacturer themselves probably doesn't know how to set up correctly. Meanwhile, on an Apple or Windows computer it can be literally just plug and print. The difference is that hiding those arcane input parameters takes work, and a lot of it. There was a quote that it takes 10x as much effort to remove an input parameter than simply leaving it in there and letting the user fill it out. A lot of people don't get this, and think the simpler-looking software is simple, when under the hood it is probably doing model auto-detection, driver downloads, protocol negotiation, and even firmware updates on the fly! I face this all the time at work. "Can't you just make a single button to run this task so I don't have to figure out how to use this complicated script?" "I can, but not with this budget..."
- jdefelice 5y ago
- m1gu3l 5y agoanyone else feeling like lately at work they are spending more time on dialing in time estimates for work than actually doing the work? it feels like we have a problem (at least in sysadmin/devops roles) of valuing time estimates/"the process"/agile over actually banging out some work. i am starting to tune out planning meetings and requests for time estimates with a least effort possible attitude.
- dkdbejwi383 5y agoI've had this problem before, it's a symptom of management not trusting development teams. It's worse when combined with the "we say estimates aren't timeframes but secretly they are" problem: give a 3 day estimate for something, and when it's not finished in 3 calendar days (because only around 1/4 of that time was actually usable for work, the rest was pointless meetings or 20 minute gaps where nothing useful can be done), more meetings are scheduled to discuss why the estimates are "wrong".
- logfromblammo 5y agoFor some bizarre reason, management has not yet assigned a task to their programmer underlings to automated themselves out of existence. I can't imagine why. I don't think it's a matter of trust. Management sees their job as setting priorities and resource allocation. So they shoehorn that into everything they touch. They require estimates, so they can divide impact by effort and then assign the highest ratios first, without regard to necessity or dependencies or technical debt.
- m4lvin 5y agoOnly half on-topic: Many (non-Windows) desktop environments already provide a function to keep and search previous clipboard content: See for example https://userbase.kde.org/Klipper https://userbase.kde.org/Klipper
- varjag 5y agoOne man's poor estimation is the other's scope creep.
- zuj 5y agoWhen someone says this should be easy... I would like to show them the flow chart for how slack notification works. https://imgur.com/gallery/0p5bV https://imgur.com/gallery/0p5bV Just "notify the user"... imagine the amount of code and the number of APIs this needs to touch. Software is way complex and devil is in the details.
- Jensson 5y agoThe hardest pill to swallow is marginal difficulty. Everyone can agree that writing something like a modern full fledged browser is hard. But how hard is it to add a small feature to said browser? Well, the feature in isolation is easy, but the entire browser at that scale is much more complicated than the sum of its parts, so the difficulty comes from incrementing the complexity of the entire browser and not from how hard the feature itself was. Good code design can alleviate this a bit, but not entirely.
- ciphol 5y agoThat crazy looking chart (except maybe the push timing loop at the bottom) can be implemented with 100 lines of branching if statements. The 20 or so questions it asks probably can be answered by querying ~3 simple APIs (user preferences, channel preferences, thread preferences). The only complicated thing is the push timing loop.
- commandlinefan 5y ago> The only complicated thing is the push timing loop. ... and producing the chart in the first place.
- adfgaertyqer 5y agoA daemon that writes the contents of the clipboard to a log file would be a reasonable utility. It does not need to be pauseable; just kill the process when you don't need it. It doesn't need to only record URLs; just use grep to filter the log file. This is how I would write the thing for my own use. The professor gave the students incomplete information. What they said is perfectly reasonable. This is a project they will be doing on their own time, so the scope of it is entirely up to them.
- lordnacho 5y agoThe poisonous version of this is "This should take no time, I did a POC myself in a day". Happened when I helped hire a friend to help with a trading project. This friend is simply one of the best coders out there, understands the domain, understands all the coding. The guy who was hiring him threw together a websocket, pulled some data, and thought there's just a tiny bit of work left in the details. He did it in nodejs. Of course figuring out the details was the hard part, made especially hard by not having a clear request for what the project was going to do. Was perf important? What about all the various features? It's really something to look out for as a manager. Don't be that guy who says everything is easy.
- gverrilla 5y agoA good friend was working in a scientific model for controlling weeds on farms. He couldn't code so he asked me to make it into a program: "it is very simple, only 8 steps at most". The 8 steps turned out to be a 2000 lines code after 6 months of work. Later he changed the model a few times and added a few new steps. We could only finish the prototype 16 months after starting, and after a few rewrites, with 3500 lines. Now we're on our way to launch. The model was very complex itself, and each of those steps was a rabbit hole. To add to that, I was not a professional programmer and had never touched Python, so it was a very challenging journey.
- rak1507 5y agoJust curious - why would you use python if you don't know it?
- gverrilla 5y agoI did a teamtreehouse or codeacademy course on Python maybe 6 or 7 years ago, but that was all - not even a single project. Mainly my programming experience existed because when I was a teenager I would create scripts for ultima online using EUO [0] and a few times Simba[1]. Also I managed an ecommerce operation for a few years, so I dealt with coders and eventually code. Actually, I started this project in VBA after my partner insisted on it because he had those sheets with all the parameters for the model already in excel, and also a GUI he had created for the input. I accepted because I had taken a course on it @ uni, but soon felt the need for an easier way to program, and that's when I decided to go to Python. 0: http://www.easyuo.com/ http://www.easyuo.com/ 1: https://wizzup.org/simba/ https://wizzup.org/simba/
- rak1507 5y agoFair enough, it sounded a bit like you learned python specifically for this project.
- gverrilla 5y agoMy bad for not being precise: I had to learn Python specifically for this project because the only memory I had about the course was: "Python bare basics were easy to learn". I had never even installed python locally or anything and saw those courses at the time as only games to get some minimum idea about the language, as I had no intended use for it. Adding to this topic, now I can say it was easy enough, even for someone like me. A few times I needed help from actual people and got it from the kind and amazing folks that hang around StackOverflow Python chat, but mostly Python docs (or some simplified form of it provided by other website) and google queries would do the job when I had a code obstacle. Python was overall very intuitive for me, apart from a few surprises (mainly regarding scopes and names).
- neximo64 5y agoYes, to the question at the end. Possibly shorter. Get the first iteration in with quick answers on the questions like should it be a csv or x and once it works then tweak it after instead of being paralysed with overthought first.
- nextlevelwizard 5y agoMy gut reaction is that the student was right. The spec was: "log all urls from clipboard into a file". After the fact teacher in question came up with more specifications, which is fine, but when the scope of the project changes we need to reconsider the time tables and work required. This is normal software development. PO/customer wants something. You give your estimate. They accept it and you start working and then middle of the sprint or in demo or during testing they come up with new requirements. These were not in the scope of the original project and thus need to be re-evaluated with new estimates and possibly new project.
- chiefalchemist 5y agoIt's always two rules... - 80/20. Yeah, much of it goes quicly. But the devil is in the details, and those add up, especially when you're staring into the abyss of an unknown. - I learned this early on in my career. It applies to just about all projects, not only software. "It'll take twice as long (and cost twice as much) as your original back of the envelope estimate." I wish I had $20 for everytime I saw this come true. With that kinda money Bezos and Zuck would be working for me :)
- the-dude 5y agoSurprised I haven't found https://xkcd.com/1425/ https://xkcd.com/1425/ in this thread.
- Aachen 5y agoEncryption? A GUI for pausing rather than just stopping the process when you don't want it? Server synchronisation? I can see why this project will take longer than 2 hours if you introduce new requirements. I have a bash alias that almost solves the problem as stated. I'm not on my PC at the moment, but it's something like (forgive formatting on mobile, space inserts keyboard suggestions so even this much indentation involves a bunch of copy-pasting). while :; do x="$(xclip -out)" if [ "$x" != "$lastx" ]; then echo "$x"; fi lastx="$x" sleep 0.5 done If you pipe that function (I call it whilepaste) into |grep https?://, you've solved the problem as stated. If you want more, if it's not just for yourself (the author literally said they just wanted the program to use for themselves) and it needs further usability features, automatic run on startup, etc., that's a different set of requirements that you apparently didn't mention when the student posed the clarifying questions. But even so, making a tray icon and automatic startup on windows is probably approximately two hours if you're experienced in coding and just need to look those two things up. I remember doing both as a teenager back in the game maker 7 days using a DLL, so I have a vague memory of how much work this was. I don't disagree with the general point that some problems are deceptively hard and that, if you're making this for someone else (even this tech-savvy coding teacher), you'll probably spend an afternoon with polishing and extended testing included, and that gets longer the bigger the initial estimation (the famous one-weekend project). Still, a problem like replicating Twitter is probably a better example of something that seems very simple and the amount of time needed only becomes clear once you realize how much work it is to setup all the stuff around the core function of showing short messages to followers.
- ChrisMarshallNY 5y agoI often say that I can write a fairly acceptable, full-featured app in a couple of days, but, if I want it to be a shipping app, then expect it to take a couple of months. I believe that schedule crunches aren't just management's fault. They are often exacerbated by engineers, not "playing the tape through," and giving unrealistic estimates, or agreeing to unrealistic estimates.
- shireboy 5y agoI’d point out this isn’t a problem with estimation per se but with requirement gathering. The students didn’t press him for more specific requirements before offering an estimate. The real challenge though comes when the customer doesn’t know their requirements. They legitimately think they “just want a simple app to record urls”, but actually want all the other things listed. The thing that sets good developers apart is being able to tease out those requirements without being a jerk or making legitimately simple requests overly complicated, then deliver.
- jrochkind1 5y ago> The real challenge though comes when the customer doesn’t know their requirements Which, of course, is true 80-90% of the time.
- snarf21 5y agoFair but this is the thing we all do wrong with estimates. I've come to the following system that I think works well and captures the uncertainty. Estimates are given as the following choices: hours, days, weeks, months, quarters. You never give a number tp the units. These all mean some "small number of X" where X is the list above. Then if Product has a question like, "Why would Z take weeks?" then you can have a discussion about the complexities and the task can be further refined and/or split into multiple things and those can be estimated as above, rinse and repeat.
- BlargMcLarg 5y agoGood developers, yes. Which takes experience, given the myriad of colorful personalities, politics and more. Though I don't think it is fair the responsibility is largely put on the developer for "underestimating" when often the corporate is big enough to have specific people gather these requirements and map them out as part of their day-to-day. That's my main problem with this advice and the article. Of course anyone wants a developer who can do both development and figure people out to bring out the most perfect estimates possible. But it's getting to a point developers are starting to be the solely responsible people on top of ever increasing technical requirements, while being given the minimum amount of practice figuring all this stuff out.
- kirillbobyrev 5y agoThat looks like a really nice project idea, does anyone have something else they like giving the students/junior SWEs?
- ipiz0618 5y agoI have been working on a side project that allows saving and sharing bookmarks with a simple like / dislike / comment system. It looks very simple, and is essentially a CRUD app. It's rewriting a similar project that had. That turned out to have taken over a hundred hours of my time, and still counting. I started in June, expecting to finish by August. It's November now and I'm still at only 80%. There are just too many details that can't be predicted before starting to work on the specific part. This happens at work too - "can you finish that feature now and release that in the next 15 mins or so"? Sorry, but I've only been a maintainer of this massive codebase for a few months, and haven't even touched that part of the program...? And yeah, I have other pressing work that I'm focusing on, so which one should wait?
- stoned 5y agoI feel like the Dunning-Kruger effect is not mentioned enough on HN in these contexts https://en.m.wikipedia.org/wiki/Dunning–Kruger_effect https://en.m.wikipedia.org/wiki/Dunning–Kruger_effect
- Jensson 5y agoIt says that confidence correlates with skill, just not perfectly. How is that relevant?
- sethammons 5y agoThis same effect is similar when given technical interviews. As someone who has given hundreds of technical interviews, when you design your coding task, give the candidate 3x the time it takes you (or someone else of similar leveling as the candidate) to do. The problem should also be based on a real thing the team has done and then distilled down to remove as much work-context as possible. So a 2hr assignment should generally take the interviewer about 40min max. And an interviewer should never hand out a question or task they themselves have not solved. This rule is generally applicable in in-person interviews where candidates usually have 45m-1hr and are nervous and on-the-spot. The question should take the interviewer about 15 minutes, and don't forget to have time to talk through their solution and give time at the end for their questions. And the last piece of interviewer advice for now: look for reasons to hire the person. Identify what would this person add to the team and company. It is easy to find flaws in everyone. Anyway, tangential to the article but relevant enough to share I think.
- jrochkind1 5y agoBut OP didn't tell us if the students worked on the project, and how they found it, and how long it took them!
- throwthere 5y agoThe overall gist matched my novice programming experience— you underestimate all the features and edge cases you’ll need to cover, at least I do. Butttt I don’t like the example. The base url recording is a two hour task for a given os. If you want regex then use grep. If you want timestamps use local epoch time and get on with your life. Format with csv. Forgo the icon, just put it in a daemon/service/whateveryou can stop/start. If you want context in the csv add in a curl get and grep out the title. Boom, you now have a product a cs professor can use to save URLs.
- bluedino 5y agoI was handed a chart from our shipping manager. It had columns for each state, and shipping prices based on quantity. This was a simple project to turn into a table and then lookup the needed value. When the manager needed to update the prices, they could just update the table. I noticed the 3rd column for quantity was "3 or more". I should have ran at that point. The next page of the spreadsheet added exceptions for certain item #'s, certain zip codes (each borough of NYC for example). It was still manageable but it was way past the two hour point. Sadly, when this was originally put on the AS/400 it was 4,000 lines of IF statements since the original developer didn't put it in a database. It probably started out as a hack that said "for a quantity of 2, let's offer a discount on shipping", and then later someone said "If we're shipping to states on the west coast, use this price"...etc
- chmod775 5y agoYou can do feature creep for a long time. If you just want a basic working version (that will probably drain your battery), that can be done really quickly. This took me ~10 minutes: #!/bin/sh set -e while true; do URLS="$(xsel | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*")" && if [[ ! "${URLS}" = "${OLD_URLS}" ]]; then echo "${URLS}" >> urls.txt OLD_URLS="${URLS}" fi sleep 1 done;
- thewakalix 5y agoUsing clipnotify[0], one could fix the busy-wait issue pretty easily. [0] https://github.com/cdown/clipnotify https://github.com/cdown/clipnotify
- dugmartin 5y agoIsn't the >> going to cause urls.txt to grow geometrically? eg, copying http://example.com/foo http://example.com/foo and then http://example.com/bar http://example.com/bar and then http://example.com/baz http://example.com/baz I think urls.txt would look like: http://example.com/foo http://example.com/foo http://example.com/bar http://example.com/foo http://example.com/bar http://example.com/baz EDIT: I stand corrected. I should have run the code instead of mentally executing it. One issue I did find when I ran it. The shebang should be: #!/bin/bash as [[ is a bash built-in. I'm on Ubuntu - maybe this works on Mac as /bin/sh is an alias to /bin/bash?
- BenjiWiebe 5y agoDoesn't look like it. The URLS variable could more appropriately be named CURRENT_URL. Singular, not plural.
- stevelosh 5y agoThe user might copy a block of text with multiple URLs, all of which get pulled out by the grep.
- deleted 5y ago[deleted]
- madmax96 5y agoI think that this is a valuable lesson for CS students. I used to underestimate time for the same reasons these students did. The core technology (in this case, listening for the clipboard events) fits in the estimate. Making a product that can actually be useful will take much longer. Estimating effort is important. Work is an investment, so the decision to invest changes with the amount of work. I think this lesson can only be learned the hard way: create a new application and try to get users. You’ll learn where you spend time and get better at estimating. You’ll also appreciate why “simple” features appear slowly in software you use.
- AlwaysRock 5y agoI've found that nearly 100% of companies that say their take home technicals only take "2 hours" actually take much longer. For anything to only take 2 hours you are going to need some prior knowledge and for no roadblocks to come up. Debugging something simple can be a 30 minute detour.
- hhaha88 5y agoYes because I already have Terraform that will spin up a secure prod k8s cluster in any of the big 3 cloud providers. All that’s left is compiling a deps list of react components. English is far more verbose than machine languages. It can easily make a problem seem like there’s a lot more to consider than there is if you’ve already got a corpus of syntax to leverage.
- captn3m0 5y agoIf someone actually builds this, you should just create a directory in the browser bookmarks and let the user use their standard browser (FF/Chrome) to actually browse the data. Maybe isolate it by YYYY-MM directory structure to make it easier to browse. The important thing is that all of these automatically get synced and become searchable easily. Good idea.
- bambax 5y agoRegarding the task, modern OSes offer clipboard history, so IDK if this would be any useful. Is it a random example of an app or something the author thinks they really need?
- htrp 5y agoReminds me of the swing Project management cartoon
- uhtred 5y agoSounds like every grooming meeting to me.
- dwheeler 5y agoThis just highlights difference between a student project proof-of-concept and a product... and thus, you need to know what kind of software you're developing. Monitoring the clipboard periodically, determining if there's a URL, and recording it somewhere if it is - that's easy. If it's a student project to show that something can be done, then you are DONE. If it's a tool that you hope others will actually use, then yes, you need more.