I installed a few smart switches and automated my house lighting recently. It's a long journey and I've learned a lot along the way. As a software engineer, I'm surprised there are a few in common in software engineering and replacing switches. Probably those are common in tackling a problem.
Understand the Goal and Resources
In my daily job and other programming, I mostly focus on completing a product or getting a service online. They're not trivial or simple by nature. We analyze and divide that into minimum viable product, and continue to create tasks and solve the small tasks one by one. Like what we do in the software engineering, I think of what my goal is in this lighting automation project: automate the lights in my house. But it is not every light. I just need to automate lights in the dining room, kitchen, living room, garage, and the doors. This goal is clear and well scoped. It's also clear that I need to replace the existing switches with smart switches, connect the new smart switches to the hub, and configure the rules in the hub to automate the lights.
With the goal, it's also important to understand the resources and priorities. I have a full time job and I like to spend time with my family. That means I cannot devote myself to the project all the time. The good thing is there is no hard deadline. I can think of the small task and work on that one by one. For example, I can just replace one or two switches at a time. With the goal in mind, I need to be flexible and consistent.
Learn And Explore
I feel like there are much to learn in software engineering: language, design, architecture, and process, to name a few. It doesn't mean everybody has to learn all of them now. What I mean is the situations and requirements may change. We need to adapt to that and learn new technology on the way. For example, software engineers who are interested in Mac development won't ignore Apple M1 when it's released. Learning is a nonstop journey. Exploring is how to get to new and unfamiliar areas. It looks simple to replace the switches. But in the end, I need to spend some time in learning some basic wire code, understanding the differences between a regular switch and a smart switch, and understanding how that particular smart switch works in 3-way and 4-way wire. It only becomes possible after I read and explore the way to install the smart switches properly.
There is always some form of design, development, testing, and release cycle. It's said that if we have a flaw at one stage and carry that down the cycle, it'll cost more to correct it. The later it's fixed, the more expensive it becomes. It's a waste of time and counterproductive if we have to re-work. It also applies when we replace the switches. If we don't get the wires connected right before putting it back, eventually we have to open the plate and correct that. Otherwise, we'll not be able to use the switches. It's important to get things right instead of done quickly. It's critical not to rush to finish it given that it's related to electricity. If we don't do our diligence in the safety, we can get shocked.
Work with the Existing System
It looks great and cool to work on something brand new. That means we have more choices to use new technology. In reality, we most likely add new features to the existing system. It doesn't sound that exciting. But we still need to weigh in how bad the existing system is, whether a from scratch new system can solve those issues, how many resources we need and we get, and whether there are other higher priorities. Replacing the switches is also working with the existing system. It's just too much work to replace the entire wiring in the house. There seems to be some wiring there I don't understand, for example, a white wire is connected to a black wire directly. It's also beyond my ability to try to make it follow the code.
It's fascinating to me that we can borrow the method and approach from one discipline to another. That reminds me that learning is a on-going journey and it can be applied to multiple areas.