Hi there, nice to meet you. Follow me at http://belfong.com/tweets
416 stories
·
2 followers

How to get useful answers to your questions

2 Shares

5 years ago I wrote a post called how to ask good questions. I still really like that post, but it’s missing a few of the tactics I use to get useful answers like “interrupt people when they’re going off on an irrelevant tangent”.

what can go wrong when asking questions

Often when I ask a vague or underspecified question, what happens is one of:

  1. the person starts by explaining a bunch of stuff I already know
  2. the person explains some things which I don’t know, but which I don’t think are relevant to my problem
  3. the person starts giving a relevant explanation, but using terminology that I don’t understand, so I still end up being confused

None of these give me the answer to my question and this can be quite frustrating (it often feels condescending when someone embarks on a lengthy explanation of things I already know, even if they had no way of knowing that I already know those things), so let’s talk about I try to avoid situations like this and get the answers I need.

Before we talk about interrupting, I want to talk about my 2 favourite question-asking tactics again – asking yes/no questions and stating your understanding.

ask yes/no questions

My favourite tactic is to ask a yes/no question. What I love about this is that there’s a much lower chance that the person answering will go off on an irrelevant tangent – they’ll almost always say something useful to me.

I find that it’s often possible to come up with yes/no questions even when discussing a complicated topic. For example, here are a bunch of yes/no questions I asked a friend when trying to learn a little bit about databases from them:

  • how often do you expect db failovers to happen? like every week?
  • do you need to scale up by hand?
  • are fb/dropbox both using mysql?
  • does fb have some kind of custom proprietary mysql management software?
  • is this because mysql and postgres were designed at a time when people didn’t think failover was something you’d have to do that frequently?
  • i still don’t really understand that blog post about replsets, like is he saying that mongodb replication is easier to set up than mysql replication?
  • is orchestrator a proxy?
  • is the goal of the replicas you’re talking about to be read replicas for performance?
  • do you route queries to a shard based on the id you’re searching for?
  • is the point that with compression it takes extra time to read but it doesn’t matter because you almost never read?

The answers to yes/no questions usually aren’t just “yes” or “no” – for all of those questions my friend elaborated on the answer, and the elaborations were always useful to me.

You’ll notice that some of those questions are “check my understanding” questions – like “do you route queries to a shard based on the id you’re searching for?” was my previous understanding of how database sharding worked, and I wanted to check if it was correct or not.

I also find that yes/no questions get me answers faster because they’re relatively easy to answer quickly.

state your current understanding

My second favourite tactic is to state my understanding of how the system works.

Here’s an example from the “asking good questions” post of a “state your understanding” email I sent to the rkt-dev mailing list:

I’ve been trying to understand why the tree store / image store are designed the way they are in rkt.

My current understanding of how Docker’s image storage on disk works right now (from https://docs.docker.com/engine/userguide/storagedriver/imagesandcontainers/) is:

  • every layer gets one directory, which is basically that layer’s filesystem
  • at runtime, they all get stacked (via whatever CoW filesystem you’re using)
  • every time you do IO, you go through the stack of directories (or however these overlay drivers work)

my current understanding of rkt’s image storage on disk is: (from the “image lifecycle” section here: https://github.com/coreos/rkt/blob/master/Documentation/devel/architecture.md)

  • every layer gets an image in the image store
  • when you run an ACI file, all the images that that ACI depends on get unpacked and copied into a single directory (in the tree store)

guess at why rkt decided to architect its storage differently from Docker:

  1. having very deep overlay filesystems can be expensive
  2. so if you have a lot of layers, copying them all into a directory (the “tree store”) results in better performance

So rkt is trading more space used on disk (every image in the image store gets copied at least once) for better runtime performance (there are no deep chains of overlays)

Is this right? Have I misunderstood what rkt does (or what Docker does?) Are there other reasons for the difference?

This:

  • states my goal (understand rkt’s design choices)
  • states my understanding of how rkt and docker work
  • makes some guesses at the goal so that people can confirm/deny

This question got a great reply, which among other things pointed out something that I’d totally missed – that the ACI format is a DAG instead of a linked list, which I think means that you could install Debian packages in any order and not have to rebuild everything if you remove an apt-get install in the middle of your Dockerfile.

I also find the process of writing down my understanding is really helpful by itself just to clarify my own thoughts – sometimes by the time I’m done I’ve answered my own question :)

Stating your understanding is a kind of yes/no question – “this is my understanding of how X works, is that right or wrong?”. Often the answer is going to be “right in some ways and wrong in others”, but even so it makes the job of the answerer a lot easier.

Okay! Now let’s talk about interrupting a little bit.

be willing to interrupt

If someone goes off on a very long explanation that isn’t helping me at all, I think it’s important to interrupt them. This can feel rude, but ultimately it’s more efficient for everyone – it’s a waste of both their time and my time to continue.

Usually I’ll interrupt by asking a more specific question, because usually if someone has gone off on a long irrelevant explanation it’s because I asked an overly vague question to start with.

don’t accept responses that don’t answer your question

If someone finishes a statement that doesn’t answer you question, it’s important not to leave it there! Keep asking questions!

a couple of ways you can do this:

  1. ask a much more specific question (like a yes/no question) that’s in the direction of what you actually wanted to know
  2. ask them to clarify some terminology you didn’t understand (what’s an X?)

take a minute to think

Sometimes when asking someone a question, they’ll tell me new information that’s really surprising. For example, I recently learned that Javascript async/await isn’t implemented with coroutines (I thought it was because AFAIK Python async/await is implemented with coroutines).

I was pretty surprised by this, and I really needed to stop and think about what the implications of that were and what other questions I had about how Javascript works based on that new piece of information.

If this happens in a real-time conversation sometimes I’ll literally say something like “wait, that’s surprising to me, let me think for a minute” and try to incorporate the new data and come up with another question.

it takes a little bit of confidence

All of these things – being willing to interrupt, not accepting responses that don’t answer your questions, and asking for a minute to think – require a little bit of confidence!

In the past when I’ve struggled with confidence, I’ve sometimes thought “oh, this explanation is probably really good, I’m just not smart enough to understand it”, and kind of accepted it. And even today I sometimes find it hard to keep asking questions when someone says a lot of words I don’t understand.

It helps me to remember that:

  1. people usually want to help (even if their first explanation was full of confusing jargon)
  2. if I can get even 1 useful piece of information by the end of the conversation, it’s a victory (like the answer to a yes/no question that I previously didn’t know the answer to)

One of the reasons I dislike a lot of “how to ask questions” advice out there is that it actually tries to undermine the reader’s confidence – the assumption is that the people answering the questions are Super Smart Perfect People and you’re probably wasting their time with your dumb questions. But in reality (at least when at work) your coworkers answering the questions are probably smart well-meaning people who want to help but aren’t always able to answer questions very clearly, so you need to ask follow up questions to get answers.

how to give useful answers

There’s also a lot you can do to try not to be the person who goes off on a long explanation that doesn’t help the person you’re talking to at all.

I wrote about this already in how to answer question in a helpful way, but the main thing I do is pause periodically and check in. I’ll often say something like “does that make sense?“. (though this doesn’t always work, sometimes people will say “yes” even if they’re confused)

It’s especially important to check in if:

  1. You haven’t explained a concept before (because your initial explanation will probably not be very good)
  2. You don’t know the person you’re talking to very well (because you’ll probably make incorrect assumptions about what they know / don’t know)

being good at extracting information is a superpower

Some developers know a lot but aren’t very good at explaining what they know. I’m not trying to make a value judgement about that here (different people have different strengths! explaining things is extremely hard to do well!).

I’ve found that instead of being mad that some people aren’t great at explaining things, it’s more effective for me to get better at asking questions that will get me the answers I need.

This really expands the set of people I can learn from – instead of finding someone who can easily give a clear explanation, I just need to find someone who has the information I want and then ask them specific questions until I’ve learned what I want to know. And I’ve found that most people really do want to be helpful, so they’re very happy to answer questions.

And if you get good at asking questions, you can often find a set of questions that will get you the answers you want pretty quickly, so it’s a good use of everyone’s time!

Read the whole story
Belfong
37 days ago
reply
malaysia
Share this story
Delete

macOS Monterey: How to make your Mac user profile an animated Memoji

1 Share

Tim Hardwick, MacRumors:

In macOS Monterey, you can use an animated Memoji as your Mac user profile instead of a standard static image. Of course you could always use a still photo of yourself to welcome you at startup and on the Lock Screen, but where’s the fun in that?

And, once you’ve made the change:

Next time you login to your Mac, you’ll see your animated Memoji avatar there to welcome you. And if you get your login password wrong a few times, just watch the expression on their face go from mildly irritated to thoroughly irate.

I followed Tim’s instructions, made the change, can confirm the various “wrong password” interactions. Fun!

∞ Read this on The Loop

Read the whole story
Belfong
39 days ago
reply
malaysia
Share this story
Delete

PayPal Is Said to Be in Talks to Buy Pinterest in a $45 Billion Deal

1 Comment
The San Francisco offices of Pinterest, which PayPal would buy for about $70 a share, people familiar with the acquisition talks said.

Read the whole story
Belfong
44 days ago
reply
wow!
malaysia
Share this story
Delete

The Future of Mac Reliability

1 Comment

I've been thinking a lot lately about Apple silicon and its implications for Macintosh reliability. Before the arrival of Apple silicon, a typical Mac logic board included a CPU, separate RAM, an Apple W2 or some other sort of secure enclave, chips to manage inputs and outputs, (often) a discrete video card, Apple's separate machine-learning chips, and a bunch more bits and pieces that all now exist as the single System on a Chip (SoC) that is Apple silicon. So does combining everything in one SoC make the Mac more or less reliable? A case could be made for both points. Without all the digital tethers needed to tie all those separate pieces together, Apple silicon should have less that can go wrong with it and be more reliable. On the flip side, if something does go wrong on Apple silicon, the machine is probably dead.

When trying to predict whether these new Apple silicon Macs will be more or less reliable, it is important to remember this is not Apple's first SoC rodeo. They've been making SoCs for the iPhone and the iPad for years.

A few days ago, I was on the telephone with an old friend, and he commented that his wife still loves the iPad I helped him set up about nine years ago. It is an iPad 2 and still working fine. I told him, "You should buy your wife an updated iPad. They have a good one for $329." He had me on speaker because then his wife chimed in, "I don't need a new iPad. This one still works like new." Her nine-year-old iPad running on an Apple SoC still runs "like new" after nearly a decade. I realize this is anecdotal, but looking at iPads in particular that have a bit more cooling (even if it is just a big aluminum heat sync) and don't get abused as hard as iPhones, I'm aware of a lot of very old iPads still in use.

Moreover, again anecdotally, I'm not aware of anyone I've spoken to who told me their iPad SoC failed. I know plenty of folks who broke the screen, but nobody who had the SoC fail them. Think about your friends and family circle. I suspect you've had the same experience.

I take this as a good sign for the new Mac SoC designs. The Mac SoC is a successor to those early iPad chips. Indeed, the new iPad Pros run on the current Mac SoC, the M1. If I were a betting man, I'd say that old running Macs are about to become much more common in the coming years. I sure hope so.

Assuming I'm right, the problem then becomes software. Even though my friend's wife still loved her iPad 2, I'm sure her operating system has to be years old. Apple is generally good about supporting old hardware with new software updates, but what will they do if it becomes common for Macs to run reliably for 10 or 12 years? There is just so much to this Apple silicon Mac transition that seems to be rewriting the rule book. Exciting, right?

Read the whole story
Belfong
44 days ago
reply
If it is reliable, one will definitely get a lot of returns for one's $2500 investment.. maybe, you will need a battery change every 6 years or so.
malaysia
Share this story
Delete

💧 The Weary Affleck

1 Comment

At some point in my travels across the internet, I was introduced to this fantastic paparazzi shot of Ben Affleck:

Ben Affleck, alone, looking weary

I believe it was presented as something along the lines of “Thanksgiving with your ex-wife and the kids”. Whatever the actual context, it’s an amazing image that beautifully conveys exhaustion.

In the midst of the COVID pandemic, I found myself identifying with Affleck’s evident weariness, and looked the photo up again. I soon found myself laughing at the sheer ridiculousness of the picture itself. He’s so over absolutely everything!

In an effort to more deeply connect with this, I weighed the idea of making this picture my phone’s lock screen:

Weary Ben Affleck as an iPhone wallpaper

As I do with all of my life decisions, I discussed this with my pal and podcast co-host Amy Jane:

A discussion approving the setting of the weary Affleck as an iPhone wallpaper

After chatting extensively about the picture, I did indeed set it as my lock screen, where it remains to this day. Every so often I notice it, and it gives me such a chuckle. The weight of the world is clearly on Ben Affleck’s shoulders. The man needs a goddamned cigarette and a brief moment of solitude. But can he get it? NO! No he cannot, because a paparazzo is lurking in the bushes. Of course a paparazzo is lurking in the bushes. Welcome to the 21st century.

Much more recently, I received a package from print-on-demand marketplace Redbubble. Having not ordered anything, I was quite surprised to unpackage it and find this:

The weary Affleck on a t-shirt

I guessed correctly that Amy had spotted this shirt and sent it my way. She really gives great gifts. As you can see, the shirt got a little wrinkled in transit. I was thus planning on washing it before wearing it anyway, but that plan became more urgent when I caught a whiff of the shirt. In a word, it stunk.

Packing slip

In case you can’t read that, it says:

The vinegar scent is part of the pre-wash print odor of our high quality, water-based ink and will wash away in the first rinse cycle.

I’m glad they warned me, because the stink was quite noticeable. Doesn’t it seem like once they identified the issue, though, they might actually rectify things before sending out the item?

Anyhow, to thank Amy, I decided to send her a photo of me wearing my new shirt. Naturally, I wanted to do my own weary Affleck pose. It was surprisingly difficult! In 2021, I find I can readily access my own ennui. However, with the camera snapping away, I also found myself repeatedly cracking up. The whole thing was simply too ridiculous! Eventually, however, I think I nailed it:

Not bad, right? In case you’re wondering, I’ve now managed to fit five weary Afflecks into this post, along with one Paul-doing-a-weary-Affleck. I hope you’ve enjoyed it even a tiny fraction as much as I have.

Read the whole story
Belfong
51 days ago
reply
Love it!
malaysia
Share this story
Delete

What is Object Storage? A Definition and Overview

2 Shares

The world of cloud is a world of big numbers. Millions of devices. Billions of files. Trillions of events. At some point, all these big numbers need to be stored somewhere.

Object storage is a form of cloud storage designed to keep huge amounts of data, using metadata for organization. Data is split into a pool of objects, and metadata allows you to sort and search your objects in as many ways as you need. 

This is the final article in a three-part series about common types of cloud storage, how each technology works, what they’re good for, and how to use them. Block storage is ideal for high-performance applications. File storage is great for sharing files among lots of clients. We’ll finish by exploring object storage and how it gives us the scale we expect from the cloud.

How does object storage work?

An object is a file plus metadata, and an object store is a collection of objects. Each object has a unique ID, and you use that ID to find your objects within the store.

Although object IDs sometimes look like file paths, object stores are fundamentally different from file storage. Object stores keep data in a way that gives them much more room to scale.

Block storage and file storage both struggle to scale because they have a single lookup table, which can only grow so far. Object stores avoid this limitation by splitting themselves into multiple layers: a router and storage nodes.

What is Object Storage? A Definition and Overview

Individual objects are sharded across a series of storage nodes. You don’t interact with these nodes directly; instead, you interact with the router. When you try to read or write an object, you make an HTTP request to the router, and it routes your request to the storage node that owns the relevant object.

Each storage node uses a local file system (probably block storage) to manage its objects. Objects are split across multiple nodes to ensure that no single node gets too big, to prevent node-level scaling issues. If all the existing nodes are full, the object store can add new nodes to spread the load.

The router has to know which object is on which node. It keeps a list of rules for assigning object IDs to nodes, rather than a complete list of rules. These rules can be comparatively small and simple, even with thousands of nodes.

For example, suppose the object IDs are alphabetic strings. It could put all the IDs beginning A-K on one node, the IDs beginning L-P on another node, and the IDs beginning Q-Z on the third node. These rules make it easy to work out which node owns a particular object so it can route requests accordingly.

What is Object Storage? A Definition and Overview

If a request comes in to write an object with the ID object-storage.txt, the router uses the rules to send the request to the second node. If it’s later asked to retrieve the object, it uses the same rules to find out the second node owns the object, and it forwards the retrieval.

What is Object Storage? A Definition and Overview

Over time, the object store can adjust the number of storage nodes. It can add nodes if there are a lot of new objects or remove them if the data set is shrinking. It can also move objects between nodes so they stay balanced. Ideally, each node should have a similar number of objects.

This separation allows an object store to hold an incredible number of objects. The lookup tables in both the storage nodes and the router stay relatively small, so they remain manageable. And more storage nodes mean more throughput, so performance scales as the store grows.

Object stores embrace two more concepts to manage this scale: versions and metadata.

You can have multiple versions of an object. Individual versions are immutable, so they can’t be replaced. If you write a new object with the same ID, you get a new version of the object. This makes it easy to handle concurrent writes — if two users write to the same ID simultaneously, you get two versions of the object. You don’t have to deal with conflicting writes.

Metadata gives you new ways to search and slice your objects. As well as tracking when an object is created and who owns it, object stores allow you to tag objects with your own custom metadata. This gives you ways to track and index your objects.

For example, you could record whether an object contains sensitive information, who uses the object, or which department should be billed for the cost. In turn, this metadata can be used to determine other properties, like who can access an object, when to replicate it to another geography, or when to delete it.

This flexibility makes it easier to deal with large amounts of data.

What’s object storage good for?

Object storage is designed for scale, and it’s good for large data sets. Where block or file storage cap out at a few terabytes, a single object store can span petabytes and more. You’ll run out of money before you run out of space.

It’s ideal for large data sets that don’t change very often or that have a lot of associated metadata. This includes media like video and images, data lakes, backups, and archives. Object stores often replace tape as the long-term storage medium of choice.

When shouldn’t I use object storage?

The scale of object storage comes at the cost of performance. The separate layers mean there’s more distance between you and your data, so object storage isn’t as fast as block or file storage. You can potentially connect millions of clients to object storage, but each client will get individually less throughput compared to local block storage.

You also can’t edit individual objects, only write new ones. If you’re making frequent, small edits to an object, then object storage is the wrong choice. Don’t try to run a database on object storage!

How do I get object storage?

Object stores have become the dominant form of cloud storage, so they’re offered by many providers.

The most famous object store is almost certainly Amazon S3. That stands for “Simple Storage Service,” although the “simple” is less true today than when it was first launched. Other object stores include Azure Blob, Google’s unimaginatively named Cloud Storage, and Digital Ocean Spaces.

For some providers, you provision a fixed amount of storage and pay a fixed price (although you can change it later). For others, your storage grows or shrinks with your data and you pay for what you use. Either way, you should have plenty of room to scale.

Some providers allow you to store different objects at different storage tiers, and this is really worth considering. If you don’t retrieve your objects that often, you can put them in cheaper storage tiers for big savings.

The price varies by storage tier — $20 to $30 per terabyte per month at its most expensive, going all the way down to $1 a month for the most infrequently accessed storage tiers. This is substantially cheaper than block or file storage. It’s often a pay-for-what-you-use model rather than a fixed amount upfront.

Object storage: Infinitely scalable but at slower speeds

Object storage is designed to scale forever. It can store arbitrary amounts of data and take requests from as many clients as you have. Its custom metadata gives you powerful ways to analyze your data. If you have a large collection of files that change infrequently, object storage is a great choice.

It’s a poor fit if you want maximum performance or you’re making a lot of edits to files. For those workloads, you should consider block or file storage.

There’s no one way to do storage. Some technologies have a clear progression from old to new, but that’s not true here. Block, file, and object storage all have different characteristics and use cases, and they’ll all be with us for years to come.Compare cloud storage types using the other two articles in our series: block storage and file storage.

The post What is Object Storage? A Definition and Overview appeared first on Last Week in AWS.

Read the whole story
Belfong
51 days ago
reply
malaysia
JayM
51 days ago
reply
Atlanta, GA
Share this story
Delete
Next Page of Stories