654 karma · joined April 26, 2009
Although, heck, maybe he talks about masturbating in front of girls the whole time.
- If I think I understand everything it involves, then I take my estimate for all the bits, add them up and multiply by 4.
- If I think I understand everything it involves, have done something similar before, and gone through my list of things to do a couple of times looking for stuff I've forgotten, I can multiply it by 2 instead. If I'm unsure how long something will take I am never allowed to round down.
- If I find myself sizing something with the word 'just' in the sentence, I'm missing something big. (e.g. Then it's just a matter of recreating the error condition and making sure my error gets triggered correctly.)
- If I'm not almost finished (i.e. functionality working with some hacks, unit test passes) by halfway through the time then I'm going to miss my deadline.
- I am still mystified as to where that other half of the time goes (I have a proper 90% rule going on), but some of it is getting my code in a shape where I'm happy about checking it in - dealing with comments so they mean things to people other than me, removing ugly bits of code, checking with co-workers in places where I wasn't sure I'd made the right decision. My maximum speed on this is about 500 lines a day. Some more time is then spent getting things back working again, because I'll have broken things in the process. And I need at least a day to get a sandbox build behaving properly, and willing to run on my hardware.
edit: formatting
I wonder whether red buttons would have been less effective, given the association with warning / stop (at least in some cultures).
My suspicion about the cause of this is that I'm conflating 'easy' with 'doesn't take long'. I think there may be some other factors to do with not wanting to admit I'll break stuff when tidying code (so not allowing time to fix it) and somehow assuming that all the little niggles that only take a couple of hours to fix will all be fixed in the same couple of hours.
At a minor level, that could be making sure that the next feature you implement is the one that will make your software much more usable from their point of view, rather than the shiniest or most technically interesting to implement. (e.g. it doesn't matter if your mousetrap automatically telling your computer when it's caught something, if their local mice just aren't interested in $bait_that_works_best_in_bobs_house )
On the larger scale, if your customers are using your product to solve a problem you didn't expect, you can't optimise your product so it sells even better. If the largest user of your mousetrap is the gremlin-catcher's guild, then perhaps you need to look at building more gremlin-specific features, and changing your marketing a little.
And, of course, the simplest metric for validation is that if they ain't buying it then it ain't doing what they want enough for them to pay for it.
Disclaimer: I have never run a startup, let alone used these principles. They just seem to make sense to me.
From a more clinical point of view, it's also a good place to get proof of 'can function as part of a team' - which is another thing employers care about.
Something like SICP has problems that are fairly interesting from a mathematical perspective as well as a coding one. I don't know if there's the equivalent for Python, but it might be worth checking.
MB-types give me a set of sliding scales. I show up as strongly I and strongly N, which allows me to compare myself with ES types - I recognise very little of myself in ES types, and a lot more of myself in IN types, which means I'm biased towards the assumption that there is at least some basis to it.
I can also make predictions about what types my friends are, and (before telling them my guess) ask them what type they are. Currently these predictions seem to be matching up pretty well, although a little fuzzy on the P/J axis.
* As everyone else has mentioned: headphones.
* Work at home when you're doing a particularly complex piece of work.
* Stagger working hours so that there are times when not all employees overlap - start time is anything from (approximately) 8am to 10am.
* Set instant messenger statuses to 'away' or 'in a meeting' for critical work. (This one only works for people not within line-of-sight.
* Have team leads (approx 1 for every 6 people) who can answer more general questions and so act as a buffer between programmers and people who might need to interrupt them.
* Provide people with the ways to find answers rather than the answers themselves (This has the dual purpose of making it less convenient to ask you than to look stuff up, and teaching people to be more independent.)
* Have times when you are more clearly interruptible - this groups the questioning / passing the time of day, so you can get a longer uninterrupted stretch later.
edit: formatting
So basically we're looking at a product that will function well instead of breaking when a typical user uses it in a typical fashion? Surely that's a good thing?
It's just taken me 30 days to add some new CLI functionality to a piece of code (my first ever time working with this bit of the code stack - I'm not familiar with the underlying code, the debug tools, the various ways the build can fail). I know that the standard time for an experienced CLI developer to implement the equivalent extension of functionality on this section of the code is 3 days.
My second piece of CLI functionality is on track for 15 days... so by the time that's finished I will only be 5 times worse. :)
It's been a while since I've done any drawing, but from what I remember you can easily use both in the same image - blocking out the constituent shapes with approximations with around the right proportions, and then making sure that the negative space looks about right in the gaps in between.
Not that it isn't a neat system to have, but I'm guessing it's pretty labour-intensive to get off the ground, and needs a lot more maintenance to keep it reliable.
That would be unfair to all the good non-technical managers out there (I believe this is harder, but still possible). How about "Don't let managers who cannot establish a rapport with technical people manage technical people"?
If you're good at interacting with people and have a background in technology that makes you very valuable - look at the spread of jobs in consultancy and team leadership (software development end of the scale), technical writing (aka information development), technical pre-sales (explaining technical stuff to non-technical people).