Posts

Showing posts from 2014

Lean Startup is about market making your product

I am a big fan of lean startup, and will therefore tell you why. Still, the method is not universal, and has its limits, I will tell you about that too.  If there is one thing you should remember is that lean startup gives you a simple recipe that can shape a new product both to meet the needs of its customers and to be profitable. To do that, the method needs customer interaction, and without enough of it, the method is likely to fail. Lean startup is an iterative process. Yet unlike other development processes that only focus on the "how", lean startup gives you some very precise rules to follow on the "what".  Once you understand how the method works, these rules make sense. Here are the important "whats": Value is defined relative to a reverse income statement (defined as the "engine of growth"). In effect you are expected to model both your product and your customers. You can use a simple model of fix price values per events (such as cli...

Recreational programming: zipper augmentations

I rarely program professionally, so when I write software, it is in the spare moments I have between home and and work (theses days providing consultancy services). That really means on the bus and local tram and subway network here in Zurich. I do not program for the fun of making my executables run; I mean, for the fun of having the program really do something useful. I program for the fun of the exploration! What I enjoy is understanding how to use new concepts. Usually these are in specific research domains,  which unfortunately for this blog, are still to remain unpublished, but the last two weeks have had me travel into more classical mathematical and software territories, which allows me to talk about them here. The way research goes, is that you need take leaps of faith. There are lots of territories to explore, you have these gut feelings that tell you to go in one direction and in other. Yet each of these explorations will take time and effort, leaving you with no oth...

Scalable Designs for Multicore

Image
I put together this presentation on how to design software that scales on multicores. It uses examples in Java, yet the basic learning is same in all languages. (In fact, I learned it in C++). (Original video on YouTube is: https://www.youtube.com/watch?v=op2Fh-iiKoA ). Here's the summaries: Basic multicore scalability (in Java) Parallelize with threads and thread pools Use enough threads (but not too many) Thread pools assure execution on multiple cores Keep same objects on same cores (as much as possible) A void having multiple tasks working on the same data Avoid locks (ex. attribute synchronized ) Avoid cache line contention Patterns to manage lock conflicts Structured parallelism Non -blocking data structures Immutable or purely functional data structures Patterns to manage core affinity Tasks last as long as program Tasks last as long as service they implement Tasks are dynamically extended All original conte...