Recent Posts (page 64 / 71)

by Leon Rosenshein

Open Source

We all benefit from it. I know I do. The number of open source plugins/add-ons/tools I have had to install to make OSX useable as a developer system is way higher than I think it should be, but there it is. I've done a little bit to help out open source projects, from HDFS to Docker to Peloton. Not PRs or commits, but bug reports, beta testing, code contributions that someone else added, but the benefits I've getting fro OS tools far outweighs what I've put in. And that's true for just about everyone I've talked to or heard about, but not everyone. So how do those folks get compensated? What do we expect from them going forward? I think everyone should get to make that choice for themselves, but it can be a slippery slope. I don't think it's as bad as this article says, but it does raise some good points. How do we make sure we're not valuing "code" over "people"?


by Leon Rosenshein

One On One Meetings

What are they? That's easy. They're (usually) regularly scheduled 2 person meetings with a manager and direct report. What are they good for? More fundamentally, who are they for? Once you know and internalize the last question answers to any other questions become much clearer, so let's tackle that part first and be very clear.

1:1 meetings, whether between a manager and direct report, a skip level, or a meeting with the CEO, belong to, and are for, the subordinate. Not the manager. Not the Director. Not the CEO. That's not to say those people don't get value, but the 1:1 meeting belongs to, and is for, the subordinate.

What are your 1:1 meetings good for? As much as I don't like design by counter-example (there's a topic for the future), 1:1 meetings are NOT status meetings. Status may come up in the course of a discussion, but that's not why you're there. That said, they can be about anything you want, because it's your meeting. Things that they're commonly used for are giving and getting feedback, understanding what your manager really values, identifying blockers and enlisting help, finding and taking advantage of opportunities, bringing up new ideas and issues, and career development. A corollary to owning the 1:1 meeting is that you also own the growth of your career. Your manager is there to help you and help you take advantage opportunities, but the responsibility is yours.

So take ownership of your 1:1 meetings. Make sure they're scheduled. I find weekly is best because if you miss one it's only a week. If you have them scheduled every other week and miss one suddenly they're monthly meetings and that's probably not frequent enough. Be flexible, but don't let you manager slide every time. Be willing to move an instance, but have it. Have an agenda, and share it with your manager early so they're prepared. Keep a documented record of the meetings, including notes and action items.

by Leon Rosenshein
by Leon Rosenshein

Writing It Down

RFCs are critical. None of us know everything about every system, deeply understand all of the customer use cases, or can anticipate what some other group is working on. An RFC gets your ideas and plans down in a shareable and discussable format. It's about documenting a specific solution to a problem and gives others insight into what you're doing, why you're doing it, and how it might impact them. It lets others use their experience and point of view to help avoid problems in the future. This is critical to what we do and we should not only do more of, we should do more to at least be aware of everyone else's RFCs, commenting and questioning where appropriate. You can think of an RFC as a mission statement for a team/project.

But today's entry isn't about RFCs. It's about what comes before the RFC. The problem with RFCs is that they're largely static and represent the thinking at the beginning of the implementation cycle. Why are you writing that RFC anyway (hint: it's not because you need to check a box for next year's promo packet)? Whether you call them Filememos, Architectural Decision Records, RFPs, Vision Documents, or something else entirely, you write them to answer that question.

Writing the vision doc means understanding the problem you're solving, getting agreement on the required use cases, and documenting the goals and why those are the goals. It's about providing context for the next person (and sometimes that person is future you) who needs to care so they are working to the same goals and can make a choice compatible with those goals.

Development takes time. Existing use cases get changed and new ones get added. New people join the team. Multiple decisions get made every day. part of making those decisions is how things fit into the detailed design as put forth in the RFC. Equally important to those decisions is the business problem we're trying to solve. Vision docs describe the end state we want so those decisions, regardless of who makes them, are all in service of the same end state.

It doesn't matter if you're architecting a whole new self-driving vehicle, building an entire ML pipeline, or adding an endpoint to an existing service, you won't be working alone. For something the size of self-driving vehicle you need to understand the problem you're solving and make sure you, your co-developers, and especially your customers understand the problem you're trying to solve. Features are great. You solve problems with features, but your customers don't buy features. They buy solutions to problems (use cases). A vision doc keeps those solutions in the forefront at all times.

by Leon Rosenshein

Pattern Matching

We are pattern matching machines. We love them and we'll find and match patterns even if they're not there. From raindrops on a sidewalk to the stock market to assassinations of US Presidents, we project patterns into statistically knowable events and then make predictions. If your take the long view you'll do OK, but Hari Seldon's psychohistory? Maybe we'll get there one day, but today is not that day. The same applies to large, interdependent systems. We know they're going to have problems, we might even be able to predict how many will happen over a sufficiently long period, but we can't accurately predict when the next one is going to happen.

Black Swan is a seemingly random event that, in retrospect, we can see that it was inevitable. Just like the black swan, we don't know exactly when one of our systems is going to have a problem, but we know it will. Knowing that it will happen, we can prepare. We can think about a taxonomy of problems and put addition systems and processes in place to minimize their impact. Here's one such taxonomy and how we can learn from it.

by Leon Rosenshein

Lego

In today's Lego related ideas, and in honor of tomorrow's team build of the Imperial Star Destroyer, Systems Thinking at Work and Play. Systems are all around us, and there are lots of educational shows that show them. From "Dirty Jobs" to "The Magic School Bus", understanding how things are built out of parts and work together is the system mindset. One of my favorite systems, and it has been lo these many years, is the Lego System. Yes, when you dump 4784 bricks on a conference room table it's not a system, it's just a pile of plastic parts, but when you put it together it's more than the sum of its parts, it's a system of reusable components. Add in some Technic parts and/or a Mindstorm kit and now you're really talking. But what is it about systems that is so interesting and important? To me, it's the fact that you can take things that individually have no, or very simple, responses and then combine them, and through their relationships create complex responses. Systems are also a way to manage complexity. Boundaries and relationships help us understand our world (or our SDV) and let us focus on individual components as needed.

by Leon Rosenshein

In The Beginning Was The Command Line

Back in the old days the competition for users came down to Operating Systems. OS's were proprietary walled gardens and everything was done in service of selling the OS. Sun and Solaris owned the Internet (the network is the computer), Microsoft and Windows were going after the desktop (a computer on every desk), and Apple had the creative niche (think differently), and BeOS and NextStep were out there selling themselves as better than everything else, but no-one was buying. Except for that oddball OS in the corner, Linux. It's available online, you need to know what you're doing (or have access to someone who does), doesn't support all of your hardware, and it's free, but outside of those constraints, it just works. Oh, and it lives by the command line.

20 years ago Wednesday, Neal Stephenson released his take on the battle. It has car analogies, fan-bois, cultural relativism, and oral histories. A lot of it is either dated or no longer relevant, but the themes certainly still apply, and Linux is still Linux. And the command line is still there, and we spend oh so much time using it.

Understanding the past is key to the future, whether it's user interface, architecture, cultural directions, market forces, or AV platforms.


by Leon Rosenshein

Statistics

Big data is all about statistics, and lots of what we do comes down to statistics. Precision, Recall, MPBE, Code Coverage, SLAs, expected battery life, Texas Hold-em, and more. We look at a large enough sample, do some math (or let a computer do so math that we may or may not be able to follow), pick a threshold, and declare that meeting it is enough. No-one has found a better way. Of course none of the statistics guarantee how an individual instance will go. We can know that 99.9999999% of calls to a web service will take less than 150ms, yet it's still possible for 3 calls in a row to take 200ms. So what's a poor developer/engineer/data scientist/PM to do? It's the old boy scout motto, "Be Prepared". It's defense in depth. It's adding watchdogs and timeouts. It's fallback positions. And it's being honest with ourselves that statistics and probabilities are not certainties, but that's the way to bet. Here's a view of how it can impact results and decisions in the medical field.

by Leon Rosenshein

WAT?

I was working on the Infra dashboard yesterday and had a problem with one of my <script> tags. There's some bug somewhere that was translating

 <script type="method">
    if (Math.random() &lt; 0.05) {
      document.getElementById('logo').src = '/static/other.png';
    }
</script>

to

 &lt;script type="method">
    if (Math.random() &lt; 0.05) {
      document.getElementById('logo').src = '/static/other.png';
    }
  &lt;/script>

And of course, that didn't work. Turns out that there's a parsing bug somewhere and removing the type="method" from the <script> tag makes it work. My first reaction to figuring this out was WatAccording to XKCD there are 10000 people who will learn about Wat? today. If you're one of the lucky 10000, enjoy

by Leon Rosenshein

Languages

We’re all multilingual. We speak C, C++ (yes, they are different languages, not dialects), Python, Go, Java, Javascript, Matlab, Assembler, and many others with varying fluency. And that’s good and proper. Using the right tool at the right time is one of the marks of a craftsperson, just as much as the ability to do quality work with the available tools is. Master craftspeople not only know which tool to pull out of their toolbox, they also stay aware of new tools and methods being developed. InfoQ recently published their Programing Languages Trend for 2019. The list and commentary are interesting for themselves, and even more interesting is some of the back story about why people are starting to use those languages. Understanding the problems the different languages are trying to solve can give you a whole new perspective on whatever problem is currently top of mind for all of us.

And, on an unrelated note, I was looking through some of the repos we have and noticed that many of them have .envrc file in the root and was wondering what that was for. I took a look inside one and there was this comment

#!/bin/bash
# Users of direnv can run `direnv allow .` here to automatically update the
# PATH.
# enter this directory or any descendent. <https://direnv.net/>

and suddenly a light went off. I’ve been struggling to deal with multiple repos across ATG and Prime with different (and often incompatible) versions of their toolchains and wondering what to do about it, and there’s the answer. direnv. I think I can even get it to handle switching versions of arc for me as I switch repos, but I haven’t dug that deeply yet. Check out direnv.net. As the kids say these days, 10 out of 10, would recommend.