Top 10 Midwest Cities in Enlightened Developers

As I’ve written before, I often think about which American cities are the best hosts for software developers. I’ve stumbled upon another metric contributing to the conversation: Number of Developers with Stack Overflow Careers accounts.

It seems to me that developers with accounts on Stack Overflow tend to be more enlightened than those who do not. If we assume that a representative number of those developers have “Careers” accounts, then we can easily compute a ratio of enlightened developers in a city.

  1. To query the number of developers in a city, navigate to:

http://careers.stackoverflow.com/employer/search

  1. Simply type in the city name and click “Search”.
  2. You’ll see a nice map representation with the number of “Careers” accounts in the area (I used a radius of 50 miles)

 

The nice thing about this approach is it is simple and currently free. I’ve been experimenting with this search page since 2009, back when no city in Ohio had more than 9 members. It’s nice to see such growth in the site.

To instead get more accurate data, the StackExchange API could be used to compile the locations of every Stack Overflow user. The locations could then be parsed and plotted on a map with additional processing to query how many are within a certain distance. Actually, that sounds interesting. I think I’ll have to do that soon!

Keeping with the consistency of my blog, let’s take a look at the cities in the Midwest with the highest numbers of developers with Stack Overflow Careers accounts. You can contrast the below numbers with a large city, like San Francisco, CA, which has 3500.

 

1. Chicago, IL
1100
2. Detroit, MI
400
3. Pittsburgh, PA
346
4. Columbus, OH
323
5. Cleveland, OH
265
6. Kansas City, MO
261
7. Indianapolis, IN
258
8. Milwaukee, WI
254
9. St Louis, MO
247
10. Madison, WI
244
11. Cincinnati, OH
237
12. Grand Rapids, MI
139
13. Des Moines, IA
134

 

How Should the Midwest be Defined?

Allow me for a moment to rant about what I consider the “Midwest.” Many people who live outside the Midwest maintain too broad a definition of the Midwest. Omaha and Minneapolis are not Midwestern cities. They reside in the Great Plains. Louisville & Nashville are not Midwestern cities. They are in the South. There is a certain culture embodied by a Midwestern city that excludes those previously mentioned. Midwestern cities are not major metropolises nor are they merely farm country. They reside somewhere in between, as medium-sized cities, and are typically within a short drive of another city falling in the same category. Refer to my hand-drawn map of the Midwest.

 

An ideal map of the Midwest can split state borders. It should seem clear why northern Wisconsin & Michigan are not included. They are so far North that the culture is different enough not to be representative. Culturally, the cities I choose to include are similar. They tend to have cold winters, their people speak with only slight accents, and they all have an inferiority complex with Chicago. Lastly, every city is within a 3 hour drive to a Top 100 US city in population. This last point is what disqualifies Minneapolis, which is a significant drive to Madison.

The Pitfalls of Mapping the Entity Framework to Stored Procedures

A Guide

Too much of the literature about the Entity Framework contains directions for mapping directly to Stored Procedures. The way it is presented, it seems easy enough. However, attempting to implement this strategy beyond a simple example quickly becomes unnecessarily difficult.

Let’s say you would like to implement a Model First pattern whereby all the entities’ create, update, and delete (CUD) methods were mapped to Stored Procedures. For cases where the database already exists or where using Stored Procedures is a predetermined constraint of the project, this pattern enables your .NET code to mimic typical LINQ to Entities code. Ideally, the mappings would be mostly abstracted away into the Entity Framework definition file. Once mapped, developers would not have to pay much attention to this implementation detail.

Unfortunately, there’s a vast difference between what you can do with the Entity Framework in a simplified demonstration and the restrictions meeting you in practice. Below is a guide that covers the pros, cons, and restrictions of the “EF-to-STP” approach.

Advantages

There are some advantages to using Stored Procedures. Mapping them in Entity Framework potentially produces the best features of both technologies.

Legacy Databases

When a database already exists that has implemented a great deal of logic in Stored Procedures, it can be reused.

Abstraction layer

Stored Procedures form a layer “underneath” the .NET code. Behind this abstraction layer, .NET developers do not need to understand implementation details.

Granular Security

Every Stored Procedure can have user-specific permissions.

Developer Skillset

Business logic implementation can be performed by a database developer whose skillset is strong in Stored Procedures.

“Advertised” Restrictions

Pluralsight.com has several video resources with tips about implementing the Entity Framework with Stored Procedures, including these three which I found helpful:

Below are some of the limitations mentioned in the videos:

All CUD Stored Procedures must be mapped for an Entity

For each entity, if any of the Create, Update, or Delete functions is mapped, then all 3 should be. For example, if you only map the Delete function to a Stored Procedure but at runtime your .NET code causes an Update to occur on that entity, it will throw an exception. It will not use the default Entity Framework functionality for the Update call.

Parameters can be mapped only to entity properties

You cannot map the parameters to a scalar value or a function. For example, you cannot map a Date parameter to DateTime.Now.

Stored Procedures that return entities have change tracking by default

In contrast, Stored Procedures that return complex objects do not support change tracking.

Insert Procedures must return SCOPE_IDENTITY

In the last line of your Insert Stored Procedures, include the line “Select SCOPE_IDENTITY() as ID” so that Entity Framework can push the newly generated record ID back into memory.

No support for multiple result sets

Limitations Found Through Experience

The biggest issue with using EF-to-STPs is that the developer of the Stored Procedures probably did not realize the database would be consumed this way. To do it right, a great deal of consistency is needed. There must be 1 Stored Procedure for Insert, 1 for Updates, and 1 for Deletes per entity. The Stored Procedure developer may have optimized for different things, such as readability or a reduction in round-trips to the database, instead of for a standard pattern that can be used by a high-level Framework. The below tips can be helpful as a guide to developing Stored Procedures if they are not yet finished.

Do Not rely on default parameters

You must specify exactly 1 parameter per entity column for select queries. Similarly, for an update query, every column must have a parameter in the Stored Procedure, and you must map every parameter in the Entity Data Model. Therefore, Default parameters have almost zero purpose for CUD Stored Procedures in our scenario.

Do Not rely on output parameters

Output parameters in Stored Procedures used for CUD cannot be mapped in the Entity Data Model.

Do Not rely on custom or table parameters

The Entity Framework can consume Stored Procedures that have table parameters. However, they require more of an ad hoc coding structure. They do not fit well into our EF-to-STPs pattern.

No ability to include referenced tables

The Entity Framework can utilize Function Imports to return entities from Select Stored Procedures. However, the ability to include reference tables is not built-in.

Extra Stored Procedure logic can fool Entity Framework

Scenario: An Update Stored Procedure performs additional logic to update another table before updating the mapped entity’s table.

Outcome: The Entity Framework got confused by how many records were updated and rolled-back the update.

Ensure returned data types are consistent

Scenario: A Select Stored Procedure uses IF statements and CASE statements to determine what Select query to use. Reading through the code, it’s difficult to detect, but one path returns Integers while another returns Bits.

Outcome: The Entity Framework generates metadata using one path and throws a cast exception at runtime.

Proceed with Caution

The Entity Framework is a great tool, especially when it is used with LINQ queries to the database. While Microsoft and its partners describe how to map the Entity Framework to Stored Procedures, it only works in simple cases or where the Stored Procedure developer follows very strict standards. In most cases, it is not practical.

Still, the Entity Framework can very well be used to query Stored Procedures with a more verbose approach. It requires more code than EF-to-STP mapping described above. However, it typically requires less code than reverting to older technologies like ADO.NET. Just stay away from the mapping.

Disclaimer: Most of my experience in this area is with Entity Framework Version 4, but I believe it applies to Version 5 as well.

Blank Karnaugh Map – How One Search Keyword Changed my Way of Thinking

3 Years ago, I wrote a blog post titled “I Heart Karnaugh Maps.” In it, I described a technique that can be used to reduce the complexity of Boolean expressions. I provided sample diagrams as I worked through the technique step by step. In one of them, I added an alt tag of “Blank Karnaugh Map” to describe the starting point of the whole process. Little did I know that defining such a targeted search keyword would alter my perspective about Internet search traffic.

Blank Karnaugh Maps

That blog post has always ranked in the top 20% of all my posts in terms of page views, largely due to the one keyword.

Among my blog’s highest ranking keywords are:

4th “Blank Karnaugh Map”

9th “Karnaugh Map”

12th “Blank Karnaugh Maps”

 

I first learned about Karnaugh Maps as a programming tool in my undergraduate studies at The Ohio State University. In Math 366: “Discrete Mathematics with Applications” I learned:

  • Mathematical formalization and reasoning, logic, and Boolean algebra
  • Sets, functions, relations, recursive definitions, and mathematical induction
  • Elementary counting principles

In order to refresh my knowledge before my blog post, I read an Electronics book. In neither the book nor the course do I remember a specific need for blank karnaugh maps or images of blank karnaugh maps. Therefore, as time passed, I was lead to wonder, why do so many people need blank karnaugh maps?

 

Has an Opportunity Presented Itself?

I had a few conversations with fellow software developers who were intrigued by my Karnaugh Map post. Apparently, Karnaugh Maps were drawing more interest than I expected and my site was getting found by people looking to know more about them. I decided to brainstorm ways I could leverage this interest into a software product I could sell. I figured people were already coming to my blog to find information about Karnaugh Maps and software development tips. Wouldn’t a product that uses this technology to improve code be useful to my readers? I decided to call it Logic Reducer.

 

The Market

By no means am I a good Internet marketer. However, I had recently signed up for the Micropreneur Academy and was learning the value of performing market research before beginning product development. I wanted to make sure that I could plausibly make a profit based on the number of potential users and competition. I used three high-level approaches in my research.

Quantity of Internet Searches

There are various methods to research how many people are looking for a particular topic online. I used Micro Niche Finder to determine that “Karnaugh Maps” was being searched about 1,600 times per month. While this is not a lot, I was encouraged by the quantity of searches of some of the longer-tail keywords and the relative ease with which my website could potentially rank for them.

Occupational Statistics

In order to gauge the number of potential users for my product, I researched U.S. employment data. I estimated there were about 800,000 computer engineers and 200,000 hardware engineers in the United States. These numbers were very encouraging.

Competition

Using Google, I found several applications on the Web that had the features I wanted to build. Many of them were free. However, in reading related forums, it seemed like they often failed because they froze up or had a very limited feature set. Additionally, I did not find any on the Internet that were newer than 2006. Most of the applications were downloadable, thick clients. They were lacking the advantages of being Web products.

Karnaugh Map Minimizer on SourceForce gets .5K hits/day

Logic Minimizer 1.2.1

Karnaugh Map – minimalization software

In 2010, smart phone app stores appearted to still be growing rapidly. I was leaning toward making an iPhone app that could be used as a companion to someone writing software on a personal computer. I found a few apps that already existed:

KarnCalc $.99

Karnaugh Map Optimizer $.99

Logic Shrinker –Free-

While a few cheap apps already existed, I liked that there were not yet any iPad apps. Also, one review of an app stated that if Boolean Simplification (a feature I planned to develop) were included, he would pay 7 or 8 dollars for the app. My findings did not deter me from moving forward to the next step.

 

How far Did I Go?

I liked that there were potentially many users of my idea. However, there were already very affordable ways to accomplish what I was considering my main value proposal. Therefore, I moved forward cautiously. I was optimistic, so I secured the domain name LogicReducer.com. However, I was concerned that there wasn’t enough market interest so I looked for validation of my idea.

I wanted to have a designer mockup my ideas so I could more clearly describe them. I got a quote from an offshore design agency for 4 screen mockups and 1 logo. It was going to cost $500.

I asked more people about what they thought regarding my idea. The general response was that people were intrigued by the product being a Boolean logic reducer. However, I also posted to the forums in the Micropreneur Academy and multiple people voiced some warnings. They felt it catered to too small of a niche, that I would not be able to gain enough revenue to make the project worthwhile.

I decided to stop working toward building Logic Reducer at that point. I was scared by the surprisingly high $500 investment for mockups and the concerns about the niche.

 

What Will I Do Next Time?

All in all, I did not spend very much time or money determining if Logic Reducer would be a good product to build, especially when compared to the time it would have taken to complete it and watch it fail. My blog content had exposed a tiny sliver of opportunity on the Internet. I researched that sliver and determined that I couldn’t make enough money from it for it to be worth my time.

However, I still think this is a good strategy for finding business ideas. Bloggers and content producers who have the ability to use analytics to see what topics are of interest to readers can use that knowledge to find problems in the world. Were I to find another surprisingly popular search keyword, I would research related business opportunities similar to how I did it before.

 

 

We Make Quite the Duo

As part of Toastmasters, I recently gave a speech out of The Entertaining Speaker – Advanced Communication Series.

Project 1 – “The Entertaining Speech”
Duration: 5-7 Minutes
Objectives:

  • Entertaining the audience by relating a personal experience
  • Organize an entertaining speech for maximum impact

Enjoy!

A Tall, Inexpensive, Standing Desk Solution

Over the past year, I’ve been working exclusively on a reasonably-priced standing desk. Originally, I thought I wanted to splurge on an adjustable height desk, but I wasn’t sure how much I would actually use the standing capability. Therefore, I did some research and found a very easy-to-assemble, albeit not advertised, configuration of Ikea desk parts.

You can reference the Vika Buying Guide here.

I bought the Vika Amon (now called Linnmon) table top ($48), which is a nice big platform for my keyboard, mouse, and some extra workspace.

The default legs that are used with this table top are called Vika Adils. They are cheaply priced at $3.50/each, but they are for a shorter table configuration. They are not adjustable and are only 27 1/2″ tall.

Instead, to create a tall standing desk, I used a different type of leg from Ikea, the Vika Byske ($30/each). Vika Byske legs are adjustable up to 42 1/8″ and are supposed to go with the Gerton/Vika Byske table. However, the configuration I used still worked. They screwed into the bottom of the Vika Amon table just like the other legs.

The desk works perfectly for me and I recommend this setup. Including the platform of the table top, the height of the desk is 44″, which is right at the height of my elbows bent at 90 degrees hanging down at my sides.

 

 

When I don’t want to stand

There are times when I get too tired to stand, so I needed a large stool ($60) I could sit in and still be high enough to comfortably reach the keyboard. Now that I know that I like this setup, I would like to upgrade the stool situation. However, it’s difficult to find such a tall stool for under $200.

Desktop Setup

I bought a shelf to raise my monitor from the desktop. I cannot find it online at Ikea.com, but it was on display in the store. It raises the monitor about 12″.

Another useful item is my iPhone stand. I use it to connect power my iPhone and situate it as a 3rd monitor. The screen stays on as I sometimes use it to display a stock ticker, time tracker, or reference videos.

 

 

The Specs

 

44″ high desk

33″ high chair

 

1 Table – $48

5 Legs – $150

1 Monitor Shelf – $30

1 Barstool – $60

Total for a standing desk solution: ~$290

 

Drawbacks

I love my desk setup but there are a couple drawbacks involved.

  1. The taller the legs go, the less stable the desk is. I feel as though I’ve extended the adjustable legs to their maximum length. At this height, the desk does wobble a bit but I’ve been using it over a year and have never had anything fall off. I would be much more concerned though if, say, a toddler were around the desk and was trying to shake the legs, because the toddler may cause something to fall off.
  2. Cables are difficult to hide, since this desk is simply a table top and legs. Also, since it’s so tall, many people can see the unsightly mess stored underneath it. Therefore, to maintain a consistent look, you almost need to purchase a matching cable concealer and file cabinet on which to place the computer.

Still, I recommend trying out a standing desk to see if you like it. Remember, it can be done for the small financial commitment of under $300.

Umbrella Theory

Umbrella

Posted by A is for Angie

My wife and I have started to use a term we’ve developed called “Umbrella Theory.” It’s almost a synonym of “Reverse Jinx,” but there’s more to it than that.

 

The Reverse Jinx

By my definition, to jinx means to “foredoom to failure or misfortune by mentioning the possibility of an unlikely catastrophe.” A simple example would be saying “we are on target to reach our destination on time unless we meet stopped traffic at 2 in the morning.” If you believe in jinxes, you believe that mentioning that statement ensures you will “meet stopped traffic at 2 in the morning.” It follows that superstitious folks sometimes strategically mention the opposite outcome in hopes to influence an unlikely event in their favor. Stating publicly “the Miami Heat are a lock to win their 24th consecutive game tonight” is a reverse jinx if the orator also bets against the Miami Heat. If reverse jinxes worked, I would probably walk out my front door stating “It’s going to rain today,” and I would get to enjoy dry weather for all time.

 

The Umbrella Theory

“Umbrella Theory” has a special meaning in the parlance of our household. It stems from the experience that it seems like it never rains when we’ve gone through the trouble to bring an umbrella with us.

Let me walk you through a sample dialog:

Me: Is it supposed to rain today when we’re at the game?

My Wife: I heard it’s a possibility.

Me: Should I take an umbrella?

My Wife: “Umbrella Theory.” Just take it.

 

What inevitably follows is I take the umbrella with me and the weather stays clear. I simply have to endure the small burden of carrying the umbrella to be prepared, to ensure the negative event I’m preparing for doesn’t even happen.

It turns out I’m not the first to think of this.

 

What We Have Learned

The Umbrella Theory is admittedly silly. Still, it can be a useful guide in my family’s decision making process. When worrying about what to pack or how to prepare for something, the theory reminds us to prepare for the “Worst” if the preparations are relatively easy. Also, it is important to decide quickly. There is no reason to deliberate with the Umbrella Theory. Time spent determining whether preparation is necessary can just be spent on the actual preparations.

I hope this terminology catches on in your household. May you carry an umbrella with you always!

 

This Guy’s a Competent Communicator

Memorizing an Entire Speech is Difficult

In December, I completed my 10th and final Toastmasters Speech on the path to fulfilling my Competent Communicator certification.

The intention of the speech was to Inspire with the length being between 8 and 10 minutes.

On one hand, I feel I’ve learned a great deal from presenting 10 speeches at my Toastmasters Club. I’ve become much more confident and have a better feeling for what types of stories work when writing my speeches. On the other hand, I still haven’t mastered the ability to speak, and say everything I want, without notes. This was evident in the below speech. 8-10 minutes is longer than any of the others, so my attempts to memorize the entire thing left me pausing to search for the next line far too often. I am sure I can overcome this struggle with more practice.

With the certification out of the way, I can now relax a bit and have some more fun with my future speeches. I’ve got a couple of clever ideas I can play around with. Stay tuned to see them.

2013 New Year’s Resolutions and a Little Friend

Pregnant Women Celebrating ChristmasAs December nears, it’s time to brainstorm my New Year’s resolutions for 2013. The Stuller family is expecting its first baby in that time, so it’s entirely possible that any goal I set for myself will immediately seem implausible, thwarted by a new dependent and many personal misconceptions about the transition to parenthood. Still, naming my goals will be helpful, even if only the most important bubble up to the surface over the next year.

 

Certifications

In Were my Microsoft Certification Exams Worth it I detailed my experience with these types of certifications. My conclusion has been upheld so far, that the certifications themselves do not provide much value once a certain level of experience is obtained. Therefore, I’ve fully abandoned the idea of updating or getting new ones.

“Any sort of certification by a tool vendor is worthless. Any certification created by a methodology proponent is also worthless.” – David Starr on Herding Code episode 150

Despite the quote above, I’ve decided to make Scrum Certification a goal for 2013. I feel I have a good grasp of iterative project management processes but I could benefit from structured training about a specific, standard methodology. I understand that the certification itself is not the end goal, but it is a nice motivation as a milestone of my learning.

“If you go for certifications, remember your goal is not simply to put more letters after your name but to maximize the value of the educational experience. Winning the game requires that you not only keep your eye on the ball but also anticipate what the next pitch will be. Historical evidence suggests that the average lifespan of any system is approximately 18 months, so the planning process for how you’re going to replace what you just built starts pretty much the moment you finish building it. Planning is a lot more effective when you know what you’re talking about. Being informed on emerging trends is a fundamental job responsibility, something in our business that needs to be done daily to keep up.” – 10 Essential Competencies for IT Pros by Jeff Relkin

 

What am I going to do instead?

Yesterday I read Paul Graham’s most recent post, How to Get Startup Ideas. This blog post really cut to the core of me, as it described the best ways to identify startup ideas. While I sometimes come up with ideas for products, they don’t occur to me as frequently as I’d like. Paul articulated what type of people have the most success, namely those who “live in the future and build what seems interesting.” So that’s what I’m going to strive to do. Throughout my career, I’ve done a pretty good job of solidifying certain skills, such as specific technologies (SQL Server, C#, jQuery) or communication (writing and public speaking). However, I’ve been hesitant to jump into new, trending technologies. For a long time, I considered it beneficial to isolate myself from fad technologies, figuring I can save time that way. In 2013, I’m going to try to both live in the future and build what’s interesting. Maybe that means working a little on a mobile app or maybe HTML 5. I don’t want to constrain my options by listing any technologies before the year even starts. If something seems cool, I’m going to come up with an excuse to build something with it.

 

Public Speaking

I’m scheduled to wrap up my Toastmasters Competent Communicator certification by the end of this year (more on this in a later post). In 2013, I’d like to leverage the practice I’ve had toward some sort of speaking arrangement that advances my career.

 

Personal Life

As usual, I don’t just make goals for my career. There are also things I strive for in my personal life. Among those, I’d like to complete 1 big home improvement project (convert our half bathroom to a full or move my home office), get back in shape (how about a half-marathon), get involved (with my alma mater or our neighborhood).

 

The Blog

What should I do with this blog? This is post 45, which means I’ve devoted over 40,000 words to it. My site visitors are steadily increasing and they are even stable when I take an extended break. However, when I started 3 years ago I thought I would have had more traction by now. I enjoy having a forum with which to express myself but a) I’m running out of content ideas and b) I’m losing motivation based on the slow traffic growth.

Traditionally, I tend to bounce back and forth between technical articles and more generic lessons based on personal stories. Which category speaks most to you? I’ve said everything I need to say from a self-expression standpoint, so when I continue to blog, I want to ensure I’m providing something useful for my readers.

 

Bring in the New Year

Clearly, many of my ideas are half-baked. That’s partly because I still have a month to decide on New Year’s resolutions and partly because I have no idea what to expect of life with a child. Still, this post is important as a record of my mindset at this critical milestone in my life. It’s also an open invitation for discussion. What other goals or modern technologies should I be considering? How will a newborn affect my personal goals over the year? What type of content should I be producing?

Thanks for your time. You’ll be hearing from me again soon.

SWOGC: How We Built a Web Portal in under 48 Hours

Southwest Ohio Give CampThis past weekend I volunteered my time to the Southwest Ohio Give Camp for the 3rd consecutive year. All in all, it’s a great event, a local chapter of GiveCamp.org, where regional software developers, designers, and technologists gather together in teams to create working solutions for charities. In the past, I’ve merely volunteered my time and expertise, but this year I undertook a higher challenge, leading my own team. In this post, I discuss my plan for building an entire web portal in less than 48 hours and the lessons learned.

 

Leading a GiveCamp Team – The Plan

I had compiled 8 tips for myself through observation in past years. Going into the weekend, these were my keys to success:

Before the Weekend

  • Prepare with the charity representative to obtain the majority of requirements
  • Present the charity with a “Wish List”, what we need the charity to provide (e.g. logins or files) to be successful
  • Begin visual design collaboration and discussing philosophies
  • Decide on a CMS, such as WordPress or Umbraco

During the Weekend

  • Be pragmatic and cognizant of the critical path!
  • As leader, make sure there are no tasks during the weekend that only I can do
  • Stay clean and flexible
  • Create a project plan first

 

Putting it all together – The Execution

Knowing I would be leading my own team, I recruited 2 .NET developers to help over the weekend. In addition, the event organizers assigned me 2 more developers and a designer. Our charity’s representative was also there to help for almost the entire time.

From Friday evening to Sunday afternoon, our team of technologists contributed about 120 hours to the project. We implemented an internal employee portal for the charity made to match the style of the existing website as much as possible. I would say it was generally a success.

 

Lessons Learned – a Retrospective

“Is that it? That’s all you’re going to say about how the weekend went?”

Well, the details of the project weren’t that interesting. But now that you know what happened, I can remark on what I found to be most important about our strategy and implementation.

Getting Started was Difficult

As you might imagine, assembling a team of mostly strangers, who know very little about the task at hand, can present a specific set of problems. Namely, everyone struggles to dive into a task because of a lack of knowledge about the overall requirements, plan, and others’ skill sets while pitted against the aggressive time constraint.

I think this is somewhat unavoidable. I did a good job of following my own advice, numbers 4 and 8 from above. I also had a list of known tasks pre-written on post-it notes that I used as discussion points to explain the scope of the project. I think having had some of the bigger decisions made going into the weekend helped the team to focus on delivering value to the charity. However, the team didn’t seem to naturally mesh and become fully engaged until Saturday afternoon.

How could I have changed my approach to reach that point earlier? I could have gone further with my research for the weekend making sure that any technical roadblocks were overcome before we started. This became most obvious in relation to my choice of CMS. We were using Joomla!, the CMS that the charity already had for their existing website. Personally, I did not know enough about this CMS to get started in a reasonable timeframe. I was dependent on team members to get our site up and running and the members who did not know Joomla! did not have much to do. Looking back, I would either choose a CMS that I was already more comfortable with or make sure that I knew how to get started with what I chose. Alas, I realized I got lucky with my team member assignments by acquiring some Joomla! knowledge along with them.

Iteration is Awesome

Having the luxury of a charity representative throughout the weekend, we leveraged a tight feedback loop to ensure we delivered a valuable solution. In fact, around noon on Saturday, we all realized that a significant portion of the planned tasks would only be of marginal benefit. Because we adhered to tip number 7 above, we were able to have an ad hoc discussion with the charity about what would provide the most value. As a result, we scrapped many of the broad functionality on our project plan and replaced it with one deeply functional requirement. Had we not had an iterative approach we would not have been able to fulfill the charity’s actual needs.

Get a Designer

Every year, the most in-demand skill at these GiveCamps has been design. There are usually not enough designers for every team and this year was no different. We were lucky to get assigned one (who also was fairly knowledgeable in Joomla!). Having a designer on the team is important because there is no easier way to feel like your solution is worthless than to have it look subpar. This is especially true at a GiveCamp weekend, when all the teams present their results on Sunday and give you benchmarks to compare against. On a time constraint and non-existent budget, I don’t know many developers who could make a user-interface that meets the new standards of the web. Even though our charity was not looking for a “fresh” design on their internal portal, it was nice to have someone who could troubleshoot display issues as we put it together.

 

Would I Do it again?

In a word, absolutely. While I’ve found that the solutions created for these charities over the past 3 years have not been the most interesting technically, the delight and value we are able to provide for non-profit organizations is quite fulfilling. Sure, the weekend comes with a certain level of anxiety. At one point on Saturday, the Web Host for the charity’s site (and all our work in progress) went down temporarily rendering our team useless. Still, it is a great way to meet other local developers who do not necessarily work on the same platform in their day jobs. Leading a team of volunteers who just want to contribute their skills in the most effective way possible provides exactly the right amount of eustress, and I’d recommend it to anyone.

Lessons Learned Negotiating for my First Car

In my early adulthood, I hated negotiating. The process seemed dirty, one which often felt like it required dishonesty. I remember my one attempt to haggle for a $25 t-shirt at a market in the Caribbean when I was 17. My strategy: opening my wallet and saying I only had $5. Somehow the merchant saw through this ruse. I ended up paying full price with the money from my other pocket.

Negotiating down the price of something is uncomfortable for many people:

  • It creates confrontation
  • Logically, items should be marked with a price that everyone pays
  • Even after coming to an agreement, there’s always a sense of wonder if the price could have gone even lower
  • “Professional” negotiators often exaggerate with guilt trips such as “I’ve got kids to feed”

    In Business As in Life, You Don’t Get What You Deserve, You Get What You Negotiate

Immediately after getting my first job offer soon after college, I went with my mom to the local car dealership. She was the negotiator in the family who drove the hardest bargain. I bought a car that Saturday from the first dealership I visited because I needed one for Monday. I went in expecting my mom to work her magic, but I sat and watched while the only additional value we extracted was an extra year of oil changes. Over time, I realized that I basically paid full price for something I didn’t have to, and I became determined to reduce my ignorance of negotiation.

An important concept to understand about negotiation is optimal pricing. Essentially, this means that the dealership wants to charge as much as any individual customer is willing to pay. The price is set to an arbitrarily high amount and each customer negotiates it down to an amount he or she is willing to pay. The dealership would not sell a car below what makes a profit. The salesman’s job is to make you feel like that baseline price is higher than it actually is. Does that make you feel more comfortable about negotiating? The additional money being paid above the baseline is going straight to profit!

The same applies to other scenarios, such as at a street market or negotiating salary. Obviously, there are many additional economic factors to consider, of which I know only a little. However, knowledge of this simple concept can ease discomfort about the negotiating environment.

Reaching the end of a job interview, the human resources person asked a young applicant fresh out of business school, “And what starting salary are you looking for?”

The applicant said, “In the neighborhood of $125,000 a year, depending on the benefits package.”

The interviewer said, “Well, what would you say to a package of five weeks’ vacation, 14 paid holidays, full medical and dental, company matching retirement fund to 50 percent of your salary, and a company car leased every two years, say, a red Corvette?”

The applicant sat up straight and said, “Wow! Are you kidding?”

And the interviewer replied, “Yeah, but you started it.”

-from Recruiters Network

Over the years, I’ve negotiated much more on my own, another car, home prices, salaries, etc. While I’m still very far from as proficient as I’d like to be, these experiences have taught me what to do and what are my weaknesses.

Create Objectivity by Having Someone Negotiate for You

A tip I learned from You Can Negotiate Anything is to ensure an objective party is negotiating for you. Because emotions often get in the way of logic, having someone who is invested only in reducing price can be highly beneficial. Relating this to my story above, my mom should have been objective in the situation but her own emotions were in play. She wanted to make sure I had a car so I didn’t have to borrow hers anymore. She did not want to experience the “pain” of lending her car any longer and was willing to have me pay to get my own.

Willingness to Walk away

The number 1 rule of negotiating is being willing to walk away from the deal. This gives you leverage.

In my example above, my mom was not willing to walk away, because she wanted me to have my own car. In other practical scenarios, this rule means that no one will give you a better price if he or she thinks you are going to buy something anyway. In contrast, if he or she senses your willingness to not come to an agreement, he or she will be more likely to meet your demands.

Collaborate on Less Significant Issues

Sometimes either party will not budge on the main issue, such as price. However, it can be possible to come to agreement on other items that are more significant to one side than the other. In the above example, this meant getting more free maintenance. In salary negotiation, it might mean getting extra paid time off or tuition reimbursement instead of a salary increase. There are many ways to add mutually beneficial clauses to meet in the middle of a negotiation. Additionally, this strategy is much less confrontational.

“If I give one to you, I have to give one to everybody else”

When going into a negotiation, make sure you understand the worst case scenario. Where possible, prepare beforehand to improve the worst case scenario. If missing out on a job opportunity means not having a job, then you can improve the worst case scenario by trying to line up a second job offer. Little tips like the ones above, plus many others, can help to make you a deadly negotiator, and as with anything, practice makes perfect.

Follow

Get every new post delivered to your Inbox.