Wednesday, April 20, 2011

Dreaming of returning to the Gold Standard.. What are you smoking..

Many people look for a panacea to fix modern economic woes. One of these dreams is to return to the gold standard. Doing a little arithmetic reveals some interesting results.

  • First how much “money” is there in the world?
    • In US deposits (M3), its around 10 trillion dollars, 10,000,000,000,000
    • The world total is about 70 trillion dollars
  • How much (mined) gold is there in the world?
  • How much (mined) silver is there in the world?

So if money is to be gold base, we just divide 70 trillion by 5.3 billion =$13,200 /oz for gold. or $1500/oz for silver.

 

If both are used (with a 10 oz of silver = 1 oz of gold), then gold drops to $6,600 /oz and silver to $750/oz. One of the old (real) silver quarter dollars

was 0.18 oz, it would be worth $140.

 

Of course, the money in circulation would be match by government gold reserves. If 10% of the gold is privately owned, then the money in circulation would be decreased by 10%. Countries that can mine gold and silver would become wealthy quickly – the mining cost is $800/oz, the currency value is $13,200.  South Africa would become the fastest growing economy (producing the most new gold). Canada would be producing 4 times the gold/person as the US.

 

Of course, all national gold and silver reserves would be subject to inspection. If the government need money to fight a war, then it would have to call in currency to free up the gold to buy materials. If there is not a balance of payment from trade, there would be less and less currency in circulation as gold is shipped oversea --- with no currency, housing prices and labors would fall until it match the available currency.

 

The US trade deficit is $150 billion dollars, with 600 millions dollars a year increase (or 91,000 oz; the US mines 200,000 oz/yr – so half of all new gold will be sent overseas).

 

The world will definitely change – but likely not in the way expected.

Sunday, April 10, 2011

Types of Developers and IMHO what they are worth….

Last Friday I had a long discussion on different type of developers and their relevant value for an ongoing company. I am not talking about a startup-pancake (typically venture capital based whose model is to sell or flip into an IPO – then walking away with the money).

 

Support/Maintenance Developer

This is a developer that is completely happy doing high quality fixes, dotting I’s and crossing T’s. It is typically a destination career – one that is grossly underpaid for their value.  In terms of construction industry, he is someone that comes in an fixes leaky roofs and windows, change furnace filters and all of the way up to doing minor additions. If you are familiar with Holmes on Homes, we talking of Mikes, and not the type that he ends up undoing and redoing.  A good one will often spend their entire career at one company, well appreciated (but likely underpaid!).

 

Release Developer

This is where most developers ends at being.  Typically they take versions N.M of the code base, add features and then output N.O. They tend to have a bit-high-sense of self-worth and perhaps are a touch overpaid. Typically they will spend 2-5 years at a company and then move on, hoping to rise in the earning hierarchy.

They have good skills, know how to apply what they know well. In the construction industry, these are your new home construction crews.  They take existing plans and then build things appropriately to building codes. If they are tolerable – their deficiencies will not be detected; their stuff will pass building code. Often a good crew person will see problems and put in widgets or even changes to avoid future problems (putting in a 20amp circuit in the Media room instead of a 15amp circuit – cost to do $1.00; savings to home owner – likely $100 or more).

 

New Product Developer

This person is typically a career consulting developer for one simple reason -- no firm will always have new products in the pipeline and they will usually bail when put into a release developer role.  They will often have a portfolio of patents on their resumes (one group that I worked with had 30+ patents on a team of 4 – everyone had at least one patent). They are willing to take risks, do deep analysis, quickly prototype out ideas, etc. In the construction industries, these are the folks that worked on the first geodesic domes. Often they are the permanent crew for custom builders working with avant-garde architects. They typically are working for less than what they are worth – often because the money folks do not know the difference between a contracting-release-developer and a consulting-product developers.

 

Architects

Architects follow the same patterns for Release Architect and New Product Architect.

 

Bottom line for a business owner or development manager…

Know what you are looking for/needing. Often a resume will be a good indicator for the type of developer the person could be classed in. If you encounter a problem that your release developers cannot resolve in a reasonable period of time, then open the wallet and get a new product developer in for a while. Be warned, that release developers are often offended by bringing in a “high price” consultant – the consultant is high price when measured on a per-hour basis; often they are down-right cheap on a per task basis because they will do the task in a lot less hours with faster delivery. The Release Developer want to have bragging rights for doing the task, the consultant is stealing those rights!

 

A strong recommendation for any task that may be pushing the limit for the ability of your release developer is to sit down with them and agree on a “this will be done by you, on or before …., if it is not, I will bring in a consultant to do it”. If you give an extension, it should never be for more than 1 week. If the release developer wants the bragging rights – they can put in their extra hours (unpaid) to get them.

Wednesday, April 6, 2011

Is it time to raise US hiring standards for Computer Science?

Today I happened to look at a software company profile that I am working with -- which is not too different from what I inferred from other companies that I am currently dealing with.

 

image

What do we see in this software company, 11+40+104+131+121 / 750= 54% with Bachelor Degrees or above in Computer Sciences. It’s interesting because for the ‘going some where’ startups that I have worked with in the last few years, this pattern is not uncommon (typically 30+%).  I also see startup which are successful but tending to have reach a coasting level and go into a holding pattern where the percentage is < 10%.

 

The explanation may be that one group is well funded and the other is under funded. If you are in a hiring position, you may wish to give preference to people with a Bachelor’s degree or higher – especially those in Computer Science, Mathematics and Physics. They may provision your firm for the future better.

Monday, April 4, 2011

Dynamic WP7 Charting: Static Resources versus Binding

In my current development project, my MVVM pivot app needed to create a pie chart from a collection of objects. I read David Anson’s (@DavidAns) blog about using Charts in Windows Phone 7 (WP7) development. His example uses a detailed Resource Dictionary for the style of the chart. I’m so new to Silverlight that the XAML markup of David’s example tripped me up. This blog post is for other newbies trying to rework static resources into dynamic binding.

Capture2

In Silverlight, static resources are those that are already defined, hence static. This is great for a known set or for working in the Visual Studio Design-time environment. Dynamic resources can only be viewed in the runtime environment where they can also be changed.

In this article, I’m using the Silverlight Toolkit, found here.

A chart is a parent with child nodes of legend and pieseries. Since the Chart is a parent with several children, I wasn’t sure where to bind my collection of dynamic objects which would determine the percentage of the pie slices. I also needed to move the code strictly not associated with the chart to a different file/class. The example below is similar to the real life problem I was trying to solve. The code is taken from David’s example.

Method 1: {StaticResource}

First it is helpful to explain the markup in David’s example that I didn’t understand. His example places the following data object in the code-behind for the page but outside the page class:
// Class for storing information about an activity
    public class ActivityInfo
    {
        public string Activity { get; set; }
        public int Count { get; set; }
    }

    // Class for storing activities
    public class Activities : List<ActivityInfo>
    {
        public Activities()
        {
            Add(new ActivityInfo { Activity = "SMS", Count = 31 });
            Add(new ActivityInfo { Activity = "Email", Count = 26 });
            Add(new ActivityInfo { Activity = "Calls", Count = 10 });
        }
    }

His Main.xaml connects these classes to the Chart control by adding a Resource listing above the <Grid> object at the top of the page.
<phone:PhoneApplicationPage.Resources>
        <!-- Data -->
        <local:Activities x:Key="Activities"/>
    </phone:PhoneApplicationPage.Resources>

In the <PieSeries> object, the ItemsSource attribute is tied to a static resource of Activities because it has been defined in the <phone.PhoneApplicationPage.Resources> object noted just above. A Pie Chart requires two data points, name and value, to draw the pie. These are Activity and Count in the ActivityInfo class. They are bound from the class to the PieChart via the DependentValuePath and the IndependentValuePath. David’s complete <Chart> object looks like:
<charting:Chart
                x:Name="myChart"
                Title="static chart"
                LegendTitle="legend"
                Style="{StaticResource PhoneChartStyle}"
                Template="{StaticResource PhoneChartPortraitTemplate}">

                <!-- Series -->
                <charting:PieSeries
                    ItemsSource="{StaticResource Activities}"
                    DependentValuePath="Count"
                    IndependentValuePath="Activity">
                    <charting:PieSeries.LegendItemStyle>
                        <Style TargetType="charting:LegendItem">
                            <Setter Property="Margin" Value="5 0 5 0"/>
                        </Style>
                    </charting:PieSeries.LegendItemStyle>
                </charting:PieSeries>

            </charting:Chart>
To be credit, his example works and is a great way of connecting code to an object via the StaticResource keyword. The nice thing about his method is that the PieChart displays in Visual Studio design time. 
Because I wanted the XAML and code-behind to follow the pattern of the app I had in progress, David’s approach wouldn’t work for me. My code was not all in the code-behind but spread across the model classes for better organization and maintenance. I needed to figure out how to switch the binding from:
ItemsSource="{StaticResource Activities}"  to ItemsSource="{Binding}" 

Method 2: {Binding}

Here is what I had to do to make this simple binding work:
  1. moved the Activity and ActivityInfo classes into their own class/file but same namespace and removed the Resource XAML above the Grid. 
  2. changed from StaticResource to Binding:
<!-- Chart sample -->
            <charting:Chart
                x:Name="myChart"
                Title="static chart"
                LegendTitle="legend"
                Style="{StaticResource PhoneChartStyle}"
                Template="{StaticResource PhoneChartPortraitTemplate}">

                <!-- Series -->
                <charting:PieSeries
                    ItemsSource="{Binding}"
                    DependentValuePath="Count"
                    IndependentValuePath="Activity">
                    <charting:PieSeries.LegendItemStyle>
                        <Style TargetType="charting:LegendItem">
                            <Setter Property="Margin" Value="5 0 5 0"/>
                        </Style>
                    </charting:PieSeries.LegendItemStyle>
                </charting:PieSeries>

            </charting:Chart>
  

  1. Bind via code, not to the PieSeries but instead to the parent Chart, add this line of code after the MainPage Constructor’s InitializeComponent() call.
    myChart.DataContext = new Activities();
    
This last step, #4, I hooked my data object, Activities, to the XAML object Chart. The good thing about this is that the exact data is connected to the exact object. The bad thing is that if I want to add more objects or different data elements to this page, this code is too restrictive. A better consideration for maintence would be to tie my App-level data model object to the page-level DataContext in the MainPage Constructor’s InitializeComponent() call:

DataContext = new App.Data();

Downloads:

I tweaked David’s project to show this code. You can grab the zipped file here

Thank you to David for getting me started in the right direction.

Sunday, April 3, 2011

Mobile and Cloud Developers–they are hot, but do they pay?

After my last post, I got some email asking me to add on mobile developer. I added some cloud jobs to the list. The results are below.

 

Job Number of Jobs (Washington) Salary (Average)
Blackberry Developer

241

$64K
iPhone Developer

650

$83K
Windows Phone developer

750

$81K
Android Developer

580

$85K
IOS Developer

198

$86K
Windows Mobile Developer

800

$83K
Azure Developer

704

$80K
Cloud Developer

2500

$88K
EC2 Developer

463

$87K
Solution Architect

3600

$98K
.Net Architect

790

$95K

 

One of the nice thing that Indeed.Com does is also cite how the rates compare nationally. In general I am seeing Washington jobs are 11% below the national average. If you are single, renting then you can likely increase your earnings by 20-30% by moving. Bellingham is 19% below the national average. So the average developer would earn $6K more (or $500/month) by working in Seattle. There are some folks whose jobs are moving to Vancouver, WA – this is 16% below, so they should expect a 3% salary increase (and don’t expect higher wages by crossing into Oregon.. it’s also at 16% below).

 

Moving for work or the money

The following are spot checks of ‘developer’’ salaries at various spots.

Location From National Average
Washington -11%
Bellingham, WA -19%
Spokane, WA -7%
Redmond, WA -13%
Seattle, WA -13%
Vancouver, WA / Portland OR -16%
Boise, ID -26%
Washington, DC +12%
New York City +21%
Phoenix, AZ -18%
San Francisco +20%
San Jose +22%
Los Angeles +3%
Reno, NV -13%
Las Vegas -16%
Vancouver, BC +25%
Salt Lake City -15%
Tampa, FL -10%
Boston, MA +10%
Alaska -20%
North Dakota -2%
South Dakota -11%
Eugene, OR -6%

 

Note: Vancouver BC is 25% above average, so some one with dual citizenship or a simple NAFTA work visa could be pulling in 44% more by commuting across the border from Whatcom. I was back channeled by someone who confirmed that there are low skilled folks doing that from Whatcom Co. now. Vancouver has a very high cost of living (average house price is over 1 million dollars – 5x Bellingham), so high wages. It is much easier for a US person to work in Canada than for a Canadian to work in Canada and live in the US (i.e. they would lose their BC Medical insurance etc).

Saturday, April 2, 2011

What languages should I learn…

Supply and demand drives earnings. In an email thread today, one person assumed a bunch of things about relative salary and availability of developers. I use InDeed.com as a quick and dirty statistical source. The number of jobs is a good proxy for the number for available resources and salary tend to reflect shortage or surplus of developers with those skills.

 

So here’s the table of the results: (Area was: Washington)

Search Term

Number

Salary
VB Developer

323

78K
VBA Developer

31

90K
C# Developer

4700

84K
PHP Developer

750

72K
JAVA Developer

5900

85K
JavaScript Developer

3500

77K
Oracle Developer

1500

87K
MySQL Developer

850

76K
SQL Server Developer

3000

81K
Ruby Developer

950

80K
Python Developer

650

81K
Perl Developer

2000

81K
COBOL Developer

14

80K
Fortran Developer

14

77K
Web Developer

8000

79K
FoxPro Developers

3

60K
DB2 Developer

135

85K
HTML5 Developer

250

77K
Silverlight Developer

850

84K
C++ Developer

5000

87K
PhD Degree Developer

500

97K
Bachelor Degree Developer

5300

80K
Master Degree Developer

1400

85K
Associate Degree Developer

440

73K

So what is the best? Likely a C# or JAVA developer with a Ph.D.

PhD Degree Developer C#

122

102K
Bachelor Degree Developer C#

1200

80K
Master Degree Developer C#

350

86K
PhD Degree Developer JAVA

260

97K
Bachelor Degree Developer JAVA

2500

83K
Master Degree Developer JAVA

650

85K

It’s interesting that JAVA require a degree much more often than C#.

 

Locally (Bellingham). some folks have been pushing the items below:

Drupal developer

70

66K
Joomla developer

20

62K
Wordpress developer

20

64K