First-Hand Tips to the Interviewee

Through recent discussions with interviewers such as HR managers, Project Managers and Technical Hiring Managers, I’ve compiled a list of first-hand tips to job candidates. I hope they are helpful to you.

From Conversations

 

“[A] stumper for more entry level individuals is the ‘where do you see yourself in 5 years’? Many times (most times) it is ‘manager’. Given that they are probably interviewing with the manager, they should think what the manager wants them to say which is more ‘an expanded role in what I am interviewing for’. This stumps many of the interviewees. Remember, the interview is about the company not about the interviewee.”

Pat Tokarcik – HR Director – ShurTech Brands, LLC

 

“There is one piece of advice to the experienced or inexperienced that I’d pay forward – [get] Gallup’s Strengths Finder & set out some realistic development goals as part of self discovery.

I didn’t think about the book when we discussed ratings the other day, and it’s a pretty important piece of advice that was recommended to me & I’ve been successfully deploying in my ‘self discovery’ phases of life. I wish someone would’ve told me that after college. Nevertheless, interview advice for college grads, especially recent college grads, is to focus on strengths and deploy those for confidence. If you gain confidence through preparation or whatever gets you to that ‘I’m ready’ feeling, then you are going to more easily control your behaviors on the ‘stumping’ questions or even the relatively easy ones. It’s also being comfortable that you don’t know everything and don’t have to, giving the interviewer a chance to draw their own conclusions on that.”

Lacey Strete – Special Projects Analyst – Construction Software Technologies

 

“Bring portfolios of your work if you have it and be prepared to discuss what is included. Interviewers are focused on a variety of your attributes. If I find an entry level candidate who exhibits confidence in their abilities (even if they need to be fine tuned from a technical standpoint), but who also has confidence in their communication skills and can speak to what they have created, I see potential for a future mentor/manager. Candidates who can fill those roles in the future are incredibly valuable.”

Natalie Stuller – HR Manager – WS Packaging Group

 

“I’m reminded of an interview I did a few years ago. I asked a guy about a specific version of a program or application, and his response was something along the lines… ‘I did xxx which is similar in the past, and since it should be the same principles, I could adapt to figure it out. Plus if I have specific issues I can always use Google and figure it out.’

I thought it showed his ability to work outside of the box and solve his own issues, and he turned out to be one of the few people on my team who could.”

Jeff Strempel – Consultant – Accenture

 

Already in the Public Domain

Of course, there are some tips already on the Internet that can be very useful for interviewees.

In this YouTube clip, Jason Calacanis, an entrepreneur, speaks for a minute or so about having candidates self-rank themselves.

 

 

Lastly, this YouTube clip was produced by Toastmasters, an international organization helping members to be better public speakers. Here are 5 key tips to interviewing for a job.

Don’t Disrespect the Web.Config – Transformations

No matter how large of a project you are building nor how many lines of code you maintain, the most important file in your whole solution is likely the web.config file. It potentially contains connection strings, API keys, passwords, etc. If any of this information is incorrect you will likely see many problems in your application. Likewise, if a hacker were able to examine this file, it could mean disaster for your network. It is for these reasons that the web.config file must be treated with the utmost respect.

There are 3 things every public website should be doing with their web.config

  1. Use web.config transforms to keep track of development versus production settings
  2. Encrypt important configuration sections for security
  3. ELMAH – Error Logging Modules and Handlers

Each of the above topics will be covered in a separate post. As for today, we’ll discuss #1. Visual Studio 2010 introduced web.config transforms, which make it dead simple to maintain configuration information for multiple deployment environments.

The scenario:

Imagine the not-so-rare network setup of a website that is deployed on a production server, a test server, and is run locally by developers. In the old days, it was difficult to keep track of all the different environment-specific configuration options. Maybe you set the web.config correctly once for each environment and just never overrode it during a new publish. Maybe you created your own configuration text files that were dynamically linked into the application. Either way you had to spend extra time to solve this seemingly simple problem.

Thank goodness for modern IDEs.

Now it’s extremely easy to setup multiple configuration files in your Visual Studio solution, with these additional benefits:

  • Easy integration into source control
  • Each separate web.config file is tied to a Visual Studio build configuration
  • Easier integration into automated builds and deployments

Since the web.config transformation technology has been around for about 2 years now, I’ll try and introduce a new spin on it by demoing this with the Visual Studio 11 Beta.

How to set it up:

  1. Open your project in Visual Studio 11 Beta. Note: new projects in Visual Studio 2010 and 11 already have multiple config transformation files.
  2. Open the Build menu and navigate to the Build Configuration manager.
  3. Click the Active solution configuration drop down list and select New.
  4. Enter information for your test environmentbuild configurations
  5. Right click on the web.config file and select Add Config Transform. Note: If this option is not available, see this link.web.config transforms
  6. You will now see a web.config for each environment you support (Debug representing the developer’s local environment, Test representing Test, and Release representing production).

    config transform

  7. Next, we introduce the environment specific settings for your web.config files
    1. My web.config files typically have environment-specific information in the appSettings and ConnectionString sections:

    <appSettings>
            <add key=apiKey value=“83ABC029538FED091ACDD”/>
    </appSettings>
    <connectionStrings>

    <add name=DBConnectionString connectionString=Data Source=DBServer;Initial Catalog=DatabaseName;Persist Security Info=True;User ID=userName;Password=password providerName=System.Data.SqlClient/>

    </connectionStrings>

    1. Since the above is configured for my development environment, I usually leave my web.Debug.config blank
    2. In the Web.Test.config and the Web.Release.config I replace my appSettings and connectionStrings sections with environment specific values (see this website for detailed information on syntax)

    <configuration xmlns:xdt=http://schemas.microsoft.com/XML-Document-Transform>

    <appSettings xdt:Transform=Replace>
            <add key=apiKey value=B153439AB3DE8FF9CA9D0/>

    </appSettings>
    <connectionStrings xdt:Transform=Replace>

    <add
    name=DBConnectionString
    connectionString=Data Source=ProdDBServer;Initial Catalog=ProdDatabaseName;Persist Security Info=True;User ID=userName;Password=password
    providerName=System.Data.SqlClient/>

        </connectionStrings>

  8. Now just choose the build configuration and publish a project. It will automatically merge the correct web.config values based on the selected build configuration.

    asp.net publish

 

Beautiful. Your app has been deployed with the appropriate environment-specific web.config settings. In the next post, we will discuss how to encrypt secure information that is stored in the web.config file.

Top 5 Cities to Earn as an IT Employee

Having lived in the Midwest my entire life, the idea of moving to a big city, with its increased cost of living, was overwhelming. Nonetheless, over the past several years I’ve fantasized about living and working in different US cities. There are many good reasons to move across the country (away from family): Moving To New Cities

  • Startup Hubs (e.g. Silicon Valley)
  • Top Notch Universities (e.g. The Research Triangle)
  • Better Weather (e.g. Southern California)
  • Better Geography (e.g. near the Ocean or Mountains)
  • Access to Specific Industries (e.g. Fashion in New York)

However, the cost of living difference between cities (and the decreasing value of my salary) have always been at the forefront of my thoughts.

One way I tried to overcome my hesitation to move was with research. Using Salary.com, I calculated the increase in cost of living compared to my current city. This helped me to analyze just how much more it would cost to live somewhere else. The ratios were drastic, yet I knew I had to be missing something.

As a software developer, I’ve been using Robert Half Technology’s Salary Guides throughout my professional career as a way to compare my own salary against the average developer in my hometown. They’re a great resource. After all, they’ve been creating the guides since 1950.

I soon realized that the cost of living changes are not created equal for all careers. Likewise, a developer that moves to a technology hub will get paid more in that location. The more important ratio to analyze is very simple: %Salary Difference – %Cost of Living Difference. A more positive number is therefore better.

Results

I compared 105 cities that had ratings in the 2 guides above. Using Cincinnati, OH (my current location) as the comparison, I came up with several big cities that actually have a positive impact on salary value.

Best value cities for someone in IT

 

Locale

Salary Vs Cincinnati %

Cost of Living %

Difference

Houston, TX

106.7

95.4

11.3

Salt Lake City, UT

102.6

92.7

9.9

Memphis, TN

97.4

93.3

4.1

Raleigh, NC

106.7

104.2

2.5

Austin, TX

106.2

104.3

1.9

 

The worst values were also highly interesting

 

Locale

Salary Vs Cincinnati %

Cost of Living %

Difference

Honolulu, HI

94.4

189.7

-95.3

New York, NY

144.6

203.7

-59.1

Washington, DC

133.3

176.7

-43.4

San Francisco, CA

139.0

180.3

-41.3

San Diego, CA

117.9

156

-38.1

 

Conclusion

I must admit I am rather surprised by this list in which I also discovered that Cincinnati ranks #9 out of the 105 cities. Perhaps the reason my instinct is to stay put is because I’ve been pretty spoiled.

How I Enjoyed the Rock Paper Azure Competition

Rock Paper AzureIn mid-December, I saw an ad on StackOverflow.com and was immediately intrigued. “Rock, Paper, Azure!” was a contest run by Microsoft wherein programmers design bots to compete in a modified game of Rock, Paper, Scissors. The bots had to be hosted in Microsoft’s cloud computing platform, Azure, so you can easily see Microsoft’s motivation to give away some small prizes to influence developers into trying and (hopefully) adopting Azure.

Although I had plenty of things to keep me busy leading up to Christmas, the Rock, Paper, Azure marketing worked on me. I figured I could take 1 or 2 hours out of my time and write the best algorithm I could in that time. Besides, I would be entered into the grand-prize contest drawing just for competing with even the most simple of bots.

Bugs LanguageI was immediately reminded of a school project from an early Computer Science course at Ohio State. The contest back then pitted “bug bots” from teams of students in the course against each other. Each team started out with a handful of bugs on a large virtual checker board. A bug could “convert” another student’s bug by facing it and issuing the “bite” command. The bitten bug would then become a member of the “biting” bug’s army. The game continues until one team has converted all bugs. If I remember correctly, there were only a few possible commands:

  • “Detect” if an object (like a wall or another bug) was in front of it
  • “Move” forward 1 square
  • “Rotate” left or right
  • “Bite”

 

It may have evolved since then, but our bot did surprisingly well back then despite a very simple algorithm:

  1. If something in front, turn left, bite.
  2. Else, move forward, bite.
  3. Repeat Step 1.

 

I’ve often wondered what additional strategy I would write into my bot if given another opportunity in such a competition. Rock, Paper, Azure was the challenge I was looking for.

Microsoft’s version of “roshambo” came with a few twists, such as the introduction of the dynamite and water balloon moves. Check out all the details and rules here. I liked that it was a simple game but with competition against other developers’ bots came many options for creative strategy. Additionally, I was extremely impressed with how simple it was to build the basic bot.

Game Rule Highlights:

  • Bots compete each other throwing one of Rock, Paper, Scissors, Dynamite, or Water Balloon
  • Normal rules apply except that the Dynamite beats everything but Water Balloon and Water Balloon loses to everything but Dynamite
  • Each bot only gets to use Dynamite 100 times
  • First bot to win 1000 times wins the entire match
  • Ties carry over, so the next round could be worth more than 1 win (similar to “Skins” in golf)

 

It took me some iteration to come up with my eventual strategy, which turned out to be admittedly mediocre (98th place out of 162). I realized that my bot can keep track of the history of moves that it has made as well as the moves of my opponent. My plan was to try and detect if my opponent was falling into a sort of pattern. I was especially concerned about the end of the round when we both would be desperately throwing dynamite to close out the match. As you can see, my strategy only had a small amount of success.

Nonetheless, I thoroughly enjoyed my time creating and deploying my bot. I encourage Microsoft to search for more clever ways to get developers interested in learning and using their development platforms. In this contest, I got to expand my mind, learn more about Azure, and I even got a free t-shirt. Here’s to the next competition!

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.

 

 

 

Follow

Get every new post delivered to your Inbox.