The Art of Problem Solving and Critical Thinking. I like this topic with passion ... after all it is the foundation upon which Computer Science is built.
Recently, a friend approached me with a problem. It goes thus:
"We have a telephone system in our office, serving about 200 staff - literally translating to 200 telephone extensions. The system is VOIP-based, and it uses some opensource PBX system. Many of our staff are sort of indisciplined when it comes to phone usage, and they can make many unnecessary telephone calls, resulting into unmanageable costs. We are unable to limit calls made by staff. Our IT team has tried to research around but the opensource PBX system does not have functionality that can limit calls. The team says it is impossible to limit calls. Can you please help us think out a solution that will result in cost containment?"
I said Wow! This is the sort of practical problem that requires critical thinking. There is no problem that has no solution. For starters, one needs to have the freedom to think of possible solutions outside the existing system (thinking outside the box).
I found the above problem too obvious to resolve because I was faced with exactly the same problem years ago, only that in that case the client was using hardware PBX system, which made it even more challenging. Nonetheless, I solved that problem using first principles without much ado. It was just another piece of cake. The solution did not only result into significant cost reduction, but several other benefits to the organization (that can be a story for another day, if you ask me).
Without a doubt, it is all too obvious that this is a problem which requires a logical IT solution. An important component of the solution is to appreciate that with the opensource PBX system (software, rather than hardware), the following would hold:
- Each staff has a user telephone account in the database
- Each call made is saved in the database
With the above background it is not hard to see that one can easily implement the following additional functionalities:
- Create at a minimum the following additional database fields in the table containing user accounts
- quota or call_limit (int)
- call_amount (int)
- active_status (boolean)
- Every time a user makes a call, update the call_amount above by adding the amount of that particular call.
- Implement a scheduled Job that runs every so often (e.g. five minutes). This Job checks if the field call_amount has exceeded the field call_limit. If so, then that user account would be deactivated by changing the field "active_status" to False. By doing so, the user will not be able to make calls.
Simple solution above, isn't it? But that is just a bird's eye view of the solution. To implement this, you will have to dig deeper. The ideal person for such is a full-stack developer because you will need knowledge of the following as a minimum:
- Relational Database Management System (with good SQL knowledge)
- Frontend (Javascript, HTML, CSS)
- Backend (any backend language - but I would personally use my favorite Python of Java)
I have heard many talk about coding as a "skill". True, you need to know how to code in order to implement solutions, but do not forget that finding the solution could be even more challenging and time consuming than coding. And coding can be done in any of the well-tested programming languages or database management systems or platforms as long as you are proficient in them.
Finally, when I told my friend that I would share this knowledge on my blog, he was like: No, No, No, aren't you sharing some sort of intellectual property? Which made me burst into laughter, for the following reasons among others:
- This particular problem and solution should be a no-brainer even for the not-so-accomplished programmer.
- Most of the things I have learnt over time were because other people shared them. I personally get most of free knowledge off the web. So why not give back something if I can?
- Even if I share the above solution, it is only the tip of the iceberg. There are too many problems out there that require analytical thinking. Every problem is solved on a case-by-case basis. For anyone to use such a solution, they still require to be able to further analyze and customize the solution to their needs. The gist of the matter is that you will not simply teach someone analytical or critical thinking skills - at least not overnight.
So when I hear people talk about any manner of software or IT solutions as Intellectual Property, sometimes I do not understand what they mean. Sometimes I believe that it is because not everyone appreciates what software is made of.
No comments:
Post a Comment