Because every second that I spend on small-batch academic exercises, is a second not spent working on ship code.
Here's how I spent today:
I woke up at 5AM, like I always do, and did my two-mile walk. During the walk, I sorted through today's job. I'm working on a social media app, and I'm setting up the baseline (admin) stuff. I needed to add the capability to convert "standard" users to "manager" users (and vice-versa), and I'll also need to add UI in the app (native Swift iOS/iPadOS/Catalyst app) to manage permissions.
I figured out how I would do it. It was a combination of work on the backend (I needed to add some functionality to the admin user layer), the SDK (I needed to add a couple of methods to funnel the UI requests to the REST API), and the app, itself (I needed to add a button to the user edit screen). The tricky part would be the backend work. I needed to do this in a manner that would not invite any security compromises, and would catch errors. I also wanted to leverage the current structure, as opposed to introducing new structure.
Also, I was a dumbass, and used Git submodules in the backend (it's a "layer cake" model). That makes modification a pain.
I don't write stuff down, if I can help it. After my half-hour walk, I knew what I needed to do, and, by 7AM, I had the basic framework in place on the backend. I couldn't test it until I also had the work done on the SDK, so I started that (it wasn't much code).
Since I wrote the backend a couple of years ago, I also spent time, groping around, re-learning it, and getting my head out of "Swift Mode." The biggest mistake I make, is forgetting to end lines with semicolons.
This is where my extremely disciplined coding standards pay off. 99% of the time, I'm the poor schlub that needs to relearn the code, so I make sure that I structure and document very well.
By 9AM, I had the whole stack in place, and there were a number of bugs. I like to test, so I was able to figure out where they happened. Most were in the backend, so I spent a lot of time with Charles Proxy, examining the exchange. Some of the bugs required a fairly substantial architectural change. That's pretty common, so I write in a layered, modular fashion with lots of hooks. Makes that kind of refactoring go smoothly.
By 5PM, I had it all working, but I need to make the app UI better. It needs a confirmation alert. Otherwise, it's pretty much done.
Tomorrow, I'll add the confirmation, and do a lot more testing. This is fairly critical stuff. I can't afford any security lapses here, and I need to make the UX as smooth as possible. Because of the nature of the work, I need to figure out the best way to provide instantaneous user feedback, while waiting for the server to do its work. I'll hammer that out in tomorrow morning's walk. I still need to do the permissions UI, but I won't get started on that, until I'm satisfied that the privilege swap works 100% (I don't move on, until I'm satisfied that my work is at "beta" level, or better).
And I spent absolutely no time at all, practicing LeetCode.