Is This Good Enough?

Written on November 19th, 2012 by

At some point in time everyone asks, “Is this good enough?” It may be a conscious answer. For many of us it is not. The vast majority of us reach that point where the answer is “yes.” A rare few never make it past “no.” Those are the ones we watch on tv and read about in the news. Those are the ones we admire as children. Those are the ones in our history books.

The most common characteristic among highly successful people is their relentless work ethic. Some of it they learn at a young age. The rest is fueled by passion. However, it becomes easy for the fire to fade over the years. It happens so slowly many of us do not even realize. Some of the wear comes from red tape or fighting those who have already become complacent. Yet the most difficult struggles are with ourselves. It is hard to continually find the energy to push beyond what we know, to overcome obstacles, and breakthrough the barriers. It is easy to stop to take a break, take a moment to look around, and realize life is pretty good. That is when the fire sputters.

I have observed this struggle in my own life over the past few years. Coming out of college I spent a lot of my free time writing code, exploring web development, and dabbling in quality videogames. My job made my personal life comfortable. My free time consumed by a long distance relationship and more relaxing hobbies. It was easy to burn several nights with instant messaging, watching tv, and playing videogames. I maintained some work ethic on weekends at home by myself or designated nights. My wife began working at the same place as me, and it was easier to leave work at a consistent time instead of staying a few extra hours. I started to get back into tennis and also picked up a weekly hockey game. I bought a house. Quickly one thing added on top of another. I do not put in the hours I used to exploring technology in search of ways to improve the way things are done. Fortunately, I have become more efficient and can accomplish more in less time. Still, there is always more to do and always less time to do it.

So I ask myself, “Is this good enough?” Is putting in my forty hours in IT and going home enough? Is it okay to account for the eighty percent because the final twenty percent is too expensive? At some point we have to go beyond what seems reasonable. At some point we have to take a leap and try new things if we want to go where we have never gone before. Thanks to my wife I am signed up in the Dwolla hackathon coming up in a couple of weeks. I get twenty four hours to develop an application using Dwolla’s API. There are a couple technologies involved which I have not spent enough time playing with. I have not been up for twenty four hours straight since I was up for thirty six hours working on my compiler course project during finals week in 2009. In my case, I am happy to say my answer is still “No.” What’s yours??

Bull Riding

Written on March 31st, 2011 by

It has been a while since my last post. With the holidays and a couple large work projects, I have not had much time. When I have had time, I have been spending it relaxing from everything else. Work has been consumed by me leading releases for the largest and most complex applications my team supports. Given the past predecessors were not as diligent in their work, I am left with little technical understanding of the application as a whole, patchwork design, shoddy code, and minimal documentation. This makes each new feature or changes to existing ones a challenge. My area is behind the times when it comes to application development. As a result, I have been learning to apply automated unit testing using JUnit and EasyMock at an enterprise level, and then training everybody else. Along with that, I am working with a handful of others to bring Jenkins, formerly Hudson, into the process as well. Through using these two pieces together, we should be able to greatly increase the integrity of the existing application. Then it will simply be a matter of keeping on top of developers to make sure the low level design is solid rather than splurging more lines of code into an already bloated method.

Fortunately, I get time away from work too. A couple weekends ago, I took some extra time away from work. I conveniently aligned my time off with the start of March Madness. I also spent three days learning to ride bulls from a retired professional bull rider, Lyle Sankey. For those who are friends with me on Facebook, pictures are uploaded there. I should have videos uploaded on youtube eventually too. The highlight of the weekend was climbing down into the chute on top of the back of a bull, taking the bull rope, sliding up, and nodding my head to have the gate opened. I cannot describe how it feels, but I will try anyways. I had an extreme sense of calm despite the adrenline rushing through me. There are a lot of things to pay attention to when sitting on the back of a 1500lbs animal surrounded by a steel cage. I could have worried about what could go wrong, but that would have only led to something going wrong. Instead, it was a matter of focusing on the details, getting the job done, and getting on with the ride. It was a thrilling experience!

I can hardly say I know what happened during my first ride. I remember nodding my head, hearing the gate open, then things got really violent and I was on the ground. In watching the video afterwards to review the ride, I actually found out the bull reversed out of the chute. This means rather than turning with its head towards the arena and bucking straight out, it stepped out with its hind end first, spinning around before beginning to buck. If I had been asked immediately after my ride, I would have said it went out straight. The only thing different during my second ride was I had a better idea of what actually happened right after it ended. My third and final ride was by far the best. By sheer luck I got one of the more difficult bulls any of us got put on that weekend. One experienced bull rider who was there helping with the livestock told me it would have given him a run for his money. I put up quite a fight, but eventually it managed to throw me away from my hand after the first circle.

I feel disappointed trying to describe the whole experience because it simply does not do it justice. The only reason I do not foresee me actively pursuing bull riding is because it is such a violent sport. My life is simply too comfortable to be thrown around weekend after weekend seeing how long I can go before I receive a severe injury. There are a lot of things that can be done to reduce the risk of injury, but it is still far too easy to be stepped on by a bull at the end of a ride. That being said, I still recommend it those who have not tried it and are in good shape. It was a once in a lifetime experience!

Unless I decide to do it again…

Angry Motivation

Written on December 4th, 2010 by

I have spent the past couple of hours watching a snowy football game, reading Eugene Wallingford’s blog, listening to music, and drinking hot chocolate. I would like to make a side note that my hot chocolate is now cold due to being engrossed in everything I have been doing. Fortunately, I have reserves. In a particular post on my former professor’s blog, I came across this line:

Despair and anger are common emotions, and they sometimes strikes us hardest when we know how to solve problems in one way and are asked to learn a new way to think and do.

I am frequently intrigued by the emotion of anger. I happen to be stubborn, temperamental individual. However, I also believe my rage is an intrinsic part of who I am. The quote above struck a note with me. When something aggravates me, I become hellbent on ridding myself of the problem. The solution can take a variety of forms, but the most common is to dominate the problem into submission. Running away or taking an alternative route rarely occurs to me. I am sure some of my success in school and learning new things has been driven by the anger Wallingford mentioned. As I start into a simple task that quickly becomes far more difficult than anticipated, rarely do I cut my losses to go another direction. I become more engrossed with the problem because I want to figure it out. It is an insult if I cannot complete it.

Now I return to my regularly scheduled Duke basketball game, more blog reading, and a database upgrade.

Learning to Lead

Written on December 1st, 2010 by

I have spent my life learning to be the best at the things I do. It is a constant and ongoing effort. I started by having an initial destination, but no way to get there. I learned to drive. Then as I discovered more destinations I wanted to visit, I learned to become a better driver. I wanted to be able to get there as soon as possible. Sometimes that meant taking new routes, driving over different terrain, or in extraordinary weather. I became a skilled driver. Eventually, others wanted me to take people with me to my desired destinations. However, they were not the driver I was. They did not know the way. They had been told of the next grand location, but did not understand the path to get there. I was capable of figuring it out. Thus, I was asked to help them get there. Unfortunately, they quickly fell behind me and lost the path. I needed them to complete my journey. I found myself going back to look for them and point them in the right direction again. Showing them the way was not enough. It turned out the other drivers did not know how to drive as well as I did. They could not follow me. Some of the paths I chose, they could not traverse. Not only did they need to know the way, they needed to be taught how to drive too. I do not know how to teach people to drive. I only took the time to learn how to drive myself. Since teaching people how to drive is becoming one of the things I do, I need to learn how to do it as best I can. Leading people requires far more skill than making the journey myself. I have to understand the driving skills of each driver following me. Can they drive in rain? Can they drive on gravel? What kind of car do they drive? Is it a front-wheel drive vehicle? Is it a 4×4? This determines the route we can take. Some locations cannot be reached without teaching them new driving skills. We cannot reach an isolated mountain location with only a gravel road as an entrance unless the drivers are capable of navigating mountainous terrain on gravel roads. If they need to learn the skill, I need to know how long it will take them to learn it. Is it reasonable to reach a destination over a mountainous gravel road in three months if they do not have any experience with gravel or mountains? Perhaps I need to take them to slightly less desirous location that only requires the ability to drive on gravel. This would allow me to spend three months making the journey while teaching them about gravel roads. We can follow it up with a second journey to understand what it is like in mountains. It may require us to take six months to get to our final destination, but it may prevent a bad accident along the way. The bad accident could set us back even further if they are kept in a hospital for twelve months. There is a lot to consider when leading others to a destination I could reach myself without much fuss. Why do I need to lead others to a common destination? I cannot do everything by myself. There simply is not the time. If we are transporting resources to the new spot, I may have to make many journeys to get everything to the final location. By then, it could be too late. If I lead others, they can help transport. They could also begin to make trips without me. Maybe someday they would lead others. Our overall productivity increases as I teach others my craft. I wanted to go somewhere. I learned to get there. Others want the ability to get to the same location. I need to understand their skills along with how well they can learn new skills to plot a course we can all take to accomplish the journey in the shortest amount of time possible. Learning to lead is not easy. I suspect I will be working at it for a long time. After all, I spent 23 years learning to drive, and I am still learning new techniques to this day. The best advice I have so far is tell people where you are going, tell them how you intend to get there, and then help them get there.

Side Note: I am a software developer. I currently am leading a team of six to eight developers depending on the day. We need to learn the latest technologies and methodologies to produce quality software in a cost effective, yet timely, manner. All that being said, I have been playing a lot of Gran Turismo 5 lately on the Playstation 3. Thus, I spend a lot of time analyzing how I and others on the road drive. I thought I would combine the two to explain my latest feelings and insights. No matter where you go in life, never forget how you got there. I got to where I am in life by working hard and playing harder. I enjoy making software, but I will always make time for playing videogames.

Never

Written on October 27th, 2010 by

I grew up to the phrase, “Never say never.” I grew up reading fantasy and science fiction books and watching action movies like any other boy. However, perhaps more than the excitement, I loved the story. When I got to school, I did not stop reading or watching movies. I also began getting into role-playing games (RPG’s) on both the console and the pen-and-paper variety, think Dungeons & Dragons. While those are a little beyond the norm, I took it a step further. I paid attention in history class. I heard about Alexander the Great and Julius Caesar. I read about Napoleon and General Eisenhower. I watched documentaries on Ulysses S. Grant and Robert E. Lee. I grew up believing a person could be great. I believed I could be one of them. Then I got older.

I was expected to find a way in life. I could not continue dreaming of being the next Michael Jordan, Steve Young, or Andy Roddick. I had to grow up. I was never very keen on the idea. By this time, computers had become an avenue to more stories and dreams. I began to pursue basic web development, and then on to programming. I could not decide whether I wanted to make games that future generations could love or websites which would open the eyes of others. I began walking down that path. On the side, I kept myself grounded with history classes. They were a constant reminder of where I wanted to be. I wanted to be in the history books.

I graduated college and got a job. I got told, “Welcome to the Real World.” It turns out it is not much different than whatever world I was in before. People have expectations, and it is my responsibility to meet them. That means even if I do not like it. I am very independent. I do not like someone else telling me what to do. At the same time, I want people to listen to me. I used to yell louder in hopes I could drown out the others until they had to listen to me. Sometimes I still do. With my job, I wanted to write code. I wanted my code to change the world.

My boss recently shifted me into a new sort of role. I coordinate developers literally on the other side of the world as we work on an application used by people in the same city as me. The new role requires getting up before the sun because people on the other side of the world work very different times than we do here. I am told it has something to do with an 11.5 hour timezone difference. I also spend most of my days in meetings. Some days I spend the entire day in meetings. Each meeting has people asking me to get work done. I struggled to understand how I was suppose to get work done while I was constantly in meetings. I wanted to be writing the code rather than sending it off to others. I could do it better. I yelled a little bit.

I still do not know whether I want to continue pursuing the road I am on or return to the fork in the road. However, in traveling down this new road, I learned something. If I want to be great, I do not have to do the things at which I am great. I just need to continue meeting the challenges laid before me. I have to rely on the people around me to help me. I have to rely on others to point me in the right direction when I can no longer see the road. I will have to try new things. I do not know where I am going. I do not know where I will end up. The one thing I know is I can never stop trying.

We Don’t Do Software

Written on September 1st, 2010 by

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.

Balancing Today with Tomorrow

Written on August 25th, 2010 by

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.

Words of Wisdom (06.30.10)

Written on June 30th, 2010 by
  • 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.

Veni, Vidi, Vici!

Written on April 30th, 2010 by

My dear Ellinore gave out on me this winter. I think it was caused by moving in subzero temperatures. The end result was the motherboard bit the dust. Considering it was the oldest piece of hardware in her, I was not horribly upset. It was outdated enough that purchasing something to work with all the other complementary parts was nearly impossible. Modernizing it would have resulted in replacing most of the components. My final decision was to build a wholly new computer.

Hardware had definitely changed since I originally built Ellinore. The best part was the change in price. When building a system one’s self, it is easy to get something more than the average person needs for dirt cheap. Here are the new parts:

I also pulled my two 1TB Sata Western Digital hard drives from Ellinore since they were fairly new and had all my data.

The end result was a computer which has more processing power than I will ever need in a very long time. I might add that I paid just over $1000 by the time the cost of the hard drives is added. This is the reason I build my towers rather than paying more for less hardware from the normal retailers. It supports virtualization that I do not fully utilize yet. Still, the ability to easily run a few guest virtual machines on a host operating system is extremely convenient when tinkering with new setups. It also looks really good on my television in 1080p when I want to watch movies or HD shows on Hulu.

Ultimately, I needed a name. A machine with such power was only deserving of a name on par with a single individual in all of history:

Caesar.

Flow of the Game

Written on March 11th, 2010 by

When playing a first-person shooter (FPS), a player cannot underestimate the importance of the flow of the game. It is one of the most important facets of the game to give attention, and, yet, most people do not consciously think it about it even once during the course of a full game. The flow of the game defines how quickly individuals can move about the maps, where they can move, and when they can move. Everyone involved affects it. Spawn locations affect it. Respawn delays affect it. Read the rest of this entry »