During my third semester at GIKI, my dad gave me two books and advised me to read them carefully as they are the mother of all engineering. The first one was control systems, the other was fluid mechanics. My university offered control systems in the sixth semester and I am glad that I worked on my father's advice and tried to go through the course with passion. As I try to pursue my utopian dream of automating everything around me, the teachings from that course still help me.
If there is a moment in time I can change back, it would be the decision I made to pursue electronics engineering at GIKI given I also had the option to pursue computer science. Choosing computer science would have exposed me to distributing computing early in my career and I would have built a better and more reliable system for my very first startup venture, Retailware. Retailware tried to emulate Shopify for the Pakistani e-commerce market. Retailware failed because the system we built failed to provide deterministic guarantees for distributed workloads behind very very unreliable internet connection and power. Oh well.
I am still thankful for the path I took to solve that problem. The journey exposed me to fields like distributed computing. Problems like back-pressure, race conditions, throttling and error handling. census for leader election (Paxos and raft implementations) etc.
I came across the cadence framework (now temporal) when I was writing my own implementation of the Raft algorithm in Rust for the census. Why did I choose to write my own raft implementation and that too in Rust? I wanted to manage the state machine inside the browser with the help of web workers. Cadence did not have a rust implementation back then and Rust had the most mature toolchain for web assembly at that time. I choose not to go with cadence at that time.
At the same time, my day job allowed me opportunities to get exposed to the cloud and experience the same problem like census, throttling and backpressure, deterministic retries and observability when going with different workflow engines.
I am also glad and thankful that my day job has allowed me to pick temporal. This has allowed me to break the problem into workflows, coding them, setting breakpoints on my code to read the relevant code implementation at the temporal engine and understanding how the framework solves the problem for building reliable workflows, even for complex cases where we have to deal with nested workflows. It has been an absolute joy ride for me. The best part is, the solution is open-source and is available in multiple languages so using it is not limited by the language of your choice.
I think all universities should introduce temporal as Lab course alongside distributed computing. It will get more students interested in the field of computing.