Fantasy Football Playoffs – A Toastmasters Speech

Enjoy this speech I gave about Fantasy Football Playoff time. In this speech, I focus on using body language and gestures during the presentation.

Watch These Movies if you Want to Work at Google

How Many Characters are in this Blog Post?

Brain HurtsDo you remember being taught math when you were young? If you were anything like me you hated word problems. That was the only time during math class that we could not just use mechanical processes. Instead, we had to think about how to apply those processes to real world problems.

The natural evolution of word problems in the adult world is Brain Teasers, those pesky puzzles that are supposed to be fun but, more often, are frustrating. For most people, the skill of solving riddles and impossible estimation problems has never had much use. That was until clever software companies, such as Microsoft and Google, famously began asking these types of questions during job interviews. The legends of these companies’ interview tactics are so predominant that they have essentially become their own category of technical interview questions.

How many golf balls can fit in a school bus?

Unprepared candidates confront brain teasers with shock and horror. A feeling of futility drapes over them like a giant rain cloud. Fortunately, all the candidate needs to understand is that he or she does not necessarily have to answer the puzzle correctly to “pass” the test.

 

The Interviewer’s Perspective

Brain Teasers are great because when they work, they are a simple way to lighten the tone of an interview. They are also great at unearthing important traits of the interview candidate:

  • How does the candidate handle pressure, such as a seemingly impossible problem?
  • How well can the candidate express his or her thoughts regarding a difficult solution?
  • Is the candidate capable of “thinking outside the box” or are all proposed solutions too straight-forward?
  • Specific types of puzzles test the candidate’s ability to estimate large unknown quantities.

“A hunter sets up camp, walks 10 miles south and 10 miles east. He shoots a bear and drags it 10 miles north back to his camp. What color is the bear?”

 

Wooden Puzzle

My Perspective

Through years of practice, I became comfortable with the word problems in math class. It was a required step in progressing in mathematics. Likewise, Brain Teasers become conquerable with practice.

Personally, I love Brain Teasers now. I enjoy when a friend sends me one I have not before heard. I find it worthwhile to stretch my mind by thinking about different types of problems.

Still, Brain Teasers are rather overused in interviews. As stated above, they can be useful when they work but, when they do not work, they often fluster an otherwise good candidate. Some puzzles require a certain basis of knowledge that can lend itself to bias. Consider the puzzle about the hunter above, the answer is “White.” Why? Because the only place on Earth that someone can walk X distance South, X distance East or West, X distance North and then arrive at the same point again is at the North Pole. Polar bears are the only type of bears that live there. Polar bears are white. The candidate may be able to logically reason through the problem, but sometimes a small piece of “common knowledge” becomes a roadblock.

Lastly, Brain Teasers take too much precious time during an interview to not uncover anything of import. They test the “A-Ha moment” of the candidate, a long period of silence followed by the sudden discovery of the answer in the candidate’s mind. In cases where the candidate solves the problem right away, it usually does not mean that the candidate is brilliant but that he or she has heard it before.

 

Tips for the Interviewee

As I mentioned, it is not required of the candidate to solve the problem. In most cases, the interviewer is trying to gain insight into how the candidate thinks and describes his or her thoughts. Therefore, the #1 suggestion for approaching these problems is to communicate your thoughts while you are reasoning through them. Talk aloud about alternative solutions you are considering. Ask questions of the interviewer about the constraints of the problem. If you cannot come up with a solution, explain some option that would get you close. Going back to the polar bear problem, it would probably be enough to understand that the hunter is at the North Pole.

For more tips and great job interview Brain Teaser examples, I recommend the book How to Ace the Brain Teaser Interview.

 

Brain Teasers in the Movies

Some of the most fun Brain Teasers to discuss with friends are those from movies. It’s interesting when someone has seen the movie and remembers the solution, but when you propose it again after some time, he or she does not remember it. Below are some examples of the best movie Brain Teasers (hopefully YouTube won’t remove them).

 

Metro (Retrieve a cap from a bottle)


 

Labyrinth (Which door to knock on?)

 

Die Hard with a Vengeance (How to get exactly 4 gallons of water)

 

Batman TV Series (Top 10 Riddler riddles)

 

Post your favorite Brain Teasers in the comments and good luck on your interview!

3 Silverlight Architecture Tips with Brad Himelstein

Recently, I dove back into XAML-based development to create some Silverlight plugins for a large web application. Most of my experience in XAML came from writing a WPF application from 2008 to 2009, so I had much to learn about the asynchronous data retrieval paradigm used in Silverlight. I had questions about UI Design Patterns, Service-Oriented Architecture (SOA), and how to reuse class libraries, so I asked Brad Himelstein, from CinCom, if I could pick his brain while we hit a few golf balls. Brad has continued working with Silverlight and WPF for a few years, since we worked together on the aforementioned WPF application.

Below is a summary of his tips as well as some quotes from our conversation.

 

Tip #1: Use Model View ViewModel (MVVM)

Me: “Do you ever use any sort of patterns for the UI?”

Brad: “MVVM

Me: “I am just now getting introduced to that. What are the benefits?”

Brad: “It is great, because you just setup the data context and do all your databinding, and it just magically works. Two-way binding works as well.”

 

Brad identified additional benefits during other parts of the conversation. MVVM’s primary purpose is to separate the concern of the behavior of an application from that of the user-interface design. It is a practical implementation that is cleaner to understand and easier to pass back and forth between designers and developers versus the default approach of placing logic in code-behind files. He provides sample MVVM source code here.

 

Tip #2 Extend Proxy Classes with Shared Custom Code

In my application, I use WCF RIA Services to query server objects and return them to the Silverlight client. This technique simplifies the process of retrieving service data and populating local objects because a local proxy object is created and populated automatically. In Brad’s words, “If the web service returns an object of class ‘Foo’, we don’t need to redefine ‘Foo’ in the Silverlight app.”

Unfortunately, I had a great deal of logic included with the retrieved classes that I also wanted to be able to use in the client. I asked Brad how to elegantly work around this limitation of Service-Oriented Architecture.

Me: “What I was hoping to get with RIA Services was, say I’ve got some class I’m returning from the service. I can load it with data easily but I have additional calculation properties on this class, such as FullName, which is just a property that returns FirstName and LastName concatenated. A local proxy object is created automatically for use in Silverlight, with data populated for FirstName and LastName, but the proxy does not retain calculation logic. Since I have a server-side object that has calculation properties defined, how can I share that code for use with the Silverlight client and the proxy object?”

Brad: “If you know you’re going to use FullName, then just create another string called FullName and set the property on the server so it is passed down to the client in the object, because it is not going to take those calculated properties and bring them down.”

Me: “But then that FullName would have a state when it returns.”

Brad: “Remember, you can extend everything. So on the client side, you can alternatively have your own Foo class, which can be used to extend the partial Foo class that is returned from the server.”

Brad’s suggestion was enough to help me come to a solution that fit my needs.

 

Partial Class Extensions

Let’s use the sample Class “User” to continue our example from above. In such a class, I can place fields of the User, such as FirstName and LastName in one file named User.cs. User class should be defined as a partial class, so we can combine definitions of the class from 2 separate files. Hence, in another file, named UserCalcs.cs, we should define calculated properties, such as FullName. At this point, the server behavior will work as it always would have if we had just implemented all properties and fields in the one file. However, the Silverlight client would not yet know about the FullName property.

 

Shared Files

An important limitation of Silverlight is that it can only reference projects that are compiled as Silverlight projects. In other words, Silverlight cannot natively reuse definitions from standard .NET class libraries. What it can do is recompile normal .cs files into a Silverlight assembly.

To do this, right-click on the Silverlight project in your Visual Studio solution and click Add Existing Item. Navigate to the file that contains the calculated properties, UserCalcs.cs. Click the file, and then click the down arrow next to the Add button. Choose Add As Link.

The Silverlight project will now compile this partial class definition. It will extend the proxy class as well as the server side class from the same file. Therefore, maintenance of those calculated properties can be shared between the client and the server side code from one file.

 

Tip #3 Learn HTML 5

Ok, Brad didn’t actually say this so bluntly, but it was a recurring theme of our discussion. Based on recent information about upcoming Windows (8) releases, Silverlight’s future is unclear. From what I have heard, Microsoft is committed to version 5 of Silverlight (current release is 4) but has made no guarantees beyond that. Windows 8 will have 2 versions of its Internet Explorer 10 browser: tablet and desktop. The tablet version will not allow plugins, like Flash and Silverlight. Some have summarized the decision by stating that from Microsoft’s standpoint, Silverlight is “no longer strategic.”

Still, the death of Silverlight development, especially in corporate environments, is distant. Here is a great Microsoft client decision workflow about the correct technology to leverage based on your needs. I believe it reinforces the idea that even after Windows 8 is released, new Silverlight applications will have their place.

Lastly, even though Windows 8 tablets will not allow Silverlight plugins to be loaded within its browsers, native Windows 8 tablet apps will be developed using WinRT. As Brad informs us, this gives us Silverlight developers hope, as WinRT is still “just C# and XAML.”

 

By

How to Query the Yahoo Fantasy Football API in .NET

The Coveted League TrophyAs technical co-commissioner of my Keeper Fantasy Football league, I perform a good deal of administrative duties during the offseason. I have to sort through all the player transactions from the season to determine which NFL players are eligible to be kept within our league rules. One year, at the end of the 2010 season, I waited too long to gather this data. I normally click through the Yahoo Website to see all the historical transaction data necessary. However, after a certain point in the year, Yahoo removes access to the year’s information.

Luckily, in late 2009, Yahoo opened up their Fantasy Football API. Therefore, I was able to implement a .NET solution to retrieve the data I needed. Below are the steps I took.

The goal of our solution will be to create a simple ASP.NET Web Forms application that authenticates to Yahoo and then enables us to query the API.

Perhaps the most difficult hurdle to overcome is authentication. Yahoo uses a web standard called OAuth, which is a “simple, secure, and quick way to publish and access protected data”. You can find out more about it here, as I do not plan to delve into the low-level details of this protocol. The difficulty I found was that there are not many examples of .NET applications using this technology on the web.

To help us authenticate, we will leverage a .NET library called DevDefined OAuth.

  • Create a new Web Forms solution and add a reference to this project or compiled dll.

In our next step, we will create a simple button (named AuthenticateButton) in the Default.aspx page to kick off the authentication process.

  • Create a click event handler for your button. Enter the following code in the code-behind:

string requestUrl = https://api.login.yahoo.com/oauth/v2/get_request_token”;
        string userAuthorizeUrl = https://api.login.yahoo.com/oauth/v2/request_auth”;
        string accessUrl = https://api.login.yahoo.com/oauth/v2/get_token”;
        string callBackUrl = http://domain.com/Query.aspx”;

         protected void AuthenticateButton_Click(object sender, EventArgs e)
        {
            var consumerContext = new OAuthConsumerContext
            {
                ConsumerKey = “[provided by yahoo]”,
                SignatureMethod = SignatureMethod.HmacSha1,
                ConsumerSecret = “[provided by yahoo]”
            };

             var session = new OAuthSession(consumerContext, requestUrl, userAuthorizeUrl, accessUrl, callBackUrl);

             // get a request token from the provider
            IToken requestToken = session.GetRequestToken();

            // generate a user authorize url for this token (which you can use in a redirect from the current site)
            string authorizationLink = session.GetUserAuthorizationUrlForToken(requestToken, callBackUrl);

             Session[“oAuthSession”] = session;
            Session[“oAuthToken”] = requestToken;

             Response.Redirect(authorizationLink);
        }

 

To obtain your ConsumerKey and ConsumerSecret strings to place into the above code, go Yahoo’s Developer Projects Site and create a project. When creating your project, enter the Application URL (e.g. http://domain.com) and App Domain (e.g. domain.com) of the deployed location of your web site. Also, make sure to enable access to the Yahoo Fantasy Football API.

Take a look at the value in the callBackUrl string above. This needs to be edited to be an address on your web site. As part of the authentication process, Yahoo calls back to a URL on your site and therefore requires your site to be accessible from the public web.

  • Add a new web page to your project named “Query.aspx”
  • Place the below code in your Page_Load event handler

        protected void Page_Load(object sender, EventArgs e)
        {
            OAuthSession session = (OAuthSession)Session[“oAuthSession”];
            IToken requestToken = (IToken)Session[“oAuthToken”];

             // exchange a request token for an access token
            string oauth_verifier = Request.QueryString[“oauth_verifier”];
            if (!String.IsNullOrEmpty(oauth_verifier))
            {
                IToken accessToken = session.ExchangeRequestTokenForAccessToken(requestToken, oauth_verifier);
                Session[“oAuthSession”] = session;
            }
        }

 

Now that we are finished implementing the authentication code we can write the query submission logic.

  • Add a textbox (named QueryTextBox), a label (named ResultsLabel), and a button (named QueryButton) to the Query.aspx page
  • Add a click event handler for your button. Enter the following code in the code-behind:

        protected void QueryButton_Click(object sender, EventArgs e)
        {
            string query = QueryTextBox.Text;
            IConsumerRequest responseText = ((OAuthSession)Session[“oAuthSession”]).Request().Get().ForUrl(http://fantasysports.yahooapis.com/fantasy/v2/” + query);
            ResultsLabel.Text = responseText.ToString();
        }

 

You are now ready to query the Yahoo Fantasy Football API. Here is how you use it.

  1. Load the page by navigating to http://domain.com (replace “domain” with your website domain name).
  2. Click the Authenticate button

  1. Yahoo’s site will guide you through the steps to login to your Fantasy Football account and redirect to your site when finished.
  2. Enter an API Query into the text box and click “Submit Query.”

 

There are definitely improvements that can be made to our sample application. For instance, the results output from our query are not easily readable, but they can be simply output to an xml document or some other format for reading.

The amount of data that can be extracted from the API is huge and can be leveraged for some very creative purposes. For more information about the query syntax as well as available data, see the Fantasy Sports API Documentation.

You can download the code for the sample application.

 

Lastly, below are some resourceful links:

http://github.com/buildmaster/oauth-mvc.net

http://oauth.net/code/

http://oauth.googlecode.com/svn/code/csharp/

http://blog.techcle.com/2010/03/20/simple-oauth-integration-for-twitter-in-asp-net-mvc/

http://www.codeproject.com/KB/cs/Delicious-OAuth-API.aspx

http://code.google.com/p/devdefined-tools/w/list

http://developer.yahoo.com/fantasysports/

http://developer.yahoo.net/forum/index.php?showforum=122

 

I invite you to connect, but only on your own time

This blog post is the 3rd and final of a series of Anti-Pattern stories

In this last post of the series, I finally take the opportunity to rant a bit. Thinking back to the time when I worked at the aforementioned small company, I realize the reason I became so emotionally affected was because the company seemingly had great growth potential that never materialized. Below is one last story of workplace theatrics accompanied by quotes from my favorite movie of the last 5 years, Forgetting Sarah Marshall.

“Do Less… Well no, you gotta to do more than that”

One of my favorite lines from the movie applies to the network monitoring policy at this corporation. For at least some period of time, the paranoia from above was deep, resulting in a robust monitoring software rollout. Whereas some companies track proxy statistics to determine broadband usage and lists of sites visited by employees (a tactic I have no problem with), that was just the beginning in our case. Here, all corporate emails from most employees were published on the network to keep them honest. Additionally, the owner of the company installed software to be able to view keystrokes and screenshots from each employee’s computer usage on the network. Details about this product’s existence as well as the tracking information collected were only supposed to be accessible to the owner. When a Network Admin noticed a peculiar “SpyWare” program on the server, the “cat was let out of the bag”. In retrospect, we all should have had some suspicions based on the broad statement allowing company collection of data in the Employee Handbook.

Knowledge of keystroke logging was held in a fairly close circle, shielded from new employees. Therefore, I did not find out about it right away. Granted, I do not like the idea of anyone being allowed to track keystrokes, as that provides all the information needed to login as me on the network and possibly additional websites, etc. However, the network monitoring policy that frustrated me the most began when “questionable” sites became blocked, inaccessible to users on the network. Some of the obvious sites you would think of were on the list of blocked sites (Gaming, Personal Email, MySpace) but also blocked were those not so obvious sites (Personal Banking, LinkedIn, YouTube, Random Blogs). Many times during the day I would be blocked from information on the Internet I needed to do my job, such as tutorial videos on YouTube or programming help on a blog. The “straw that broke the camel’s back” for me was when I received a LinkedIn Connection request from the owner, but I was not allowed to accept it while on the company network. How can the site be considered valuable and reputable enough for the owner to use it to connect to employees during work hours but not reputable enough to actually allow them to reciprocate while on the job? It was as if we were being asked to “Do Less.”

“So then do something about it”

If working at this place was so dreadful, why did I continue to work there? Well, for one, I didn’t have the option to create a rock opera about Dracula (I kid). But as stated above, I truly believed that the company would grow and along with that would come personal opportunities. The key benefits to working for this company were:

  • Growth Potential
  • I was given tremendous amounts of responsibility early, which was frequently a rewarding challenge
  • I viewed the job as a resume builder, thinking that I could land any job after about 3 years
  • My colleagues were great to work with and are some of my best friends today
  • I got to work on brand new Microsoft technologies

“It’s really good, Peter. I just don’t understand it”

3 posts now have revolved around my time working at this company. It’s time to get to the point by explaining what I learned by constantly having to “walk on egg shells.”

  • It pushed my leadership ability to a new level. I was forced into making technical leadership decisions within a short period of time after beginning the job. Because of the high turnover, I went from being the 3rd most experienced technical person in the company to the 1st. This meant that I had to learn to make decisions without the reliance of someone who had relevant experience.
  • I learned when and how to speak up, to voice my opinion.
  • I learned that it is important to be able to articulate the points for or against a decision.
    • When responding negatively to news about a decision, I learned to be able to describe reasons why a decision made me uncomfortable.
    • When presenting, it is important to start with an “Executive Overview”; don’t assume that the audience knows immediately what you’re talking about.
    • When selling an idea, I learned to prepare for critique and to validate benefits.

Perhaps most importantly, I began to understand how stressful it can be to own/bootstrap your own company. For the owner, his or her entire livelihood is at stake every day. The occasional emotional response to bad news can be expected.


Hire ‘em and Ignore ‘em – Another Anti-Pattern

This blog post is the 2nd in a series of Anti-Pattern stories

As I wrote in my last post, turnover at one of my previous employers was abysmal, a dreadful 50% each year. I don’t know the industry calculation for employee turnover but here’s mine:

Count the number of people at the company on January 1.

If half those people are not there a year later, then that’s 50% turnover.

I also mentioned in the last post that the company was fairly small. I think it’s fair to say the company’s growth was restricted by the continual loss of (mostly) talented employees. Nevertheless, you would think that a company with so much experience filling vacant roles would have become effective at training and onboarding new hires.

On the contrary, this company’s orientation process was inconsistent at best, nonexistent at worst. Instead of a new employee’s excitement being maximized during its peak, it was met with a complete lack of direction. Whatever willingness to learn and sacrifice the employee had was quickly drained with feelings of boredom, irrelevance, and defeat. The culture had become so rotten that some company members actively avoided new hires until they had “established they could cut it.” In other words, it was not considered worth the time to introduce one’s self to a new employee until he or she survived a certain minimum number of weeks on the job. Another common scenario was that new employees were not given any tasks or attention when they started. They were just left at their cubicles to stare at their computer monitors and look busy. They usually did not know who to ask for help or for more work to do so they became frustrated with the lack of mental challenge and began wondering what alternative employment options existed.

Exciting Lunch

Posted by jmerriam7

As I alluded in my previous post, a more dramatic scenario occurred when new hires were introduced to their first “dropped bomb,” when an ambiguous “corporate catastrophe” was explained in a monthly meeting. They were incidentally led to believe their jobs were in jeopardy, leading them to revert to their recent yet unsatisfied job search as a fallback option.

It is my belief that new employees require attentive treatment and care in order to rapidly train them how to do their jobs and more importantly to reduce turnover. In many cases, companies are willing to spend time and money on recruiting talented employees, but next to zero time on them once they have signed an employment agreement. With a thorough employee orientation program, new hires are incorporated into existing teams and they feel confident about their efforts, abilities, and the organization. They begin to produce results earlier begetting momentum and a sense of accomplishment. Doesn’t this sound like a better outcome?

Accordingly, if you remember only one thing from this post, remember this:

Employees in orientation must still be recruited!

 

Below I outline a few recommendations for new hire orientation. They may seem like remedial suggestions but I can assure you they are new concepts to at least one company. Picking and choosing even a few to implement should increase morale and productivity of new employees.

Introduce the new hire to people with whom he or she will interact regularly

One of the goals of employee orientation is rapid integration into the existing team. Introduce a new hire to close (in proximity or function) employees on the first or second day. If the company is small enough, introduce him or her to everyone in the organization.

Take the new hire out to lunch with the team

Ideally this would take place on the first day. When the new hire is eating lunch with peers, he or she can begin to ask less formal questions about the job or company history.

“Pair up” the new hire with someone knowledgeable

Ideally, there will be an experienced member of the new hire’s team in a similar role. The experienced member should teach techniques and best practices to the new hire. Additionally, this semi-formal pairing provides comfort to the new hire that there is always someone that can answer questions.

Formally train the new hire

For smaller organizations this is not as practical, as most knowledge is tribal. However, medium-to-larger organizations with established roles often spend the first few days or weeks training new hires in a classroom. Such focused learning of company-specific knowledge reduces experience needed to perform the job.

Implement a formal mentor/mentee arrangement between different departments

Pair a new hire up with an experienced company member from a separate department. The experienced member should be given knowledge of what is expected of a mentor in such a capacity. The mentor schedules regular (e.g. weekly or monthly) meetings with the mentee. This setup provides new hires the opportunity to ask questions about corporate culture or specific difficult scenarios without concerns of corporate politics.

Develop a central knowledge base

This often takes place in the form of a wiki. New hires should be directed to an internal web application that can be searched for information that has helped employees in the past.

Setup a new hire’s computer and working environment

.NET developers like me encounter this anti-pattern frequently. We show up on our first day and are given a laptop with a fresh installation of Windows on it and administrator privileges. We are expected to spend the day (or however long it takes) installing the software needed to perform our jobs. Visual Studio alone takes about half a day to install, so you can imagine the extremely unproductive time wasted on staring at progress bars. I recommend setting up the computer to a point past all the down time. It should be easy for a current developer to work on his or her own computer while another one is plugged in at its side getting important programs installed. If there are specific development environment configuration settings that a new developer should know, leave those incomplete for a learning experience.

 

Retaining newly-hired employees is essential for organizational progress. Great opportunities are lost when employees leave your company before significantly contributing to its success. The company loses money and time on recruitment, training, salary, and also could lose the opportunity to hire the second-best candidate, who likely has joined another company already. By implementing an orientation program with some of the above strategies, turnover of new hires can be greatly reduced. And if a company-wide “restructuring” must occur, at least show some sensitivity to the employees that are considered valuable so that they feel secure in their positions.

 

 

 

2 Steps Forward, 3 Steps Back – A Leader’s Anti-Pattern

Recently, I have struggled to maintain the blogging pace (1 every 4 weeks) that I set as a goal for myself at the beginning of the year. The difficulty can be easily explained. I have been meaning to share some stories from past experiences. However, I have hesitated, worrying that by publicly displaying my thoughts about sensitive topics I could be burning the bridges I have built with past colleagues. Ultimately, I’ve decided to write about some lessons learned based on advice from a mentor, “sharing how you overcame difficult situations is always a good thing.” I will attempt to be objective in my recollection as opposed to writing a long-winded rant. Names will be withheld to protect the guilty. Nevertheless, I can say with certainty that the chaotic, passive-aggressive environment of the following situations taught me more about dealing with superiors and office culture than anything else.

Since I plan on writing more than one post around the same topic, it is useful to spend a little effort describing the culture at my previous employer. First of all, the company was small. It was big enough and established enough to not be considered a startup anymore. However, it was small enough that any change that ownership decided on could be carried out in a matter of days, and drastic decisions were made… frequently.

Once a month, all employees met over a long lunch to discuss important topics, like current status, growth, and direction of the company. This was not an abnormal concept, but it was at these meetings where we were met, more often than not, with such flummoxing news that we all left in disbelief. We began to walk into the meetings each month expecting a new “bomb to be dropped” on us employees. Despite hearing that company financials were good, we would learn of a completely new corporate direction. Also typical would be revocations of previously approved “perks.” Or, as we looked to our left and right and noticed certain people were not in attendance, we would soon find out that these folks had been fired unexpectedly that day.

At the time, I merely chalked everything up to the passive-aggressive nature of leadership. But now, looking back, I realize what was happening was a lack of trust, and therefore a constant evasion of policies, conversations, and tactics that had previously caused pain. The moment anything went wrong, then in the eyes of those making decisions, it meant that everything on which the company was focusing was wrong, and changes needed to be made in the opposite direction. Put another way, the strategies being implemented may have been near perfect, but they were immediately abandoned at the first setback. It is this anti-pattern on which I will elaborate today, but first, I want to share an excerpt from a journal I wrote while on the job:

No one really ever knows if they’re doing a good job. “Reviews” have been neglected over the last 8 months. And, although we have a “Vision” statement, our environment changes so often and our direction always comes from one source, that it makes everyone feel like whatever they were working on before wasn’t right.

Another source for this is that we have high turnover here. So, if someone learns some method or process from someone else who was terminated, the thing learned gets questioned even though it might be highly valuable.

I think a way to resolve this is to understand that it occurs. When there is turnover, either more could be explained, or there should be a more thorough strategy for picking up the focus that the resource had.

 

The Solicitation of Advice

Recognizing that turnover was high and morale and productivity were low, leadership asked me and another employee to lead 2 workgroups over the course of several weeks to brainstorm areas at which the company needed to improve. The idea was that recommendation documents from each workgroup could be created somewhat anonymously, and would result in an honest, public discussion with the owner. The documents would follow a What, Why, and What’s Next format for each suggestion.

I cannot speak for the other workgroup, but mine was thoroughly engaged in the process of trying to “fix” the issues of the company. We spent hours brainstorming, collaborating, and refining our recommendations, but we ultimately knew that no policy change or employee benefit would take root unless a culture of trust arose first. Our message was clear. We aspired to a culture of trust in which we communicated openly, trusted the intentions of colleagues, and were patient with decisions based on education and experience. In order to fit the requirements of the document, we provided specific examples of ideas for change in addition to an overview wherein our culture of trust concept was explained (if you knew our audience, you would know how important adhering to the proposed document structure really was).

Eventually, our deadline arrived along with the promised “open” discussion. The owner was the solicitor of our recommendations and the authority for taking action. Our workgroup’s mission was to pitch our ideas on paper and await the resulting changes. Going into the meeting, I was excited about making a truthful, heartfelt, objective, and passionate case for change. My hopes were quickly squashed.

The owner had a day to review recommendations before the meeting. However, it apparently was not long enough to enable an objective reaction. The meeting kicked off with defensive remarks rebutting the specifics of nearly every recommendation. Those of us who were more vocal, or who had less to lose, prudently responded calmly, arguing for the case of the documents.

As you may have guessed, the multi-hour clash was all for naught. The owner, citing past misbehaviors by employees (most of whom were no longer employed there), told us we “were not mature enough to handle these changes.” The entire discussion focused on arguing specific points about low priority recommendations and how they would be carried out. It became emotional. The overarching message was not heard, nor internalized.

Maybe it was better to receive an immediate negative response than to follow the company’s normal trend of putting changes into place only to lose faith in those changes soon after. Still, that was the 2nd “bomb” I endured at the company, and it illustrates one of the biggest anti-patterns that was so common. We were given hope in the form of solicited advice, but absolutely zero progress resulted. The owner had effectively reduced morale to nil. There was a fleeting moment of trust (2 steps forward) followed by the regression to a comfortable status quo, except the engagement of several of us was lost in the process (the 3 steps back).

Don’t Be Lured by the Fringe Benefits

It seems common for software developers to question their career direction after several years of experience. I have gathered through my own feelings and conversations with others that there is a point in one’s career, usually after about 4 years, at which one wonders how long he or she can continue to build business application after business application. What once was challenging and exciting has become repetitive and mundane because the pace of learning has greatly decreased. The motivation to create yet another CRUD application (one that is categorized because it only involves the most typical business functions: Create, Read, Update, Delete) has been lost, resulting in many introspective hours staring out the window thinking about greener pastures.

What can be done to renew the sense of excitement and urgency that comes from developing something new? Myself, I thought that working in a “cool” industry that I was already interested in would solve the issue. I figured I already loved sports and casinos. If I got a development job in those industries it would make the dull tasks less dull. I would be able to tell myself, “Well, I hate clicking through smoke tests again but at least everything is sports-related!”

Roulette CasinoBaseball StatueFashion Industry

Posted by Heather Clemons
Posted by wallyg

Having worked at an Information Technology (IT) department for a professional baseball team before, I figured I would be able to leverage my experience and professional network to get an interesting new job. Granted, my work there was more of an internship than anything, but a role in such high demand serves as a recognizable selection process and it has been a great conversation topic during job interviews. It was a wonderful overall experience and I appreciated the opportunity. Therefore, I focused on new jobs with professional sports teams, video game development companies, and casinos.

Casino – For someone going to school in the middle of Ohio, I spent a lot of weekend time in college at casinos. I enjoyed Black Jack and was constantly searching for the perfect system to make money. I even wanted to be a professional poker player for a little while. I also toyed with the idea of taking a winter off to learn to be a Black Jack dealer. There is something about fiddling with those heavy clay chips that is both riveting and relaxing at the same time.

Sabermetrics – Growing up I was obsessed with baseball and individual player statistics. I played on a baseball team and played board games like Strat-o-matic. I made my own scoring sheets and even used to make my own player cards to represent my friends in the board game. During my job search, I joined SABR, the Society for American Baseball Research, and immersed myself into baseball statistics again thinking I could become a full-time statistician or statistical application developer.

At this particular time in my life, I knew I was moving out of state, so I figured it was a perfect time to make an industry change. However, at the time I was not comfortable with the prospect of not getting paid so I took one of the first jobs that was offered to me until something else presented itself. A funny thing happened at that company. As it was a small software product company, I learned that the environment there was close to what I had wanted all along. It was an old company by software standards, but it still had a “startup feel.” I learned what I wanted and what would keep me motivated:

  • The transparency of a small company makes it easier to absorb new knowledge about other business functions (e.g. Marketing or Recruiting)
  • There is a shorter feedback loop from working at a small company. This creates more accountability and helps employees to learn what is working faster
  • Being a software developer at a software company is a critical role and treated as such

Although the company had its share of problems, it showed me what I was looking for in a long term position. I wanted the growth potential and commitment to progressive technology that comes from a software product startup.

While working in a “cool industry” does come with perks, fringe benefits, interesting subject matter, and it may turn out to be generally awesome for some, I caution software developers to think about some of the hidden drawbacks to these types of positions.

Positions are in High Demand

Positions in interesting industries are both scarce and in high demand. If you are interested in a professional sport, does the city you live in even have a team at the highest level? If not, that’s scarcity. If you are lucky enough to see a job opening you are interested in, you must realize that there will be hundreds, if not thousands, of other applications. That’s demand.

As a result, salaries tend to be lower and expectations of working hours are much longer, especially during busy seasons or big events. Additionally, people hired into these jobs stay around for a long time. Because of the low turnover, it can be difficult to gain more responsibility by moving into someone’s role that has just left, limiting opportunities for promotion.

Technology comes at a Cost

By definition, the interesting industries mentioned do not focus on technology. They are generating revenue through entertainment. Therefore, it may make the job more entertaining but it changes the perspective of technology throughout the organization. Employees outside of the IT department view technology as cumbersome, productivity-restricting, and expensive. Any time there is a trivial bug in internal software, it will be treated as an urgent support request. Did I mention developers will be doing technical support?

To summarize, the key problem here is that the organization does not exist for the sake of progressing in technology. The IT department is a cost center. Any mistakes that cost money for the company were not budgeted for and get escalated quickly, making for a stressful environment for technologists.

Think it over

There are smaller drawbacks to consider too. Working somewhere that garners the awe of family and friends comes with requests to trade favors (e.g. introductions or getting event tickets). Additionally, sports teams and casinos are highly competitive with one another, so they are protective of advantageous processes and knowledge. I prefer to be able to learn from peers both inside and outside of my company as opposed to being a slave to competitive information silos.

In reviewing the pros and cons of working for a professional sports team for this post, I have almost talked myself back into trying to work for one. The fringe benefits are great (e.g. free game tickets and meeting athletes), it helps build a resume, and colleagues are all intelligent and ambitious. However, it is my intention to bring up these drawbacks to shed light on the entire package that comes with the job and to remind myself that I really want to work for a software company. To marry the two concepts would be the “Genius of the and.” By working for or creating a web retailer like Zappos, who needs technology to thrive, one can work in an interesting industry, like fashion, AND be a crucial cog in building revenue for the company.

“6 Simple Steps to Getting Certified” – a Toastmasters Presentation

Since October I have been attending Toastmasters meetings and occasionally giving speeches to improve my public speaking ability.

Below is my 4th speech:

6 Simple Steps to Getting Certified

  1. Ask your boss & peers which certifications are valuable.
    You don’t want to waste time obtaining a certification that will not ultimately help you to achieve your goals. Ask your boss to find out about certifications that would aide in advancement within your current job. Ask peers to find out which would provide opportunity outside of your current employer. Ideally, you should choose a certification about which you have some relevant knowledge already. Otherwise, the preparation process will be significantly elongated.
  2. Research the governing body’s website or magazine to determine what is required. Find out:
    a. The format of the test (e.g. multiple choice, essay, etc.)
    b. Recommended training materials (e.g. text books, practice tests, etc.)
    c. Additional requirements (e.g. years experience, a verbal presentation, etc.)
  3. Study
    a. Obtain the recommended training materials
    b. Review fundamentals
    c. Spend extra time learning new concepts
  4. Practice Tests
    a. Take practice tests to get familiar with the testing environment
    b. Write down notes about surprising answers and concepts with which you struggled
    c. Schedule the official exam when ready and confident. In many cases, your company will pay for the exam fee.
  5. Cram: study for an hour or two right before the test.
    Focus on those concepts you struggled with as well as facts & formulas that will be beneficial to have memorized. No matter how much you study before-hand, always cram. It’s important to have that information in short-term memory going into the test. Trust me, you don’t want to fail a test because of something trivial that you would have known if you had just done a quick review of the material before the test.
  6. Pass the Test
    a. Many certifications last a lifetime
    b. Update your resume
    c. Now you can add those letters after your name on your business card

I have only been attending for 7 months, so I have plenty of room for continual improvement. However, I have already been helped by the members of my Toastmasters club to use fewer filler words and display fewer nervous ticks. I hope to become more comfortable, so that I can focus on my message while on stage instead of being so nervous my mind goes blank.

Toastmasters is useful because of the feedback given at the end of a meeting. It is helping me develop a sense for how long (in time) someone is speaking (including myself). I get to learn what I did well and what are areas for improvement. In the specific video above, I received the suggestion to not look back at the PowerPoint presentation but instead to create speaker’s notes to keep in front of me. My presentation could also have been helped with a personal, specific example.

I am looking forward to improving my public speaking by giving more speeches, receiving the feedback of others, videotaping, and personally reviewing my speeches. In fact, I look forward to improving the quality of my videos. I apologize for the poor video quality this time (I used a digital camera from 2004). To record my voice, the best option I brainstormed (that was mobile and not very distracting for the audience) was to use a blue tooth headset with my iPhone, call into a Free Conference Call number, and record the call. I later merged the audio and video. If anyone has any cheap, wireless recommendations for microphones that will work with my iPhone I am open to trying them.

Drama Queens versus the Status Quo

I realized leading up to my wedding 2 years ago that I have grown up dreading being the center of attention. Throughout my engagement, I held a heavy fear of the wedding weekend because I was nervous about all the attention. I did not feel comfortable giving a speech (the night of the rehearsal dinner) nor tossing the garter. I’d lived my life until then blending in. I wouldn’t say I am a conformist, but definitely someone who avoids confrontation.

Is it possible to be successful with such tendencies? I say no. Well, not unless you’re a rare exception, one who has a mentor that teaches you all the tricks so that you’re never facing an unknown challenge.

The more stories I hear or books I read, the more I realize that folks get ahead in life and business by being consistently more effective than others. What is the best way to be consistently better? By looking for shortcuts, seizing opportunities, and doing the important things that others hate to do.

Apparently, the normal person is like I was. He or she shrinks away from conflict, hides from uncomfortable situations, and refuses to communicate the whole truth. Exceptional people have bucked the trend of fitting in. They challenge assumptions and find that there are often easier ways to accomplish great things.

A number of authors that I’ve recently read use this as their primary thesis. As Timothy Ferriss says in The 4 Hour Workweek, “What we fear doing most is usually what we MOST NEED TO DO!”

  • Tucker Max – I Hope they Serve Beer in Hell
  • Tim Ferriss – The 4 Hour Work Week
  • David H. Sandler – You Can’t Teach a Kid to Ride a Bike at a Seminar
  • Jim F. Kukral – Attention! This Book Will Make You Money

The advice from these books is completely logical, so why are Computer Programmers so conflicted when trying to apply it?

Most computer programmers chose the profession because it does not require interaction with other people, allowing them to continue to avoid difficult social situations. On the other hand, most programmers are skilled at seeing shortcut solutions to problems, optimizing processes, and reducing unnecessary tasks. They just won’t do anything that could be potentially embarrassing.


Drama Queen Developer

Photo by aka Kath

I think back to my childhood, when I socialized with some children like me and some who were drama queens, those who captured all the attention by whining that nothing ever went their way. Did the drama queens grow up with an advantage? They are used to asking people for things, do not take no for an answer, and shine with the spotlight. I contend that as long as a drama queen is not completely unlikeable, it is a great way to grow up with an advantage in our culture.

To those programmers who fit into the above personality, I say to become dissatisfied with the status quo. Learn to do things differently and opportunities will present themselves. Then seize them.

Carpe Diem