I went to the MIT TBP Career Fair in February. I went back to Boston after 16 yrs! It was like yesterday I was walking in the infinite corridor, yet there is so much change. I vaguely remember walking the career fair back then as a student. Now the tables have turned, I was there trying to recruit smart talent.
It’s usually difficult to pitch an enterprise software company to a fresh graduate who probably has a experience/interest in game development, mobile UI, Social Network or whatever the latest trend is. Having spent so many years in the enterprise software industry, one thing I can tell is that business processes are complex and constantly changing. The algorithm requirements to support complex business processes are as challenging or more as those encountered in writing a compiler or a process scheduler for an operating system.
Here is an example of something I asked a member of my team to do and he did a pretty good job in a day. The requirement was to arrange a bunch of things and show relationships among them in a circular layout. Initially the random layout based on some force based algorithm was pretty ugly and added to that, showed several criss-crossing line segments making the interface very confusing and ugly. I probably would have just settled for it had I not worked on some Project Euler problems and learned things like Hamiltonian paths and Eulerian paths. So, I searched a little and found exactly what I was looking for, a scientific paper on how to arrange a bunch of things and the relationship among them on a circle without criss-crossing. The paper is “Crossing Reduction in Circular Layouts”. Once I provided this to the team member, he implemented the logic and the layout now looks much better.
I want to mention a whole bunch of complex problems in Enterprise software that I think anyone with a passion for complex software and algorithms appreciate.
1) A project management application: where the project has tasks and the tasks have sub tasks and so on. Essentially this is a tree structure and things like cost and duration rollups require traversing up and down the tree.
2) A rule based cost allocation engine: This can involve dealing with data requiring pattern matching, data quality etc that requires concepts such as regular expressions. Then there is logic of allocating the costs down a hierarchical representation of some business entities. Like for example, take this particular expense and divide by country as a certain percent per country, then to the various departments and finally by a business service.
3) Most of us are familiar and use eCommerce. Have you ever wondered how the product images line up neatly in the search results even though the product images are coming in different dimensions from different vendors? This can be solved by scaling would be the first reaction. But keep in mind, if the aspect ratio is not preserved, it won’t look good. But if you preserve aspect ratio, then do you fix the width or the height? What if I want to specify a max bounding rectangle and ask you to scale the image such that the aspect ratio is preserved and the image size doesn’t exceed this bounding rectangle?
4) Some of my other favorites are Style/SKUs, Extensible attributes, Attribute inheritance, Data Quality and Deduplication all of which actually require pretty good understanding of various concepts including statistics and data mining. Usually it’s possible to come up with solutions that are 80% good without complex technology, but getting the remaining 20% is where the challenge and fun is. Many top companies are probably spending all their research effort in squeezing this 20%.
Next time you are thinking whether you should join an Enterprise Software Company and whether it will have enough challenges to keep you interested feel free to talk to me. If you are graduating soon from a top school or a very talented software developer interested in working with top notch developers working on complex and interesting problems, feel free to reach out to me. I am on LinkedIn.