Keep ’em coming: Why your first ideas aren’t always the best
gsb.stanford.edu
gsb.stanford.edu
Somewhat tangentially, this is one of the reasons why I dislike a lot of meetings, or, more specifically, meetings that don't have an agenda or a one-page doc upfront. If I'm in a meeting and someone drops an idea on the attendees expecting an immediate evaluation I'll say what I think but that's very often quite wrong and not really what I think. My first impression of things is driven by what I can see as flaws and problems and I don't see the good bits particularly well.
If you give me 24 hours and a doc outlining what you want to do you'll let significantly better feedback. I believe this is true of everyone.
We're trying to move to 6-pagers (a la Amazon) or at least a documentation-first culture but buy-in has been difficult. People find it easier to simply drop a meeting on everyone's calendar and then aimlessly toss out ideas for 30 minutes. When I try to send a document ahead of time, no one has read it when they show up, and they bristle when asked to take the time within the meeting to read it.
Has anyone had success moving to this kind of format? How do you change the culture of an organization away from blathering and toward thoughtful writing?
Throwing ideas on a paper in no particular order and in a few words will exercise the least possible the part of you that expresses idea, and keep the one that generate ideas in focus. Then after you have exhausted the muse, you can start ordering them, chaining them, then putting full sentences, sections, or code blocks, functions and classes.
So the other should be, generate as many ideas as possible, then express them, structure them, put them in shape. Then generate ideas again. Then structure again. But not at the same time.
Because expressing things needs a structure, while creativity thrive without it.
I found that approach problematic, at least for me. How was I supposed to know from the get-go what problems I'll stumble upon, what the conclusions will be, what pivots I'll make. So I just ignored that and started out in the middle, wrote what I knew when I knew it, and then progressed outward to more general, summary chapters. Turned out ok and I think with a lot less rewriting had I listened to her advice.
"From the middle out" ;)
I've been working on a new data format [1] that I'd expected would take me two years to create. 5 years later, I'm finally seeing the light at the end of the tunnel. The format that exists now is almost unrecognizable compared to the initial version, or even what I had after the first year of development (digging through the git repo would prove interesting).
Other than devouring every data format spec I could get my hands on, one big help was to _leave_ it for weeks, even a month, and then come back to it. This allowed me to view something with a fresh perspective that I simply couldn't see if I were working on it every day.
Case in point: Unicode escapes.
I wasn't happy with the current state of affairs for unicode escapes (\uDDDD or \UDDDDDDDD) which are clunky. I wanted something better, without the zero stuffing.
My first incarnation was as follows:
* backslash
* a digit from 0-9 specifying how many hex digits follow
* that many hex digits
So for example \0 is NUL, \19 is TAB, \51f415 is dog, etc.Sure, it works, but that length prefix really makes it hard to read.
A year after that, I came up with the following:
* Initiated with \+
* The hex digits to represent the codepoint
* .
So for example \+0. is NUL, \+9. is TAB, \+1f415. is dog, etc.That was much less confusing, since the numbers are properly isolated from the escape characters.
It wasn't until months later that I finally spotted the obvious after a break:
* Initiated with \{
* The hex digits to represent the codepoint
* }
So for example \{0} is NUL, \{9} is TAB, \{1f415} is dog, etc.And there have been so many of these moments that never would have happened if I'd pushed the format through after only 2 years.
For example, instead of specifying uppercase/lowercase sensitivity in an extra section on "Letter Case", I would recommend defining the allowed character range for every item individually. In addition, it should be specified in detail how characters need to be handled by a conforming processor. Just for example: What Unicode version must be supported? The whole code range or only a part of this version? Is a processor required to check for violations of certain rules, such as illegal case? Should or can a processor normalize case or must it not? If it should or can, must it implement the "default algorithms for case conversion, case detection, and case-less matching" from the Uncode spec,[3] or may it, for example, deviate and support only a subset of Unicode characters?
To take up your own example, here is an edge case that is only very difficult to specify verbally, but can be made very clear in Backus–Naur form: Do you want to allow leading zeros for numbers? If so, infinitly many? A leading '+'? ...
It might be helpful to dinstinquish two phases for a conforming processor, namely checking syntactic conformity of an entity to its Backus–Naur form (eg. Is this entity a number?) and validating a syntactically correct entity in its context accoring to some validation rules (eg. is the number out of range?).
[1] See https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form
[2] For example, you are defining: "A string-like array MUST contain only valid UTF-8 characters.", but when I look at "Escape Sequences", you are using Unicode code points, and not UTF-8 byte sequences. -- Your sepcifications may, of course, require that data exchange must happen in UTF-8 (and should say something about byte order marks). Besides, they should not be conserned with any particular serialisation, but should only work with deserialised Unicode code points.
[3] See sect. 3.13 of https://www.unicode.org/versions/Unicode15.0.0/ch03.pdf
I actually do have an ANTLR file that is about 90% of the way there ( https://github.com/kstenerud/concise-encoding/tree/master/an... ), so I could use those as a basis...
One thing I'm not sure about is how to define a BNF rule that says for example: "An identifier is a series of characters from unicode categories Cf, L, M, N, and these specific symbol characters". BNF feels very ASCII-centric...
I recommend the XML 1.0 (Fifth Edition) specification as an inspiration how to do it: https://www.w3.org/TR/xml
For example, it defines syntactically valid names (for XML tags, attribute names, etc.) as follows:
[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
[5] Name ::= NameStartChar (NameChar)*The most challenging part of my current job (PM at bigco) is that the time and space doesn't exist. Ideas are extruded based on timeline (and other) pressures.
I've only ever been able to let ideas percolate when I've done my own startups or with my open source projects. In some cases good ideas never came to fruition because I couldn't get them to the point they were great. This is one recent example, but there's so many [1].
I've been thinking, for years, about an easier interface to manage
my photos using @getelodie (the Github version) than the command
line. I haven't put my finger on it.
Probably doesn't have to work on mobile. Probably web. Mobile /
desktop apps deteriorate quickly anyways.
It's sort of the opposite of churning out MVPs. One's not better than the other but they definitely lead to different destinations. Lately, I've been even more convinced than before that software that's treated like art yields much more interesting products than software treated like a factory.The more ideas you write down the more ideas you shall have. So keep writing them down! The important thing is getting them out so you know what to improve. Ideas aren't worthless. Mathematics, science all started as ideas.
I work on them in the open in the hopes that we can introduce some of these ideas in the industry.
I journal about futuristic software ideas and parallelism, algorithms, multithreading and database internals.
I am looking for people to talk about inspiring ideas. And to share talking about ideas for programming projects.
I am a member of eatonphil's Discord multiprocess community where we talk about system internals such as database internals and programming language development or theory.
I want people to read my ideas and share their ideas that they caused. And I want to read your ideas. So send me your idea lists!
https://github.com/samsquire/ideas https://github.com/samsquire/ideas2 https://github.com/samsquire/ideas3 https://github.com/samsquire/ideas4 (incomplete) https://GitHub.com/samsquire/startups
For some things I created due to my ideas see my toy database project https://GitHub.com/samsquire/hash-db And my userspace 1:M:N scheduler https://GitHub.com/samsquire/preemptible-thread
I am currently working on a parallel programming language ala Golang and Java
As humans we shy away from the unknown and embrace comfort - this causes us to make the same mistakes over and over, because better the devil you know than confront the unknown and it’s implied possibility of judgement and inadequacy.
The good news is : Often things aren’t as hard as we think! Fear of the unknown is almost always worse than the unknown ends up being - so get out of your comfort zone and get some new neural pathways forming, in whatever form that takes
So, always try to convert your idea into action. Your idea is your call to an unknown journey. In that sense, no idea is bad.
I actually wrote a "shortie" about exactly that: https://littlegreenviper.com/miscellany/problems-and-solutio...
So many good points are highlighted: embrace as many as possible ideas without apriori triage, look for ideas in many places, with diverse people, make unexpected connections, add but also subtract, put things into actions, ...
I recognize myself on many points, even I would not pretend to be perfect on these lines - being also tempted to take shortcuts. And this is why this post is refreshing. It encourages me to keep exploring ideas and putting them into motion.
That’s because, in part, the good stuff is made out of identifying why the wastewater fell short.
That said, usually as I explore an idea it begins to slowly crystalize in to something interesting. I've built furniture, created recipes, written software, designed games, made toys, invented interesting gadgets, published stories and articles, and shot videos, and in all of those cases the resulting artifacts looked nothing like the original concept. There might be a sliver of the original idea, but it has usually drifted far from the initial idea.
I'm currently building an electrocs workbench, I say building, but I mean "thinking about it a lot." I've purchased some cabinet hardware, I've got a stack of boxes for internal storage, but the workbench itself sits as nothing more than a CAD drawing as I tweak how the workbench & cabinet will work. "How deep should this drawer be? How wide should I make that swing out tray?"
I am currently kicking around an ML idea to do with some data at work, I'm doing it as a "fun side project" in my own time, my PM keeps trying to "task it and track it." Don't do that, I need to keep kicking the idea around for a while. When I'm ready, we'll stick a pin in it, nobody is waiting on this, nobody outside of me and the PM knows about it, why add artificial urgency and process to something that's fun?
As a personal side-project I'm building a task list. The idea has evolved so far from "I want to build a task list" that it is barely recognizable. I wrote a lot of the lab notes from that project here at https://github.com/justinlloyd/retro-chores, and without expecting anyone to read through those lab notes, there are places where I write "I'm going to solve it this way" and then a few paragraphs later I write "nope, actually we're going in this direction now" because a little research showed some new evidence.
My lab notes are very free-form, the way to kill creativity and an idea is to impose structure on it. As a creative exercise for problem solving when working on an invention or gadget, is to take a part or component with me, and go for a walk, and mull over how the component works, how it fits in to the design, what issues I will run it to with it. The component acts as a McGuffin, to keep my thoughts focused on the project as I walk.
- Writing ideas down to let them leave your mind
- Expanding on ideas to help ideas and fresh thinking enter and leave your mind (if you think of ideas like books on a shelf, whose pages get written as you turn them).
- Sharing ideas[0] that you aren’t going to work on in the near future. (Fittingly, building a paid list for ideas was one of the ideas from edition #1 [1].
- Getting better and faster at validating ideas and iterating iff they show promise
- Do not talk about ideas you’re working on until after they’re finished except to close friends who ask/care. Marketing/early customer discovery is one thing but avoiding talking helps build “desire” I find.
The idea of trying to pad my backlog of ideas every week is good, but this idea of coming up with ideas every day is quite interesting.
https://tvtropes.org/pmwiki/pmwiki.php/Main/BrilliantButLazy
Don't be so hard on yourself. I completely understand the stress of breaking a nail by being in a hurry.
Haste makes waste :)