Agile Projects, Cloudflare, Kybermittari, Postman, T-SQL, OVH, upsert
Top heavy projects versus true agile projects. I've got now three big software development projects going on. Differences are absolutely huge.
a) Project is on my terms very stiff, everything is handled in official review meetings with ~15 people in every meeting. Meetings are kept around monthly and reserved weeks ahead. When issue is found, everything stops and everyone is waiting for the solution. (Someone would call this agile, I'm laughing!)
b) This project is bit more agile, it's like the previous one, but iteration cycles are faster and teams are smaller. But still, it's very stiff on my terms. New versions are delivered around weekly. Still huge amount of effort is wasted on meetings, instead of getting things done. Lots of documentation about "fixes" is needed, and waiting for the testing reports as well as trying to understand the testing reports etc.
c) This is the truely agile project. Things are handled in teams chat, with small competent core teams on both sides. Continuous integration is being used with full automation, and work resumes on both sides as soon as it's know what needs to be done. Both sides continue asynchronously forward as far as they can, before starting to wait something on critical path from the other side. When something is done, new version is pushed out, and testing is immediately resumed. Usually this happens in around 15 - 60 minutes. If it's known there's longer pause than 15 minutes in testing, team is informed about when the estimated next wake up event is. So they know that we'll resume testing 15:15 with this project. Clearly releasing them for that time for other tasks. Also in every testing event, only the people whom actually are needed are getting notified and invited.
Summary - The point and differences? Well, project A takes years and costs huge amounts of money. Project B takes still a long time, everyone is annoyed with slow progress and costs. Project C, gets forward very fast, and cheaply and can be competed potentially in a few days or weeks! And the main difference? Project C can deliver in week more than the project A can deliver in a year. That's a huge difference.
Spent a day tinkering with Cloudflare enterprise features, including Spectrum, Access, Traffic (Argo & Tunnel), WAF, TLS Client Certificates. Cloudflare is awesome, everything worked pretty quickly and was easy to configure. Perfect! I just do not happen to have need for this kind of service right now. I really liked the Access part, because it's something which is very good "front" for many internal services, now if users are remote working. If I would run a startup, that's something I would use.
Really happy about that T-SQL business logic porting project Python -> T-SQL. Which I posted about in previous entry. It's working perfectly and everyone's happy. I've been refactoring some parts to be more clean. But it hasn't changed the functionality of the code and especially the all important procedure interfaces they're using to call it.
Studied Finnish Kybermittari (@ kybermittari.fi) which helps organizations to mitigate cyber security threats and related risks and improves business continuity.
More tools to know and use. In one project it was required to use Postman (@ postman.com) "The Collaboration Platform for API Development". Well, once again, same stuff, different ah, wrapping. Wasn't that hard after all.
Had long discussion with a few developers why it's "required" at times to use UPDLOCK or even HOLDLOCK with SELECT. Well why? Because it prevents deadlock situation occurring. Using UPDLOCK allows much faster concurrency than always failing "slowly" via deadlock detection path, if update isn't triggered with direct WHERE statement with UPDATE. Even if the deadlock detection timer seems to be nicely adaptive, it's still bad practice.
OVH made me laugh and cry. They sent an invoice, which can be only paid from banks located in Republic of Ireland? (What is SEPA?) Also the message was written in Polish-language. No comments.
Good points in this post: upsert anti pattern (@ sqlperformance.com). Guess why I really love SQLite's REPLACE command, it's superb with key value data. I haven't ever used updlock, serializable combination, it's curious. Yet usually I handle mostly data which isn't highly updated, when reading I just simply read committed and if updating data I'll use serializable. Sure, I'll use UPDLOCK to prevent deadlocks, when required and serializable as default isolation level, and only relax it when I know it's ok to do so. On top of that I'll use HOLDLOCK if some relevant data which is only read is essential to the transaction. Yet, I'm not mostly dealing with highly concurrency data, where stuff mentioned in the post would really matter. Most of my large ETL jobs are just that, extracting data from database.