# Tuesday, 03 September 2013

Recently, I was asked to give a presentation to a group of brand-new software consultants about what to focus on with your customer. Here are the highlights.

First impressions are important!
You never get a second chance to do this. It's important to hit the ground running on every project. A win on day 1 is much more impressive to the customer than a loss on day 1 and a win on day 5.

Think about privacy
Lock your unattended workstation. Think twice before forwarding an internal e-mail to an external person. Be conscious of your customer's intellectual capital - be cautious about what you reveal when having casual hallway conversations.

Delight your customer!
As a consultant, this is the single best thing you can do to increase sales. It is far easier to sell more services to a happy customer than to find a new customer.

Listen to your customer
As we gain more experience, we tend to think we know the answer more quickly. Resist the temptation to tell the customer what they want before allowing them to explain the problem. Interrupting and answering questions before they are asked can come across as arrogant.

Be professional
If this is your first "real world" job, there are some adjustments. Know the dress code (if you don't know, ask); be punctual; stay focused during work hours

Communicate early; Communicate often.
I have made many mistakes in my career. The ones for which I payed the heaviest price are those that went unnoticed for weeks or months. Keep your customer and/or supervisor informed about what you are working on and any potential roadblocks. I often send a weekly status report to accomplish this.

Stay Positive
There will be times in your career when you don't feel motivated. Don't take this out on your team. Don't be the guy who constantly complains about management or the project status. Every project has positive and negative things. You'll be happier if you accentuate the positive.

Look for opportunities
Keep your ears open for pain points expressed by the customer - even if they don't relate directly to your project. If this is something your company can help with, communicate to your manager or sales rep. If a consulting company can solve a customer's business problem, both parties win.

Know the strengths of your company
Be aware of what your company does well. This will help you to look for opportunities and know who to call when you have a technical question.

Learn the technology stack
There is a lot to learn in this business, so you better get started. Take the time to learn the basics of your job and dive deep into 1 or 2 other areas. Read books and blogs, attend conferences and user groups, and listen to podcasts. There is plenty of information available.

Focus on teamwork
If your team succeeds, you succeed. Share the credit with others and you will find that you will generally share in the team's successes.

Learn names
This is something I'm not very good at but it can make a big difference in how you are perceived. The first day of a project, I always create a folder under "My Documents" for the customer and I add a text file to store the names of the people I meet. Whatever method works for you, remembering the names of those with whom you interact can make a big difference in the impression you create.

Bring passion to each project
Software consulting is an exciting way to earn a living. We get paid to play with toys all day and we are constantly learning. Embrace that. Your passion will tend to be reflected in your work.

Tuesday, 03 September 2013 18:43:00 (GMT Daylight Time, UTC+01:00)

Overview

The Google GeoCode API offers a service for retrieving driving directions between 2 addresses.

Syntax

The service is exposed through a URI. The syntax of the URI is

http://maps.googleapis.com/maps/api/directions/output?parameters

output is the format in which I want to receive result – either “json” or “xml”. I prefer the simplicity of json.

parameters is an ampersand-delimited list of name value pairs to pass to the API. The parameters I care about are

Origin

The starting address

destination

The ending address

alternatives

”true”, if you want the service to return more than one possible route. Unless I have a reason to provide multiple routes, I prefer “false”

Units

”imperial” to return data in feet and miles; “metric” to return data in meters and kilometers. This should depend on the country where the data is going to be used.

Sensor

”true”, if I am using a sensor to provide location; otherwise “true”. I don’t own such a sensor, so I set this to false.

Sample Code

Here is a sample URI to request directions from my old office to my new one, returned as JSON data.

http://maps.googleapis.com/maps/api/directions/json?origin=31555 W 14 Mile Road, Farmington Hills, MI, 48334&alternatives=false&units=imperial&destination=26957 Northwestern Highway, Southfield, MI, 48076&sensor=false

This is a nice function to call from JavaScript. I prefer the simple jQuery syntax for making Ajax calls like this.

var startAddress='439 East 31st Street #214, Chicago, IL 60616';

var endAddress='30 North LaSalle St, Chicago, IL 60616’;

var requestUrl = 'http://maps.googleapis.com/maps/api/directions/json?origin=' + startAddress + '&alternatives=false&units=imperial&destination=' + endAddress + '&sensor=false';

$.ajax({ 
url: requestUrl, 
dataType: "json", 
type: "GET", 
data: {}, 
error: function (err) { 
$(#distanceDiv).html("Error calling Web Svc.<br/>Calculate."); 
}, 
success: function (data) { 
var distance = data["routes"][0]["legs"][0]["distance"].text; 
$(# distanceDiv).text(distance); 
} 
});

The code above calls the service; then parses the resulting JSON to retrieve the distance and displays that distance in a DIV with the ID distantDiv. In this example, I hard-coded the 2 addresses, but you could use jQuery selectors to retrieve the address from elements on the page or user input.

Response

Below is part of the Json response to the service call

JSON Results

Limitations

There are some limitations you should be aware of. I am a cheapskate, so I’m using the free version of this API. With the free version, I can only send 2500 addresses per day. If I try to send more, the service will respond with a status of “REQUEST_DENIED” and no results will be returned.

Also, Google expects you to display the results on a Google Map. I’m not sure how they enforce this, but they don’t allow you to use the Geocoding API to display data on someone else’s map.

Tuesday, 03 September 2013 18:02:00 (GMT Daylight Time, UTC+01:00)
# Monday, 02 September 2013
Monday, 02 September 2013 18:16:00 (GMT Daylight Time, UTC+01:00)
# Sunday, 01 September 2013

Recently, I was asked to give a presentation to a group of brand-new software consultants about what to focus on with your customer. Here are the highlights.

First impressions are important!
You never get a second chance to do this. It's important to hit the ground running on every project. A win on day 1 is much more impressive to the customer than a loss on day 1 and a win on day 5.

Think about privacy
Lock your unattended workstation. Think twice before forwarding an internal e-mail to an external person. Be conscious of your customer's intellectual capital - be cautious about what you reveal when having casual hallway conversations.

Delight your customer!
As a consultant, this is the single best thing you can do to increase sales. It is far easier to sell more services to a happy customer than to find a new customer.

Listen to your customer
As we gain more experience, we tend to think we know the answer more quickly. Resist the temptation to tell the customer what they want before allowing them to explain the problem. Interrupting and answering questions before they are asked can come across as arrogant.

Be professional
If this is your first "real world" job, there are some adjustments. Know the dress code (if you don't know, ask); be punctual; stay focused during work hours

Communicate early; Communicate often.
I have made many mistakes in my career. The ones for which I payed the heaviest price are those that went unnoticed for weeks or months. Keep your customer and/or supervisor informed about what you are working on and any potential roadblocks. I often send a weekly status report to accomplish this.

Stay Positive
There will be times in your career when you don't feel motivated. Don't take this out on your team. Don't be the guy who constantly complains about management or the project status. Every project has positive and negative things. You'll be happier if you accentuate the positive.

Look for opportunities
Keep your ears open for pain points expressed by the customer - even if they don't relate directly to your project. If this is something your company can help with, communicate to your manager or sales rep. If a consulting company can solve a customer's business problem, both parties win.

Know the strengths of your company
Be aware of what your company does well. This will help you to look for opportunities and know who to call when you have a technical question.

Learn the technology stack
There is a lot to learn in this business, so you better get started. Take the time to learn the basics of your job and dive deep into 1 or 2 other areas. Read books and blogs, attend conferences and user groups, and listen to podcasts. There is plenty of information available.

Focus on teamwork
If your team succeeds, you succeed. Share the credit with others and you will find that you will generally share in the team's successes.

Bring passion to each project
Software consulting is an exciting way to earn a living. We get paid to play with toys all day and we are constantly learning. Embrace that. Your passion will tend to be reflected in your work.

Sunday, 01 September 2013 18:43:00 (GMT Daylight Time, UTC+01:00)
# Friday, 30 August 2013

I limited my travel during July and August because it was the last months I would have my sons at home before they moved out of state for college. But the coming months will be very busy and filled with a  lot of travel. I started this hectic schedule last week with a presentation on Strategies for Refactoring and Testing Legacy Code at the Northwest Ohio .NET User Group and this pace only accelerates into the fal.

Date Event Location Topic  
Sep 14 Code Camp NYC New York, NY HTML5 is the Future of the Web Link
Sep 21 Vermont Code Camp Burlington, VT TBD Link
Aug 30 CloudDevelop Columbus, OH Cloud and Azure and Rock and Roll Link
Oct 1 DevConnections Las Vegas, NV Strategies for Refactoring and Testing Legacy Code Link
Oct 2 DevConnections Las Vegas, NV Connecting the Dots: Using HTML5, jQuery, and Web API Together Link
Oct 16 Great Lakes Area .NET User Group Southfield, MI Connecting the Dots: Using HTML5, jQuery, and Web API Together Link
Friday, 30 August 2013 10:02:00 (GMT Daylight Time, UTC+01:00)
# Thursday, 29 August 2013

I limited my travel during July and August because it was the last months I would have my sons at home before they moved out of state for college. But the coming months will be very busy and filled with a  lot of travel. I started this hectic schedule last week with a presentation on Strategies for Refactoring and Testing Legacy Code at the Northwest Ohio .NET User Group and this pace only accelerates into the fall.

Date Event Location Topic  
Aug 30 CloudDevelop Columbus, OHn Cloud and Azure and Rock and Roll Link
Sep 14 Code Camp NYC New York, NY HTML5 is the Future of the Web Link
Sep 21 Vermont Code Camp Burlington, VT Effective Data Visualization Link
Sep 28 Tampa Bar/Code Camp Tampa, FL TBD Link
Oct 1 DevConnections Las Vegas, NV Strategies for Refactoring and Testing Legacy Code Link
Oct 2 DevConnections Las Vegas, NV Connecting the Dots: Using HTML5, jQuery, and Web API Together Link
Oct 16 Great Lakes Area .NET User Group Southfield, MI Connecting the Dots: Using HTML5, jQuery, and Web API Together Link
Oct 17 Southwest Fox Gilbert, AZ HTML5 is the Future of the Web Link
Oct 18 Southwest Fox Gilbert, AZ How I Learned to Stop Worrying and Love jQuery Link
Thursday, 29 August 2013 18:39:00 (GMT Daylight Time, UTC+01:00)
# Wednesday, 28 August 2013

A “greenfield” application is one that is just getting started. It is named "greenfield" because it is reminiscent of a new building going up on a vacant lot that contains nothing but green grass prior to the start of construction.

By contrast, a “brownfield” application is one that has been going for some time (similar to an unfinished building surrounded by brown dirt where the grass used to be. Often, the code in a brownfield application is in a fragile state, contains excessive dependencies, unnecessary complexities and no automated tests. This describes most of the projects on which I find myself working.

Getting such code to a manageable state can be a challenge. One needs to understand the code, refactor methods and classes, break dependencies, and create automated tests.

Brownfield Application Development in .NET by Kyle Baley and Donald Belcham describes techniques for doing just that.

Baley and Belcham begin by introducing general concepts of the software development process (Unit Testing, Source Control), as well as some of the technical and non-technical challenges working with a brownfield project.

Each chapter begins with a set of pain points, then continues with ways to address that pain.

They focus on how to work with the code, describing algorithms for breaking dependencies and samples for using dependency injection and mock object frameworks.

Although not quite as comprehensive as Michael Feathers's excellent "Working Effectively with Legacy Code", this book focuses on the .NET languages, which makes it more relevant to my projects. In fact it addresses the current project on which I am working.

Brownfield Application Development in .NET is a good book for anyone who finds themselves working with code developed by someone else.

Wednesday, 28 August 2013 19:51:00 (GMT Daylight Time, UTC+01:00)
# Tuesday, 27 August 2013

Recently, I gave a talk to some new college hires about how to manage your career. Here are the main points from that talk:

Set Measurable Goals

Everyone should have goals. I set both long-term and short-term goals in my personal and professional life and I write these down and I look at them often. You will do better if your goals are tangible and can be measured because this allows you to determine how successful you are in meeting those goals and adjust your actions, if necessary.

Track your accomplishments

Most companies have a review process and it’s not uncommon for evaluations to take place once a year. Start thinking about your review early in the year. Every time you do something awesome, write this down. I keep a  spreadsheet with my accomplishment and bring this out during review time. Don’t rely on your manager to remember this for you. He may forget and he may leave the company before your review. And don’t rely on your own flawed memory.

Talk with your counselor

If your company has a mentoring program, take advantage of it. If your mentor is communicating enough, you should drive the conversation. Pick her brain and ask for advice. She was once where you are now.

Know the people in your unit

Get to know who your colleagues are and what their strengths are. You may need to draw on those at some point. Attend social gatherings and company meetings and establish connections in your local office.

Learn the basics of software development

There are some basic skills in this industry that every developer should know – data access; creating an interactive application; role-based security are a few. Know the fundamentals of the language in which you work. You can apply these skill to many types of projects.

Cultivate a specialty

To advance in the technology world, it helps to have deep knowledge of a topic. It’s not reasonable to assume you  can learn everything about everything. But you can dive deep into SharePoint or Windows Azure or Application Lifecycle Management and become the go-to person for this topic. This will increase your demand.

Understand and manage your online identity

Almost every new hire I encounter has a presence in social media, such as Facebook and Twitter. What you post there is a reflection of you and your company, so consider this before you hit the SUBMIT button. What is the online image I want to project? Will this post harm that image. Once something is on the Internet, it is very difficult to remove it. The Internet can be a powerful tool for promoting your brand, but it can just as easily damage your career if you are careless.

Learn something new every day

This is a challenge I made to myself years ago and I think of it as I drive home each night. Point to something new that you learned today. Over the months and years, it will add up because you will develop a habit of learning and improving.

Get certified

There is some controversy around the value of certification but for a young person with little practical experience, it can be a difference maker. I have some more thoughts on the topic at http://www.davidgiard.com/2010/05/18/AreCertificationsWorthwhile.aspx

Get involved in the local community

If you live in a large metropolitan area, you should be able to find user groups and technical conferences nearby. You can search for user groups at http://ineta.org/UserGroups/FindUserGroups.aspx and you can find conferences at http://tekconf.com/. These events are a great way to learn technology and to network with other developers in the area.

Own your career

Don’t wait for your company to train your or provide you with opportunities. Look for opportunities to contribute and succeed. Learn new skills on your own. This will not go unnoticed. s

Tuesday, 27 August 2013 21:00:00 (GMT Daylight Time, UTC+01:00)
# Monday, 26 August 2013
Monday, 26 August 2013 20:34:00 (GMT Daylight Time, UTC+01:00)
# Sunday, 25 August 2013

I think I’ll post my daily gratitudes here on the last Sunday of the month.

8/25
Today I am grateful I was able to cross off some items from my To-Do list that have been there for months.

8/24
Today, I am grateful that my father and I became closer during his final years. I feel as close to my Dad today as we ever were.

8/23
Today I am grateful that my mother made it home safely after 3 weeks in Michigan. When I asked her how she enjoyed the trip, she told me "I stayed too long."

8/22
Today I am grateful that Nick Giard drove out to Southfield yesterday to join me for lunch.
But mostly, I'm grateful for the fine man that he has become and for the joy of being his father these past 22 years.

8/21
Today I am grateful for the opportunity to premiere my "Refactoring Legacy Code" presentation at the Northwest Ohio .NET User Group and for all the good feedback I received.

8/20
Today I am grateful I have had the opportunity to raise Tim Giard these past 19 years and to see the fine young man he has become.

8/19
Today I am grateful for our family tradition begun during the last millennium of going to lunch with my 2 sons every Sunday - a tradition that continued almost without exception for over 15 years. A tradition that ended yesterday as my sons will move out of state this week and begin the next phase of their lives.

8/18
Today I am grateful for the continued good health of my 2 sons and myself.

8/17
Today I am grateful for a chance to teach at my first Sogeti Boot Camp.

8/16
Today I am grateful that my son Nick completed his undergraduate requirements yesterday, earning a BBA from Michigan State University. #proudddad

8/15
Today I am grateful for the chance to hang out with Michael Wood. It has been too long.

8/14
Today I am grateful for a visit from an old friend.

8/13
Today I am grateful that my son stopped by for dinner last night and the chicken fried rice I made turned out great!

8/12
Today I am grateful for a rare and much-needed Sunday afternoon nap.

8/11
Today I am grateful for a dinner of fresh Maryland blue crabs with my brothers and sisters and nieces and nephews and mother.

8/10
Today I am grateful for my brothers and sisters and my nieces and nephews and my mother. I am looking forward to seeing them this evening.

8/9
Today I am grateful for all these great podcasts that ease my long commute.

8/8
Today I am grateful for Elizabeth Naramore, who inspired me to think about the positive things in my life, even when things are going poorly.

8/7
Today I am grateful for a Daily Gratitude and a New Attitude
8/6
Today I am grateful for the Mud Hens game last night with Kevin Gill and Tim Giard.

8/5
Today I am grateful for a tasty pulled pork meal at Slow's Barbecue on a Sunday afternoon.

8/4
Today I am grateful for
1. Having my family over for a cookout yesterday
2. Seeing my mother for the first time since my father's funeral
3. An excellent Chris Hillman & Herb Pedersen concert last night.

8/3
Today I am grateful for
1. An unexpected Greektown dinner last night with my cousin, sister, brother, and sister-in-law.
2. Today's barbecue that will bring most of my family to my house.

8/2
Today I am grateful that I found a couple $20 bills in a jacket I haven't worn for months.

Sunday, 25 August 2013 13:32:12 (GMT Daylight Time, UTC+01:00)