rw140
How to Make Things Happen
Startup Skill Set #6: The Startup Manager
Coworking for Introverts?
RPF: Google's Record Playback Framework
Free Printed Copies of "Version Control by Example"
Solving an old surplus mystery
What I’ve Learned With the Cr-48
Making omelettes inside of eggshells
Making classic frequency counters into Nixie clocks
Cardboard Boxes and Plastic Badges: Link-O-Rama
Crayon Manufacturing: Then & Now
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