I have done 3 projects in a row where we did not use story points and simply counted stories. I’m a big advocate of that approach. Let me explain why. I'm an estimation geek who loves the nuances of estimation, and have used function points, use case points, COCOMO, and story points for over 10 years. Over time, I’ve become…
20 May 2013
17 May 2013
This tutorial (broken into 4 parts) shows you how to build a fully-featured web and mobile group chat app with JavaScript.
This tutorial (broken into 4 parts) shows you how to build a fully-featured web and mobile group chat app with JavaScript.
16 May 2013
In this blog post, I will explain another useful example of Twist's customized HTML reports. Usually test scenarios are associated with story cards. Twist simplifies this by allowing scenarios to be tagged to stories.
15 May 2013
This post is mainly mathematical. We left it out of our introduction to categories for brevity, but we should lay these definitions down and some examples before continuing on to universal properties and doing more computation. The reader should feel free to skip this post and return to it later when the words “isomorphism,” “monomorphism,” and “epimorphism” come up again.…
14 May 2013
For about two years now, a norm has emerged on the Mingle team: “Every story is 4 points.” As a BA on our team, I quipped, “Well, that’s because our BAs are particularly good at writing stories.” :)... And then started digging into data to understand why.
As mentioned in my last blog, the newly launched Mingle SaaS runs entirely on the AWS cloud, for which we designed the architecture from scratch. Rethinking our approach to environments in the development and deployment process, has allowed us to shed a lot of problems experienced in traditional data center environments. Following the principles described here has increased the reliability…
13 May 2013
We just recently taped a new round of webmaster videos, and I thought this video deserved a full-fledged blog post. This is my rough estimate (as of early May 2013) of what search engine optimizers (SEOs) and webmasters should expect in the next few months: Bear in mind that this is a very rough estimate, […]
This is a “hairball” post you can ignore. However, this post does trace my thinking about how to scale webmaster communication. Part of me wants to start answering questions I get via email by stripping out the identifying information and then replying with a blog post. Instead of one person getting a single reply, everybody […]
A quick “hairball” post about how sometimes it’s better to just go with the flow. I like how xkcd made this point with a chart of whether it’s worth the time to fix something that’s bugging you. I have a friend who is mechanical engineer. A few years ago he took me for a tour […]
This is a harmless “hairball” post I had as a draft. Me: Hey, they added me to popurls.com! My wife: Never heard of it. (pause) Had you heard of it before? Me: Yeah. Wife: Really? Me: Yeah! Wife: (with an extra helping of sarcasm) Really? Me: Yes! Wife: (dripping with condescension) You’re a very important […]
This is the last half-finished “hairball” blog post about USB devices on Linux. I actually did manage to get a working program that controlled a USB foam missile launcher. Unfortunately, I didn’t document all the steps, so this blog post just sort of stops at some point. I got a USB Missile Launcher for Christmas. […]
What, *another* half-finished blog post about Linux USB drivers? Yup. Suppose you have a device and want a Linux device driver for it. There are a few steps you’ll need to take. One of the heroes in this area is Greg Kroah-Hartman. Greg wrote USBView, which is a Linux tool to enumerate a list of […]
Here’s another “hairball” post about USB devices and drivers on Linux. I wish some expert would write the definitive “here’s how to reverse-engineer a USB device and write a new USB driver” guide. I am definitely not that expert. Once you reverse engineer a Windows USB device enough to know how it works, you’re ready […]
For a while, I was really into reverse-engineering USB drivers. Don’t ask why. The heart wants what the heart wants. I didn’t finish this “hairball” post, but it has some info in it that still might be good. I recently stumbled across this post and it inspired me. I decided to try to reverse engineer […]
Over the years I’ve written a lot of blog posts to debunk misconceptions or claims that weren’t true. Sometimes I publish the blogs posts but often I don’t. This is a pretty typical example post. Someone claimed that Google was evil for removing a particular domain, when in fact the domain had been removed from […]
I started this blog post of Chrome tips in 2008. Even though this is a “hairball” post, some of these tips still work. – control-shift-V will paste your selection as plain text – control-shift-T will re-open the last tab you closed. You can repeat that to keep re-opening previously closed tabs. – Hover over a […]
This “hairball” post about Cuil isn’t really snarky, so I’ll post it. Cuil is no longer around, but it did spawn a funny post on Reddit about Cuil Theory. Cuil launched this week. For a search engineer, a new search engine is like a Christmas present: you can’t wait to play with it. Most search […]
You can ignore this ancient “hairball” blog post. Gather round, kids, and witness this blog post from a time *before internet-connected scales*. That’s right. Back then, we had to hack our Wii balance boards to connect them to the internet. Of course now you can buy wifi-connected scales from Fitbit and Withings. But in a […]
You can ignore this “hairball” blog post. This post dates back to a time when people actually curated, saved, and managed their bookmarks.html file. Then Google Chrome introduced the ability to save and sync all your bookmarks, extensions, etc. in the cloud. Now I sign in to Chrome and everything is synced in the cloud. […]
What’s that? You’ve never heard of an XMPCR? Don’t worry, the rest of the world hasn’t either. You can ignore this “hairball” post as I do spring cleaning on my blog. TimeTrax was a program that allowed XMPCR owners to listen to XM Radio on their computer. Even nicer, the program would “time shift” the […]
Note: this is a “hairball” post and you can ignore it. I was so proud of my first one million steps with a pre-Fitbit pedometer. Now I’ve done 13 million steps and it’s just kind of normal. For the record, the Fitbit is a great little pedometer, but I tend to lose one every few […]
This “hairball” post is ancient and unfinished. Would anyone care about this now? Probably not. Maybe some future data archaeologist will care. In my previous post I covered what a toolchain is and why you need one to cross-compile applications for the iPhone. I’ve seen rumors that there will be a Windows toolchain soon, and […]
My blog is almost eight years old, and I’ve published just under a thousand blog posts in that time. Along the way, I wrote about 100 draft notes that I never published. Sometimes I just didn’t finish the posts. Sometimes I thought they were too boring. Sometimes I wrote a blog post to debunk a […]
Organizations employ a design-up-front approach because they believe they will avert risk and manage change. Reviewing a nice big stack of well-rendered mockups created in a high-end graphic design program can give stakeholders that feeling that whatever comes out the other end of the production pipeline in 6 months, it is going to be ready for customers to use and…
11 May 2013
Pablo Picasso Simplicity and the Artist Some of my favorite of Pablo Picasso’s works are his line drawings. He did a number of them about animals: an owl, a camel, a butterfly, etc. This piece called “Dog” is on my wall: Dachshund-Picasso-Sketch (Jump to interactive demo where we recreate “Dog” using the math in this post) These paintings are extremely…
10 May 2013
My last gig as a tech lead was on Bums on the Saddle, an ecommerce startup where we had to get a working piece of software with minimal functionality to production within a week. We then had to follow it up with frequent releases and be done with the minimum viable product (MVP) in 8 weeks. After the MVP we…
9 May 2013
How to turn regular HTML5 games into a multiplayer HTML5 games. This tutorial covers multiplayer HTML5 game development with a tutorial.
How to turn regular HTML5 games into a multiplayer HTML5 games. This tutorial covers multiplayer HTML5 game development with a tutorial.
First Place: Hourglass Scrum-Ban Board (Winner of an iPad Mini)
8 May 2013
The newly launched Mingle SaaS offering runs entirely on the AWS cloud. As discussed in our earlier blog on Layering the Cloud, because there is no existing system that we have to modify or integrate with, we've got the freedom to design the architecture from scratch. This has led us to rethink the role of environments in our development and…
7 May 2013
Just promoting Spotify stuff here: check out the Snakebite repo on Github, written by Wouter de Bie. It’s a super fast tool to access HDFS over CLI/Python, by accessing the namenode directly over sockets/protobuf. Spotify’s developer blog features a nice blog post outlining what it’s useful for. I think this kicks ass and there will definitely be some kind of…
6 May 2013
Page object pattern maps UI pages to classes and related actions to methods in that class. This allows for better grouping of page actions. All the actions specific to each page will be in a single class. Page object pattern has few advantages:
5 May 2013
All programs need some form of logging built in to them, so we can observe what it is doing. This is especially important when things go wrong. One of the differences between a great programmer and a bad programmer is … Continue reading →
4 May 2013
In this post we’ll get a quick look at two ways to define a category as a type in ML. The first way will be completely trivial: we’ll just write it as a tuple of functions. The second will involve the terribly-named “functor” expression in ML, which allows one to give a bit more structure on data types. The reader…
3 May 2013
Recently someone on twitter complained that Chrome was labeling their site as malware: http://Dvorak.org site blocked by Chrome browser after I wrote negative commentary about Google. I took a few minutes to compose a reply, so I’ll go ahead and post it here: Just to summarize: Chrome’s warning is correct. Your blog is hacked and […]
May is looking to be quite an exciting month at Thoughtworks Studios. I'm writing to give a quick preview of Go’s new value stream mapping, a SaaS version of Mingle, and Snap, our new CI/CD in the cloud offering for users of Github and Heroku. Let's start by taking a look at a screenshot from a new Go feature on…
2 May 2013
This tutorial shows you how to use the geo coordinates API to stream geo coordinate data from MongoDB to an application using PubNub
This tutorial shows you how to use the geo coordinates API to stream geo coordinate data from MongoDB to an application using PubNub
From serious to scripting: The evolution of programming languages.
This is the second part in a two part blog series which talks about Twist execution hooks and customizable HTML reports. In the first post, we described collecting the step execution time and posting it in Twist data store. Here we will discuss customizing the HTML report to visualize the step execution timings.
1 May 2013
We've just launched Mingle SaaS, and as part of designing & building the architecture from scratch, we were able to challenge and rethink the way we build systems on the cloud. This is the first part in a series of blogs discussing our learning. One of the great things about the cloud is the way you can just run a…
30 Apr 2013
Previously on this blog, we’ve covered two major kinds of algebraic objects: the vector space and the group. There are at least two more fundamental algebraic objects every mathematician should something know about. The first, and the focus of this primer, is the ring. The second, which we’ve mentioned briefly in passing on this blog, is the field. There are…
This blog post talks about measuring the execution time for each step and reporting it in Twist HTML reports. This is very helpful to analyze application performance and it also makes it easy to spot parts of the application that aren't performing well. This is the first part of a two-part blog series. The second part talks about consuming this…
The Journey from Doing Agile to Being Agile Being agile is much more than applying some techniques to run software projects - it requires a commitment to adaptive leadership, a focus on delivering value fast, and a different understanding of what your organizations' portfolio should look like. This webinar will investigate some of the key changes to becoming agile, with…
27 Apr 2013
The simple way to get featured on big data blog these days seem to be Build something that does 1 thing super well but nothing else Benchmark it against Hadoop Publish stats showing that it’s 100x faster than Hadoop $$$ Spark claims their 100x faster than Hadoop and there’s a lot of stats showing Redshift is 10x faster than Hadoop.…
26 Apr 2013
"From Rust rookie to pro: A comprehensive guide for beginners"
I like the editing!
25 Apr 2013
Late last year, six women crowded in to a Mitte cafe booth and listened to Berlin Geekettes founder Jess Erickson share her idea: Berlin’s first all-women hackathon. With SoundCloud’s Amelie Anglade the then newly-appointed the Berlin Geekettes Tech Ambassador, we agreed that it was a great idea to produce the hackathon as a partnership between the Geekettes and the women…
24 Apr 2013
For a list of all the posts on Category Theory, see the Main Content page. It is time for us to formally define what a category is, to see a wealth of examples. In our next post we’ll see how the definitions laid out here translate to programming constructs. As we’ve said in our soft motivational post on categories, the…
23 Apr 2013
Companies rarely promote people into leadership roles who haven’t been consistently seen and measured. It’s a familiarity thing, and it’s a trust thing. We’re not saying that the people who get promoted are stars during every “crucible” moment at the office, but at least they’re present and accounted for. And their presence says: Work is my top priority. I’m committed…
21 Apr 2013
A step-by-step guide for rapidly creating a shared vision for execution So how do you do great design in a rapid, multidisciplinary and inclusive way? How do you set up new projects for success in a fast moving, agile environment? How do you ensure shared understanding and ownership of new initiatives in just a few days? I now focus a…
19 Apr 2013
Say we have a set up like the one below. We have two pipelines -- one for component-1 (C1) and another for component-2 (C2). C1 just builds off its source code in version control (VCS-1). C2 has its source in a different repository (VCS-2) and is also dependent (d3) on C1. In Go terminology, C1 has one upstream dependency d1…
18 Apr 2013
A little while ago I was contacted about a new merge tool from the company behind PlasticSCM. (I haven’t used Plastic myself, but I’d heard of it.) My initial reaction was that I wasn’t interested in anything which required me to learn yet another source control system, but SemanticMerge is independent of PlasticSCM. My interested … Continue reading New tool…
He who travels light, goes far. -- Chinese proverb Does this kind of conversation sound familiar to you? Customer: I want abc, because xyz. Product team: Sorry, we don’t have it now, but I’ll add it to our backlog. This comes up for me frequently on the Mingle team. We carefully capture all requests and spend time to follow up…
16 Apr 2013
Perhaps primarily due to the prominence of monads in the Haskell programming language, programmers are often curious about category theory. Proponents of Haskell and other functional languages can put category-theoretic concepts on a pedestal or in a mexican restaurant, and their benefits can seem as mysterious as they are magical. For instance, the most common use of a monad in…
The endpoint has traditionally accepted an parameter for ordering results by either creation date or ‘hotness’. The method for calculating…
15 Apr 2013
Probabilistic arguments are a key tool for the analysis of algorithms in machine learning theory and probability theory. They also assume a prominent role in the analysis of randomized and streaming algorithms, where one imposes a restriction on the amount of storage space an algorithm is allowed to use for its computations (usually sublinear in the size of the input).…
In my previous blog, I introduced the case for why Executives need to get a handle on CD. In this blog I detail the first baby step in your organizations CD journey -- getting buy-in from the "right" people.
13 Apr 2013
I picked up an issue of Foreign Affairs while flying back to NYC from SFO. It features this long interview with U.S. General Stanley McChrystal and I thought it was pretty interesting how striking some of the similarities are between fighting in a war and developing software. On cycle time and how it’s important to learn and integrate quickly: In…
12 Apr 2013
Annoy is a simple package to find approximate nearest neighbors (ANN) that I just put on Github. I’m not trying to compete with existing packages, but Annoy has a couple of features that makes it pretty useful. Most importantly, it uses very little memory and can put everything in a contiguous blob that you can mmap from disk. This way…
11 Apr 2013
We talk a lot in the agile world about "delivering value". It is the central theme of almost every agile workshop I have attended, a catchphrase in the agile world, and the focus of agile projects. But how do we know if we are delivering value?
10 Apr 2013
Update: the mistakes made in the code posted here are fixed and explained in a subsequent post (one minor code bug was fixed here, and a less minor conceptual bug is fixed in the linked post). In our last post in this series on topology, we defined the homology group. Specifically, we built up a topological space as a simplicial…
9 Apr 2013
Every time any change is introduced - application, database script, automated test, infrastructure, deployment script, configuration, etc. - the change should kick off a gauntlet of validation. The quicker you can find out if a change breaks something the better off you are and the more confidence you will have in your software. We tell the teams who want to…
7 Apr 2013
In this post we will assume the reader has a passing familiarity with some of the basic concepts of functional programming (the map, fold, and filter functions). We introduce these topics in our Racket primer, but the average reader will understand the majority of this primer without expertise in functional programming. Follow-ups to this post can be found in the…
I recently got an e-mail from Michael Sherman, a teacher in New York. He had developed a variation of the card game Set called Complementary Pairs. This is how he described it: “We have Set competitions at the school where … Continue reading →
5 Apr 2013
This is a question I'm frequently asked/challenged with as an analyst. Here is a slideshare based on industry wisdom and personal experience I've presented to clients (and Agile Perth) that collates ways to optimize your user stories.
4 Apr 2013
It all started way too early for our taste, but we made it to Berlin Expert days in time! We’re looking forward to the talks, and to meeting tons of nerdy Java developers! If you have any questions about our job offers, don’t hesitate to bump into us. Spot us by looking for our T-Shirts, […]
I once started a debate on how to write a User Story. The most popular style by far is “As a , I want in order to .” I am not a big fan of this style because I find most teams either write poor value statements or don’t write them at all. There is power in understanding the value…
3 Apr 2013
This series on topology has been long and hard, but we’re are quickly approaching the topics where we can actually write programs. For this and the next post on homology, the most important background we will need is a solid foundation in linear algebra, specifically in row-reducing matrices (and the interpretation of row-reduction as a change of basis of a…
Through a combination of continuous integration tools, deployment tools, project management tools and custom scripts, software professionals have become very good at automating their processes. But what happens when we automate a broken process?
2 Apr 2013
In my previous post on what programmers want, I ranked working from home low on the list. Several commenters value working from home higher, and K (not his real name) added a link to a great TED talk given by … Continue reading →
1 Apr 2013
You may have heard of my 30 day challenges, where I try something new for 30 days. Those challenges are great to try out a new habit and see how you like it. But I’m also a big believer in picking out really big goals too. In 2010 I trained for a few months so […]
29 Mar 2013
13.2 marks a big release for the Mingle team with the introduction of our new WYSIWYG editor. After hearing that our previous editor was painful for many of our customers, much in the same way with our program backlog, we reached out to understand the root of their pain and the core activity it was affecting.
As a Thoughtworks consultant, I spend a large portion of my time helping organizations solve their challenges and realize their business goals. In the last few years I have focused on helping our clients in their attempts to introduce Continuous Delivery (CD) practices. One of the core challenges that these companies faced, was convincing senior management of the value that…
28 Mar 2013
One of the main areas of difficulty in elementary probability, and one that requires the highest levels of scrutiny and rigor, is conditional probability. The ideas are simple enough: that we assign probabilities relative to the occurrence of some event. But shrewd applications of conditional probability (and in particular, efficient ways to compute conditional probability) are key to successful applications…
This American Life is an excellent podcast, but occasionally puts out episodes on subjects I don't care for - fiction, reminisces about home life, etc. There is one heuristic you should use for filtering American Life podcasts: listen to the podcasts they release that tell one story for the whole hour. Example whole-hour podcasts, that […]
26 Mar 2013
Unlock Python's potential with these must-watch PyCon 2013 talks!
I got an e-mail last week from three students at Halmstad University doing a three month project on what programmers want in a job, and how companies can attract talented programmers. Here are my answers to their questions, in order … Continue reading →
“Tell me, I forget. Show me, I remember. Involve me, I understand.”—Chinese Proverb Almost all Agile teams have group time for product owners or business analysts to share user stories. On the Mingle team, it happens everyday in a mix of scheduled meetings and ad-hoc conversations. I consciously practice the following three tactics to ensure quality interactions.
23 Mar 2013
Update May 26, 2014 The concepts in this article are still true, but I’ve recorded a screencast showing how to use ember without ember data using ember-cli and the latest version of Ember. It goes beyond the contents of this article, showing how to create an adapter, store and even your own identity map. Check it out! Ember Data is…
22 Mar 2013
Elias Freider just talked about Luigi at PyData 2013: The presentation above is much better than one I put together a few weeks ago. In case anyone is interested I'll include it too:
We recently held an internal poll here at Thoughtworks about how you should write user stories. The results? Highly weighted toward common agile formats:
21 Mar 2013
In this final post on the basic four methods of proof (but perhaps not our last post on proof methods), we consider the proof by induction. Proving Statements About All Natural Numbers Induction comes in many flavors, but the goal never changes. We use induction when we want to prove something is true about all natural numbers. These statements will…
20 Mar 2013
Maven based build pipelines are fairly common. Chef based deployment pipelines are also gaining traction. In this talk, Sriram will demonstrate how to design and connect the two using Go. Along the way he'll explain why not to use maven-snaphosts, how to make Chef talk to Nexus and provide several tips on Go usage.
19 Mar 2013
Momentan befindet sich die NeosIT GmbH in der Situation, dass wir zum 1.8.2013 zwei neue Azubis suchen. Nachdem wir vor einigen Wochen die Ausschreibung beim Arbeitsamt aufgegeben hatten, kamen viele Bewerbungen herein. Als Ausbilder bin ich der direkte Ansprechpartner für potenzielle Auszubildende und dementsprechend stark in den Auswahlprozess involviert. Einige […] The post Eine interessante Bewerbung zum Beruf des Fachinformatikers…
18 Mar 2013
It is a rare application that doesn't ever need a hot-fix to a deployed version. If to err is human, I prove I am human many times a day and sometimes, these get into production. Chances are, yours might too.
Why version configuration? Fully versioned configuration is a prerequisite for fully automated deployment. By fully automated deployment, we mean the ability to deploy to a set of machines (physical, virtual or cloud) having nothing but a basic level of provisioning (OS, hotfixes, basic network and disk config).
15 Mar 2013
Email from my alma mater: Dear Members of the Claremont McKenna College Community, I am writing to update you on an important action taken by the Board of Trustees at its meeting on March 9, 2013. In particular, the Board acted to end the College’s “No Packaged Loan” financial aid policy. Beginning with the fall […]
Something used to trouble me. As I presented design documents to my team they would focus on minor details rather than the big picture. The question of whether a loading spinner should appear in the center or top left of a dialogue became more critical than if the feature to be built was compelling for a user in the first…
14 Mar 2013
As part of release 13.1, we have added a bit of functionality to Go’s custom command. Accordingly, the task menu item has changed from ‘Custom Command’ to ‘More’.
11 Mar 2013
This is an article about the nice and mostly the ugly parts of customizing websites for print via CSS. During the work on our new design for Small Improvements I had to create CSS for print for the first time, following are the experiences I made, summarized in a way I think it would have […]
7 Mar 2013
At Stripe, we rely heavily on ruby and EventMachine to power various internal and external services. Over the last several months, we’ve known that one such service suffered from a gradual memory leak, that would cause its memory usage to gradually balloon from a normal ~50MB to multiple gigabytes. It was easy enough to work around the leak by adding…
5 Mar 2013
Charting a young reader's journey through chapter books.
this is an archive of an old article by John Carmack which seems to have disappeared off of the internet Abstract Virtual reality (VR) is one of the most demanding human-in-the-loop applications from a latency standpoint. The latency between the physical movement of a user’s head and updated photons from a head mounted display reaching their eyes is one of…
Ruby 2.0 has a cool new feature that many people talk about: TracePoint. TracePoint essentially allows you to hook into Ruby’s events and listen for events. Being curious and since I just started a brand new Rails 4/Ruby 2 app, I decided to write a little middleware and see what Rails is up to when handling incoming requests. Here is…
4 Mar 2013
The Problem with Cropping Every programmer or graphic designer with some web development experience can attest to the fact that finding good images that have an exactly specified size is a pain. Since the dimensions of the sought picture are usually inflexible, an uncomfortable compromise can come in the form of cropping a large image down to size or scaling…