If you have, have you ever thought about if the order of events really matters?
There is a huge difference in complexity whether the order of events processed matters or not.
Imagine the following task/problem:
You want to analyze application logs, because you're curious how an API that starts a long running background process behaves performance-wise.
One log message signals the start, a few intermediate ones, and one message that signals the end.
1⃣
If you can somehow ensure that every log message you process comes in order, the problem is manageable.
When you get your end message, you know that you already processed the start message.
You could now, for example, just subtract the end time from the start time.
2⃣
But what if you could receive that end message first, then the start message, and then the intermediate ones, all unordered?
Well, now solving that problem became way more complex.
3⃣
You'll have to write a lot of code just to either: 1) ensure that you order everything before you process it 2) enable your processing steps to handle unordered data and maybe implement some form of caching.
4⃣
Why does this even matter?
Because sometimes, surprisingly, your code that relies on a certain order still works with unordered data, but yields results which MAY look okay, BUT actually aren't.
5⃣
What does this teach us?
Sometimes, a problem only seems obvious at the beginning, but by putting a lot of thought into it, and specifying exactly WHAT you solve and WHAT NOT, makes life for everyone way easier.
6⃣
By making excessive use of tests you can also give yourself some confidence that your code works as expected.
But also the best of tests rely on you putting enough thought into it and coming up with the idea of testing non-obvious behavior!
• • •
Missing some Tweet in this thread? You can try to
force a refresh
Improving developer experience is always a good investment.
It's even one of the investments with the highest return, in my opinion!
Some things that help to improve DX:
🧵👇
1) Providing All Relevant Information Up Front
Ensure that all information necessary is present in a README.md within the project's repository.
It should be sufficient enough to state what the project does, what problems it tries to solve, etc.
2) Making Sure Starting Out Is Easy
Does the project require some setup to be able to run/test/develop locally? -> Write an interactive script which sets everything up, maybe creating a config file / .env with meaningful defaults or settings from script input.
Some things you also have to consider when building services and software systems:
- Logging
- Metrics
- Tracing
🧵👇
1) Logging
Logging may be obvious for many devs, but there's more to it than just doing it.
Choosing a format, which can be processed easily, should be a priority.
Then asking how those logs are collected and where they can be viewed is also pretty important.
1.1) Log Format
Plain text may be easy to read, but can sometimes be pretty difficult to process automatically.
You should also consider so-called tags, which is like a map where certain variables can be set, like request ids, to be able to follow the execution of a call.
An array is the most basic primitive data structure to store a group of elements.
It stores its elements in a contiguous block within your computer's memory and can't grow in size dynamically
Please note:
Although I am using JavaScript code here, I'm talking about a real primitive array.
The Array in JavaScript is an object, that is backed by a real primitive array, but abstracts away a lot of the stuff I am going to present to you within the next few days.
We will also cover ArrayLists at some point, which will give you the knowledge about how a JavaScript array is approx. implemented under the hood. 😊