4 ms·
Experience in getting it wrong a whole bunch in the past, though you'll probably get something wrong this time too. It helps to know how far you can get with v
by IanCal 4y ago
Experience in getting it wrong a whole bunch in the past, though you'll probably get something wrong this time too.
It helps to know how far you can get with various approaches. Knowing that sqlite actually manages just fine for things up to X or where the reasonable edges are for using (say) a db for tasks rather than rabbitmq. Then some experience swapping things over. Been on a project upgrading from sqlite to postgres? Postgres on a single node to something larger? You'll have a better idea of how easy or hard these things are. Sometimes it's small things, like going with sqlite but being aware of the differences so that later the migration path is easier.
You can also sketch out architectures, and see what does or doesn't change if you swap out a component/step. I'm probably going to have something do a basic iteration for comparing vectors right now because
1. I know the scale I'm at means that it's going to be near instantaneous
2. For a larger problem I know I can keep the same interface (find closest X) and swap in various other tools I know exist
3. Adding those tools should be possible but due to some constraints probably at least some hassle
So I have a simple quick solution, but know how to change it later. I also have identified why I'm not going for the "proper" solution straight away, what the benefit is.
However, I'm going to keep the interface as "find closest to string X" not "find closest to vector X" because I've seen the issues that arise when multiple different things care about exactly how the vector is constructed. I've been through that kind of thing which dramatically slowed deployment of updated systems. Perhaps in those other cases it wasn't particularly avoidable but the problem feels like it has the same shape (hard to describe but problems and solutions feel like they have shapes to me, I hope that makes sense regardless of how you picture them).
These are some pretty small examples I know, but hopefully useful as approaches that can be communicated without a large background in a specific project.
My main point is where I started - experience making these mistakes. I am quite aware of deadlocks because there's nothing that teaches the lesson about lock ordering quite as well as seeing a robot freeze mid-task in a demo. When mentoring, people seem surprised when I solve some of their problems immediately, it's not because I have quickly solved it from first principles but because I remember making the exact same mistake 10 times.
- sanderjd 4y agoI think this is implicit in your comment, but making it more explicit: The more similar the new thing you're doing is to something you've already done, the better this works.
- IanCal 4y agoThanks that's worth making more explicit. To add to this, a very important part of the process to me is to start by asking how this problem is similar or different to other problems we've faced (very useful for estimation, you'd be shocked at how often people think a thing will take say 1 week when it's taken over a month each previous time something similar was done). This also means you can reach out to others if you identify a good similar problem but you weren't the one that worked on it. It decomposes too, so the vector thing above is new to me but "align version numbers" isn't.