Email, Config man, Databases, Lean Organization, Requirements, File Systems
- Email deliverability to Outlook.com is so bad, that I really must seriously consider moving out. It just sucks, and it really sucks way too much. Emails might get rejected, or nulled, and even nulled even if emails are on safe senders list, and so on. Sigh.
- One system loads it's configuration from GitHub repository on startup in production environment. If that get request fails, the whole production environment fails to start. - I could have done something similar, but I would require the configuration to be signed, as well as have local cache. And fetch data with etag, so if it's not modified, I would use the local copy, just as in case where the configuration refresh attempt fails. - Yet all this reminds me from one developer, whom complained about data center outage. I replied, so what, it's just short outage. He said he expects everything to be working all the time. Then I replied, I can see why YOU'RE the problem. I'm pretty sure he just got annoyed, and didn't even realize the point. The point is, that everything fails, and you should always have a viable backup plan. Something failing, shouldn't be a show stopper, unless there's a very good reason why it must stop something. In many cases something can be done asynchronously, our without actual real-time confirmation. And even in some cases where the risk of not getting the real-time confirmation is smaller than the damage caused by not checking it. Especially with trusted clients in high value markets, it might be ok to go, even if the real-time confirmation is missing. As well as caching pre-qualification data, which tells what the status is in case the real-time check fails. Just as is done with credit cards and so many other systems.
- Databases: RowId vs Id vs AutoIncrement. Monotonic counter etc. All are different things and behave differently. Even if it might seem that all of those are the same thing, when you crate a table and start inserting data into it. Yet, Rowid's can change and Id's can be reused. New id is always highest number + 1. Only autoincrement makes sure that the Id grows continuously. Even that can be messed up by inserting data to database with manually set Id, where autoincremented records can actually overwrite those. It really annoys me when people mix those and do not understand what the differences are. - There are so many ways to get these things wrong.
- Keeping lean organization. I've seen many startups to fail. But in many cases, their problem has been that they're not running on lean enough infrastructure and personnel. Those businesses could have been well viable, if their own costs would have been just 10 - 20 x smaller, which is totally doable.
- Love situations where people are better at setting requirements, than I'm at fulfilling those. In one case I was required to inform then hour before one event happens. Well, great. Only problem is that I don't have any preknowledge about that event. Therefore next time when I choose stock broker, I'm going to tell them, that they must inform me one hour before any major stock crash happens. Otherwise they're not filling my requirements and I should decline all their proposals. - It would be also nice to require software vendors to patch any zero day exploits before criminals or governments got hold of those. I think it's pretty fail requirement to make safe software.
- Had a long discussion about pros and cons of block suballocation aka tail merging or tail packing. Also in-lining is similar technique for small files. I'm also wondering why there isn't separate Wikipedia article about in-liling data (or resident data as it's called with NTFS) with file systems. I'm just currently running one hobby project where tail packing would provide great storage efficiency increases. The data stored in blobs is just large enough not to be stored in database efficiently, but still small enough, not to be stored on file system very efficiently either. So the tail packing would provide a nice allocation improvement. After thinking for a while. I think I'll use - Btrfs - https://en.wikipedia.org/wiki/Btrfs - for that blob store and the issue is solved.