C.S. Intern 101

We have several interns starting this summer and this is from my notes on what we’re going to provide in the way of guidance. I don’t expect all of this to be applied immediately. And I don’t expect any of it to be followed blindly. But it is what I think will most help them be successful.

First there are the goals in the software we create. Get the part right and the rest is details. Get this wrong and the rest is irrelevant:

  1. There are no questions using the software (like the iPhone). This is an elusive goal as even the iPhone requires some help and the software we create is much more complex than read my email. But figuring out how to make use as simple and straightforward as possible – for non-technical users, is critical.
  2. No broken windows. Any bug. Any unnecessary step. Anything the user sees as poorly crafted. Anything that unnecessarily gets in the way of the user. A single one of these gives the user the impression that the software was poorly crafted.
  3. Make it beautiful. People give great value to beautiful objects and that includes software.

Second is ownership. People don’t fight and die for someone else’s project. But they will for their own. At Windward we don’t tell you what to do, we tell you what you need to accomplish. It’s up to the intern to figure out how to accomplish their project. This is a giant shift from school where most of the steps on any effort are pretty clearly laid out. One intern will be given the job of write an appropriate level of unit tests for our new B.I. program. They need to figure out what tests where add up to an appropriate level of testing.

The good news is they own that project. They get to decide what and how to implement it. The bad news is they own that project. At the end of the day they’ll be measured by how few bugs slipped through their testing. And as an intern successfully completes a project, they will be given a new one that is harder more challenging.

Third are my suggestions from Want to be a Better Developer? Cheat! These are the day to day suggestions that will help them accomplish their projects.

And one final suggestion – enjoy your summer. We purposely do not allow over 40 hours/week for interns so they have time to go do all those things they’ll tell their children someday to not do.

Want to be a Better Developer? Cheat!

There are developers who are smarter than me. Ones who can architect better than me. Ones who can code better than me. Ones who can create a better UX than me. (Actually there are kindergarteners who can design a better UX than me – I suck at art, color choice, etc.) And you know what – there are developers who are better than you too.

So what to do? Simple, to be a better developer you need to cheat. There are practices that will enable (I hate that word) you to work at your absolute best. And the final measure is what you produce, not what you could produce if you were more focused.

The 4 keys to super-charging your productivity:

  1. Eliminate all distractions. All!
  2. Focus. Total complete focus.
  3. Be lazy. Look for the easiest solution.
  4. Think first. Find the elegant approach.

To get specific on the above points, in priority order:

  1. Don’t listen to music. There is a study that shows developers given the same task – every one listening to music missed a basic optimization while everyone that worked without music found it. I’ve consistently found that turning off music when trying to do something hard often makes it easy.
    When you’re doing easy or mindless work, by all means listen to music. But when you have to do something even moderately hard – turn it off. (I listen when doing builds, clicking through the program to verify bug fixes, or most management tasks. But it goes off when architecting, designing, coding, or fixing bugs.)
  2. Turn off I.M. Facebook, news feeds, email, your browser, or anything else that interrupts you or invites you to do something else. Turn your cell phone to silent and place it where you won’t see the vibrations when something occurs. When your code is building it is much more productive to stare at the wall than to “take a quick look” at email, Facebook, a web page, etc. And often times while staring at the wall something will occur to you about the code you are working on. I also permanently set Outlook to provide no notifications when mail comes in so I check email when I want to.
    I often leave Outlook running but set it to Work Offline. I do this both because my Inbox is my to-do list and because I can write any emails that I create based on the work I am doing.
  3. Shut your office door. If you’re in a cubicle go work for a company that values your time put a note up saying “Please Send Email.” (And seriously, go find a company that values your time – offices double productivity over cubicles and open pit areas are horrible.)
  4. One thing at a time. People are awful at multi-tasking (those that are “good” at it merely take less of a hit). So don’t work on new code, bugs, etc. in priority order, work on all items in the same part of the code together. Prioritize based on the importance of the groups you have on your plate. If you do have to shift, try to do so weekly – on Mondays you generally don’t remember 80% of what you were doing Friday.
  5. Whenever anything occurs to you – write it down instantly. The two things you’re going to do in 30 seconds after you exit the program and are back in the debugger – write them down. The idea you get in the middle of the night that is so incredible that of course you’ll remember it – write it down. Always anywhere have either a smartphone (I send emails to myself) or pen and paper (next to the bed so you don’t have to turn the light on in the middle of the night).
  6. K.I.S.S. Less code, simple code. If you figure out how to accomplish a goal with no new code, you’re “brilliant” and yet you did nothing. When you do have to code, if you cannot think of an elegant solution, do something else and leave it in the back of your mind. Often a simple solution will come to you the next morning in the shower.
    For me swimming, working out, or long showers when I’m not thinking of work is when I often come up with elegant solutions. Give your subconscious time to come up with a better approach.
  7. Let Google, StackOverflow, MSDN, etc. do your work for you. Ask others for suggestions, for samples, for help. Doing it all yourself is not a sign of strength and independence, it’s a sign of stupidity. After all Isaac Newton himself stood on the shoulders of giants.
  8. Walk all code using TRAPs.
  9. Write unit tests when you fix a bug (before or after is fine). And don’t overdo it – some bugs aren’t worth the effort of creating a unit test. Others can best be tested as part of some larger test. The TSA tests without limit – do you think that’s the best use of resources?
  10. Make notes of the details you are in when you go home at night. You’ll be amazed how often all that is new to you in the morning.

And if you’re a manager, here’s what you can do for your programmers:

  1. Put them in individual offices (doubles productivity over cubicles or open pit areas).
  2. At a minimum quad core computers with dual 1920×1200 monitors (most studies show that going from 1 to 2 monitors provides a 20% increase in productivity). At Windward we’re going to soon be upgrading everyone to dual quad core (8 cores total) systems, 3 1920×1200 monitors and an SSD drive for the main drive (VMs and other large files go on the hard drive).
  3. Java programmers? Use IntelliJ. C# programmer? Use ReSharper (it’s an add-on to Visual Studio). True story, in one meeting we decided that we needed to do some pretty horrific refactoring. I volunteered to do it and the lead gave me 3 days to get it done. I checked it in 20 minutes later due to ReSharper. I said it was due to ReSharper but I was still the hero.
  4. And if you need reporting or docgen software – Windward will save you a ton of time.

Here’s a software product idea that will make some start-up very successful

Are you looking for a product idea that you can implement and build a successful company from. Here’s one. And there is a giant need for it.

The opportunity here is a need for which numerous products exist, but they all suck. This is the same opportunity DropBox had where there were many file synchronization programs, and they all sucked.

What is key here is the same focus DropBox had – you need to create something that is simple, and that works.

The product? A login (username/password) handler. The existing products are both overly complex, and do not provide the needed functionality. (Quite an accomplishment there – shoving in lots of unnecessary features while missing the needed features).

The key market is business users – business will happily pay for this while consumers are a lot more work to sell to. By all means go after consumers too, but focus on businesses. And what do business want?

  1. When you enter credentials on a web page, it stores them in a repository.
  2. Each credential has access set by Active Directory group(s) and/or user(s).
  3. Credentials are synchronized, based on who has access.
  4. When you go to a web page, it enters the credentials for you.
  5. You can also use it from non-Windows devices (iPad) and computers not on the domain (home).

That’s it. Nothing more. Absolutely nothing more. Get the above working effortlessly and then listen to your customers to see what else most want. And keep the basic use simple.

The existing products blow it two ways. First they make the products much too complex. RoboForm has 15 items on its main menu, most of them bringing up sub menus. It has 3 passwords (minimum) that you have to create and track. And multiple profiles are so complex to set up that their tech support team is uncertain how to do it.

The second is they don’t provide a way to have multiple groups that users access via their membership. At a company we don’t want to, on each login, specify the individuals that have access to it. We don’t want to create a separate set of security groups we have to maintain in parallel with Active Directory. Most every corporation sets up Active Directory groups and has everyone well trained to provide access by group.

This way all logins are available to people in the correct group. Marketing resources to the marketing group, development resources to the development group, payroll resources to the payroll group. And user assignment primarily for an employee’s personal logins.

That’s it. Follow the DropBox approach of making it very very easy to learn and use and you’ll have a major success on your hands.

And when you create it – email me! We need this and our present system has too many people with access to most logins and personal logins getting place in the group logins.

Posted in Uncategorized | Comments Off on Here’s a software product idea that will make some start-up very successful

Electric Vehicles are the Equivalent of a 34mpg Gas Powered Car – Do They Have a Future?

According to a study by the UCS an electric vehicle (EV) emits carbon (indirectly via the coal fired electrical generation plants it recharges from) equivalent to a gas powered car that gets 34 mpg. And if that’s the whole story, then electric vehicles are not the future (and I bought an overpriced golf cart).

But there is more to it than this one measure. A lot more.

The MPG Equivalent is Easily and Centrally Improved

Colorado is in the process of switching from coal to natural gas for electrical generation. As that switch occurs the effective MPG emissions of electrical vehicles will jump to 50 MPG. In the future as the country moves from natural gas to nuclear and renewables the effective MPG will jump to something above 1,000 MPG. Meanwhile a gas powered car that gets 45 MPG, still gets 45 MPG.

This is key to the CO2 win of EVs. If over the next 10 years we shift over to EVs, and during that time electrical generation continues its move away from coal, we reduce the total CO2 footprint from vehicles. To gain this win from improved electrical generation, we need to start the transition to EVs now. Cars stay in use for 10 – 20 years. The cars bought today will be on the road 10 years from now and at that point, if we primarily have EVs, we will be bending the CO2 curve downward.

We Stop Funding Both Sides in the War on Terror

Today we are indirectly funding the terrorists with the enormous sums we pay to the kleptocracies in the Middle East for our oil. As we shift from gas to electrical for cars, these payments drop. Even if the CO2 emissions were identical for EVs, this is a gigantic reason to switch to EVs. The cost in lives and money we expend in Middle East, even when we’re not involved in a war there, is substantial.

And we will see this start to happen if we can drop worldwide oil consumption 10% with a clear trend of continued reductions. That would drop the price significantly. The oil producers would have to spend all of their revenue on their own people with none left over for funding (indirectly) terrorism. It would also mean an improvement for the people living in those kleptocracies as the governments would have to be more responsive to their populace.

$1,000.00/year!

Electrical is cheaper than gas. The average EV owner will save $1,000/year over what they would have paid for gas. That’s real money for most households. And instead that additional money will mostly be spent locally boosting the economy here in the U.S. Imagine if every car owner in the U.S. today had an extra $1,000.00 – that alone could be the final push to get us out of this recession.

One driver in Boulder is saving even more. He parks his car at Walgreens every night and plugs into their free charger. So for him the electrical recharging is free.

A Much Cooler Ride

Electric Vehicles are a much sweeter ride. The difference is akin to the difference between the old cell phones and the new smart phones. Early on few bought the smart phones and most found their plain old phone fine. But as more people saw what you got with all the features in a smart phone, they came to realize that there was a world of difference. The same holds for an EV. It is far superior to what a gas powered car can deliver.

Even if the EV was never going to have a lower CO2 footprint, the superior vehicle you get from an electric powertrain makes it a superior car. And keep in mind the present EVs are the first generation. The next generation, including ones from BMW (and I believe Apple) will be so far superior to anything gas powered that people would switch to them even if they cost more (they don’t).

When It’s Time to Sell Your Car

You’re going to buy a car today and you can fairly say that EVs are a niche market and gas power cars are very popular. In fact, if you’re selling a used car today, it’s easier to sell a gas powered car. But that’s not the correct resell value question.

We’re going to hit a tipping point on EVs. A point where purchases of new cars goes from overwhelmingly gas to overwhelmingly EVs. It’s not going to be a gradual change, just as smart phones did not gradually increase their sales. It’s going to change from say 8% to 25% to 70% over a couple of years. My guess is 3 – 4 years from now as people see the early adopters doing fine with EVs, as they get chargers where they are needed (the present government funded effort is worthless), and as more people learn what a superior experience an EV provides.

If you are going to sell your new car in 3 years – not a problem (probably). But if you’re going to sell it in 6 years? You may find that its resale value is in the toilet because no one wants a gas powered vehicle. When gas hit $5.00/gal it was almost impossible to sell a hummer. We’re going to see the same thing for all gas powered vehicles in 5 – 10 years.

The Future

The answer to the initial question is not that EVs have a future. The answer is that EVs are the future.
And the future looks brighter every day.

Posted in Uncategorized | Comments Off on Electric Vehicles are the Equivalent of a 34mpg Gas Powered Car – Do They Have a Future?

7 Years from now Apple’s new Product will be…

For the next couple of years Apple will take large segments of the remaining parts of the computer and consumer electronics market. Yes the TV is next. And following that we’ll see more products that combine the various pieces of these markets in some very interesting ways. But you can only find so many groundbreaking products in any given segment.

Apple is a company with creating new groundbreaking products baked into its DNA. They need to go find another market where the existing products are mediocre. Where the solution is a combination of hardware & software. And where there is a fundamental change occurring in the industry creating an opening for a new company.

In Steve Job’s biography he mentioned the obvious next industry as one of the few that requires a comprehensive product to be successful – automobiles. I think in 7 years we’ll see Apple shipping an electric car. And not just one but a series of models.

The new electric cars (which are the future) have a major software component so they’re a natural for Apple where it requires superb hardware and software. The conversion from gas to electric provides an opening to new companies. And the existing car companies treat the software component of their vehicles as an unimportant afterthought when car owners will see it as central to the vehicle.

Will it definitely happen? Who knows. But I can’t think of any other industry that they are more likely to go after.