I recently read this article on the need for non-software companies to recognize the impact of their internal software development. It reminded me a lot of where I work. The general culture at my workplace says, “We are in the x business. We don’t do software.” The idea being we buy software at every opportunity and only resort to developing it when we have no other options. The result is a lot of money thrown at very expensive software packages which hardly do what we want after we fight with for a year. There has been a recent move towards using open source software over in-house software, but it still suffers from the same problem. The result is we do not apply as much emphasis on developing our software development environment as we should. Afterall, why bother modernizing if you only write a handful of apps never intended to see the light of day?
The refusal to address our software problems is only making matters worse. While commercial products often do meet our basic infrastructure needs, they do not and cannot come close to making us a successful business. The result is we implement the software closest to the core of our brand in-house. As time goes on, we continue to build applications on top of past applications. However, many of our past applications are outdated or were quite possibly outdated the day they were created. We continue to incur debt. Quite frankly, we are falling behind. Old applications need renovated. Current applications need modified. New applications need developed. All the while, we use yesterday’s practices because we do not have extra time to learn modern techniques.
Nearly every business today does software. Particularly if a business provides online services or makes transactions, it needs to consider itself in the software industry. Take a look at a company’s income and see how it aligns with spending on development resources. If a large percentage of revenue comes from areas supported by in-house developers, this is a good suggestion the company is in the software business. They need to put effort into improving and supporting their development efforts because otherwise their software debt will consume company expenses.
I have spent the past six months trying to learn to balance today with tomorrow from an IT perspective. Today is about providing solutions to problems one has today. Tomorrow is about solving problems one will have in the future given their current situation and direction. The purpose of IT is to support business. While IT for IT’s sake is fun, it does not provide real value. Aligning IT to solve business problems is key to success. When business has an idea for a great new product, they need a solution to implement the product. By spending large amounts of time implementing the perfect solution which is robust, but easily adaptable to any direction the product may go, the business may miss out on its opportunity to capitalize on the full potential of the product. However, implementing the quickest solution to get to market as fast as possible can leave the product unable to adapt as customers begin to request new features. Balancing these two sides is key to the success of IT.
My company is very oriented towards today. They want a solution as soon as possible. Cleaning up the aftermath is left for tomorrow. The problem is tomorrow quickly becomes today and new problems need solutions implemented. Too often, no time is left to prepare for tomorrow. Frequently, we find ourselves wasting time today because all we thought about yesterday was yesterday’s problem. One example is the vast quantity of processes we have today with their own implementation to FTP files. FTPing a file is a fairly simple process and easy to implement. As a result, any time we needed to FTP file, we implemented it for our specific situation. As a result, we have never created a generalized process for FTPing files. Implementing a new specific solution always seemed easier than trying to make something more general and reusable. However, when looking back, we would have been better off creating a generic process to FTP files and reusing it as necessary than implementing one for each specific situation.
As a counter to my company’s constant band-aid on top of a band-aid approach, I repeatedly voice a need for general solutions which can be reused. However, it is not uncommon for me to find myself in a situation where there simply is not enough time to develop a generic application over a specialized application. Sometimes, we simply do not understand the domain well enough to generalize. If we tried, we would likely spend a lot of time creating a process that really is not reusable. As a result, we would need to spend more time reworking it later.
The result is we need a mixture of today and tomorrow. When time is of the essence, we need to create a solution that meets the requirements. That being said, we also want the application to be designed to be easily changed down the road. Then, as additional requirements develop, we modify the original application to meet the expanded scenarios. The result is something akin to agile software development practices. The key is to allow time to refactor the original application. If the requirements are moderately different early on, it may be more work to adopt a common approach. However, as the area matures, the small time spent upfront will begin to be returned. Fortunately, the time spent at the beginning of the process is not too great to warrant a large risk of wasted time if the product flounders. In essence, we need to meet today’s problems by adapting yesterday’s solutions to be prepared for tomorrow.
- There’s something to be said for the light rain after a large storm.
- Some days I feel like I can tackle the world. The only problem is tackling the world takes more than a day.
- When in doubt, follow the path before you, but when you see an opportunity for a better route, take it.
- When looking for a particular file suffix, look from the back of the file name.
- When tracking down cupcakes in a convoluted mess of cubicles, one feels a bit like a rat in a maze hunting cheese.
- Mistakes are heavier when wrapped in red tape. Hence, by refining the red tape to be a finer material, we can reduce the weight of mistakes.
- Restarting Windows is like restarting a relationship. It might fix the most recent problem, but the fundamental flaws remain.
- You know you’ve been working too much when you attempt sign into your personal blog with your work ID.
- Every line of code in a block should be at the same level of abstraction.
- If an algorithm dominates a function, separate it into a helper function.
If you need an update, here is my first blog on grad school. On Friday, I was throwing some general questions to Dr. Wallingford about various things in relation to grad school. He asked who I am looking at. I told him Dr. Cook from UT and Jeremy Siek from CU. It turns out Wallingford knows Dr. Cook personally and has worked with him on a couple different committees in the past. This is very good news for me. Being able to have someone like Wallingford put in a good word for me and make sure my application really gets looked at very easily could be the difference between me being accepted or rejected at a large university like UT. The best thing is Wallingford knows Cook himself. It is not that he simply knows someone on the UT CS faculty. He knows the guy I want as my advisor. Then I hope my track record will speak for itself and get me in.
I am now a senior in college. If you go by credit hours, I will be a super-senior in December. Technically I am 14 months and 2 days from graduating college. What does all this mean? It means I am starting to try to figure out what I want to do with the rest of my life. On Wednesday, the Computer Science Department here at UNI hosted a seminar on grad school. I decided to take off work and check it out.
I had always had the idea of grad school in the back of my head as a potential future possibility (a lot of uncertainty in that phrase, no?). Last month, Dr O’Kane had brought up the GRE’s and the idea of grad school in one of my classes. It got me thinking a little more about the idea. I have really enjoyed college. I feel more comfortable sitting in a classroom than perhaps anywhere else. After all, it is the primary thing I’ve done for the past 16 years of my life. I am also extremely talented at it if I may say so without sounding a bit too presumptuous. I like listening to lectures. I learn a lot from them. I used to jokingly think I should be a student for the rest of my life. I could just continue to take various degrees and quite literally never graduate. These thoughts inevitably lead me to the notion of going to grad school. Let’s not forget that I could carry on the Dr. Sparks title too!
The seminar turned out to be only the department head (Dr. Wallingford), a professor (Dr. O’Kane), and me. At least I got a lot of personal attention. With me not graduating until after next fall, I got told I have plenty of time to think about things and figure it out. I also have yet to do my undergrad research. I am planning on doing it in my last semester. It was suggested that I do that in a topic related to what I would like to do with my graduate studies should I pursue that particular path. I really don’t know what I would want to study if I did go to grad school. I know it would be in Computer Science. I love history, but I find myself occupying more and more of my time with computer stuff every day. I see the history degree turning into a great hobby when I need a break from computers. It also rounds out my education really well so I am glad I will have the B.A. in history. Seeing as how I didn’t know what I really was interested in yet or where I would want to go, they recommended I just start researching various universities and professors. This would be first and foremost. Once I had a few ideas, I could take the GRE next fall and any other tests if required by my hopeful schools. Then it would come to applications and seeing where I would end up.
I spent a fair amount of time later that evening when I got home looking at universities and their computer science programs. Most really did not reach out and grab my attention. The two that did so far were the Colorado University and the University of Texas. Both have some interesting software research going on. A professor at Texas definitely caught my attention the most. He does some research on web technology which I have yet to fully look into. He also does a lot of research on object-oriented ideas and inheritance. That is the stuff I am really good at and enjoy. I have actually been considering toying with some of those ideas in web applications. Now you see why this Dr. Cook from Texas was so appealing to me. I have been slowly developing ideas about doing my undergrad research on a similar topic. I also want to try it out with some of the websites I build.