fnm is one such native ReasonML tool that’s at least 100x faster than any other node version switcher. Recommended!
Sajith asked me to talk about a programming topic with the good folks at Shopper.com recently, and I picked something near and dear to my heart: how to engineer with pragmatism at heart, how to navigate the challenges between business folks who want really fast turnaround time, and your engineering soul that wants good, maintainable craftsman-worthy code.
This wasn’t my finest presentation, but I liked the discussion that came up in between Sajith & me, and there were several things I’d improve if I were to give this talk again (this requires that you have either watched the video or at least skimmed through the slides above):
I wish I had called this Pragmatic Engineering instead because a) there is very little programming in these slides, and b) people will think this is from the book, when it’s clearly not.
Sajith brought up a good point in between that pragmatism is only possible because you lean on the shoulders of giants who wrote code before you (i.e. open source code). And that work priority is independent of these decisions: you plan & prioritise based on what makes sense to your organisation. I somehow should make this clearer in the slides and the talk that “big rocks” doesn’t necessarily imply a work priority.
I think the ending is very weak. I didn’t directly address what measures are possible for a pragmatic organisation. Here’s an attempt:
Since the primary thumb-rule emphasises change, let’s measure speed of change or velocity. This is a leading measure, and a corresponding lagging one could be customer features delivered / quarter.
A corresponding negative measure related to velocity could be defect counts, and defect escape rates, these can be measured from leading to lagging, as in DERs caught by PR reviews, your staging or QA environment, your beta and the worst of em all: in production.
If there’s one thing that impacts the velocity of the team it’s good test coverage. So both code and feature coverage measures, and test resiliency metrics like false negatives should be measured and constantly improved. These are all leading measures.
Measuring the warts in your code (e.g. FIXME/TODO lines, or “known issues”) is also a good leading measure. This should trend down.
And finally, measure Cycle Time, but segmented by business use cases. The intent here is that all non-“Big Rock” items should have low Cycle Time. If not: maybe you don’t have the right processes or pragmatic software selection there yet. As an example: if a marketing page typo fix takes your company a week to execute (perhaps because it has to be prioritised in a sprint backlog), then might have a problem.
I’m willing and excited to do more such talks! If you’d like me to speak to a small group, do send me a message!
: Feature coverage was a term we invented at Lucideus to measure how many important features were covered by integration tests. Unit test coverage is easy to measure, integration tests aren’t, and only if you measure something can you consistently improve. The eventual definition ended up being something along the lines of “The % of test cases with priority Critical or High that were automated.” We reported these metrics segmented by feature.
I used Story Points for the first time at Lucideus and grew to like them as a substitute measure for effort estimation. Most teams however kind of blindly navigate this estimation by “gut feel” and “how much this effort feels like”. Having a good story points examples document for each team is a good way to make sure this calibration is done better.
So Doist offered me a welcome gift when I joined, and I bought something I’ve always wanted—a record player. It’s been on my wishlist for ages, but I never really bought it because 1) it’s expensive, and 2) it’s hard to justify in this age of electronic, streaming music. I initially thought of a Fluance RT-82 but it was out-of-stock, and so I picked a Denon DP-300F. It’s a bit more muted-looking than the Fluance, but honestly it works better: fully automatic, and it’s much easier to setup.
The last time I felt this way after getting something was when I bought a bike, and I’ve since realised I like nice, tangible, lovely things. It’s part of the reason why I really like Apple products or a Leica camera, or a Royal Enfield. It’s the sense that when you use them, you are holding something thoughtfully, intentionally designed for a purpose.
This is how it looks & sounds:
I bought some records too, and have been listening to em non-stop since I got this 😀
Each record is just wonderful—both to listen to, and then experience its covers and how it feels inside. Here’s the Beatles one:
So why records? I got into this knowing it’s an extremely temperamental medium: I had to adjust the tonearm quite a bit to even get the record to play. It’s from an era ago: and there’s cracks and pops in the music at times. Sometimes the stylus skids over the tracks, causing echoes or distortion. The records get dusty, just like books and have to be cleaned, and they have to be stored strictly vertically, otherwise they may warp or bend. It’s… difficult, and I’m sure many a record owner would have breathed a sigh of relief when cassettes came around, and then CDs, and finally the end of physical music.
Why records? Because:
It is physical music. There is a sense of certain tangibility in owning real things that you’ll never get from a virtual medium. The texture of the cover as you take out a record, the act of cleaning a record with your brush. Placing it carefully on the mat. Picking up the stylus and placing it down for the music to come alive. This is part of the reason why beautiful hardware from Apple still sells.
It slows you down. There’s only a handful of tracks on a side before you have to manually flip the record around. You have a limited music collection, and you tend to re-listen, and find nuances in music instead of searching for the next fix. It’s much like the archaic focusing tech on a Leica M: so much slower than auto-focus, but that is the whole point. You slow down and sometimes you take better photos.
There’s a bunch of bad things in old tech, but there’s a lot of good too: records are physical, it won’t ever disappear from my library because of artists rights issues, and my copy will wear with me the more I listen, it’ll be my own unique sound. If you have a favourite concert pressed direct to a record, it’ll be the closest you’ll come to actually being there—there’s no remixes or editing possible here.
And then there are memories: of a record you’ve always wanted to own, but somebody gifted them to you. Of the first time you listened to a record with friends. It’s a piece of a dream come true.
That’s enough about records. As you probably can guess, I love this gift. 🙂
: It’s a tale of woe for the bike unfortunately. I had to move away to Bangalore, and then my back pain really acted up, and the bike remained unused for so long that it started to rust. I sold it off. Some day, I’ll buy another.
So I watched and loved the new She-ra on Netflix, and that made me interested in how all of this came about. He-man is a bit strange in that unlike most superheroes, the toy came first and then came all the mythology & the storyline around it. But the story definitely appealed to kids: it still has one of those phrases I’ll never forget from when I was a kid: “By the power of Grayskull! I have the power!”
So it’s interesting to learn how the character was crafted and built, and what was good, and what went wrong in He-man history. Watch: Power of Grayskull on Netflix.