10x Developers and 10x Projects

In addition to Scott’s and many, many other 10x Developer posts here is an opinion from someone labeled ‘hyper-productive’ on most projects during the past twenty years.

Key Points

  • 10x is a zone we enter at times, it cannot be sustained
  • 10x has historically (in Mythical Man Month etc) meant the difference between worst and best developers
  • Being 10x better than average is a rare occurrence with short duration
  • 10x zone is only achieved after months or even years perfecting required skills/ preparing conditions for the highly productive period to commence
  • Many important tasks take the same/ very similar amount of time regardless of the individual – e.g. attending the daily stand up, liaising with another department, manual testing etc

Common Characteristics of being ‘in the 10x zone’

  • Task that does not lend itself to parallelism – i.e. efficiency is gained from reducing communication, discussing unimportant implementation details etc
  • Full stack developer avoids need to interface with knowledge silos – this is a very common with hyper-productive developers but often leads to resentment from the team unless great care/preparation is taken to handle political backlash
  • Using a library/ technique highly suited to task at hand – a great example is deserializing/ serializing xml by hand vs. employing a tool like xsd.exe or JAXB. Many thousands of lines vs. a trivial library call can lead to man-months of saved effort
  • Already familiar with business/ technical problem – second time around is always faster. By the third time most problems are solved many times faster
  • Bust through politics – managed to obtain access to all necessary sub-systems, and are shielded from political backlash of stepping on toes so can sustain the access

10x Projects are a far Bigger Deal

Over the years I have seen around fifty projects. Excluding the really crazy ones 5->10x is a rough measure for the difference in productivity we see at the project level. Probably more if one considers operational issues; too many systems are moved to production before being fully stable. Many projects fail, so technically there is an infinite difference in productivity. 5-10x is a rough approximation between ones that make it to production.

Common Characteristics of very inefficient Projects

  • Too many people – and/or too many of the wrong people
  • Cumbersome, un-enjoyable process
  • Developers treated as commodities – no praise for quality work
  • Better developers left the project early
  • Rude, non-technical leadership

Anyone with a few software development projects under their belt knows the main issues that lead to poor projects. Unfortunately after all my years in software development I am now of the opinion that many are inefficient intentionally by design. Yes, the leadership team actually desires this! A sizable proportion of senior management prefer to have very large teams. The root cause appears to be Empire Building; a larger team brings the manager/director more power. Many resist promoting others that could potentially challenge them, and several times I have witnessed life being made difficult for quality individuals with the sole intention of forcing them off the project. As time progresses leadership weakens and it can decimate large companies, especially during tough economic times. This is why many very large companies look outside the firm when time comes for a new CEO.

Conclusions

Obviously there is a massive productivity difference between the best and worst developers. That does not mean someone highly productive on Project A will immediately be highly productive on Project B.

A badly run project can cripple even the best individual’s ability to do great work. This is of far greater importance than bickering about if one developer is actually 10x or not. One great developer is just one great developer with a limited skill-set. The team wins the war, great developers are often decisive in key battles but they cannot win wars alone.

Developers have specialties. Personally I still struggle until up to speed with a new technology – it takes time and hard work to be ‘10x’ again with new technologies. Beware anyone who tells you otherwise, especially the ones who claim to be ‘10x in everything’, everyday on every project’.. That is not reality. Every project failure I have witnessed had at least one guy who would publicly state he was expert in a very long list of technologies.

Posted in Development (General), Management, Productivity, Technology | 3 Comments

Should I buy a 3D Printer?

Thinking of buying a 3D Printer? Let’s give that thought a quick reality-check… I was ready for a somewhat hobbyist experience but it took way longer than expected to have the printer assembled and printing acceptably.

Mine is a $549 Printrbot Kit. Interestingly perusing forums of the current generation $2,200 MakerBot Replicator 2 showed their owners experience similar issues to what I’ve gone through.

Assembly of the kit took five to six hours. Until it printed reliably using PLA was probably a further forty hours but I did fabricate a new platform and adjustable bed. If time permits I’ll follow this post up with common issues + solutions so maybe you’ll be up and running in under twenty hours. Either way, expect to become a 3D Printer technician and be sure to have an abundance of patience handy.

The image below sums up the experience nicely. See the tools? Notice the spool holder made from DIY parts? Surprised to see DIY screws, power drill etc nearby? Well… forums and blog posts are littered with people who purchased a 3D printer and abandoned it before making good prints. Surf some forums and you’ll notice virtually everyone showing off their prints has their printer in some kind of hobbyist workshop; typically they’ll have loads of tools around and are veterans of past fabrication/ advanced DIY projects.

Complete Printer (1) (Medium)

But apparently a child can build one? Yes, some manufacturers are suggesting you buy one for your eight year old and he’ll have it assembled and printing in no time… Not a chance! I did see one blog post where a young boy had assembled the kit but “so far they were having trouble printing”. Younger than twelve I’d say to totally forget it and buy him/her a Lego Mindstorms or similar. High school age is probably more appropriate; even then a tinkerer Father on hand is almost a necessity.

Should I spend $550 or $2,500?

Now my $549 Printrbot is dialed-in and has had a few modifications its prints are excellent. Given the explosion in 3D Printer popularity, anything built in 2013 is going to look like a Dinosaur in a few years. Unless you need to print very large objects now I recommend buying a lower priced printer today and upgrading in a couple of years when mass production techniques should bring costs way down and take quality/ ease of use way up. I purchased Make: Ultimate Guide to 3D Printing for $6 as they reviewed about fifteen current generation printers.

Should I buy a Kit or Fully Assembled?

Assembly is typically only ~$100 extra, but the experience [frustration!] of building your first printer is invaluable. I was too young to build my first home computer in 1981 so was bought an assembled one. I did not make that mistake this time; the kit came with poor/incorrect instructions, but it was the correct route to take for both experience and bragging rights in twenty years time.

What to expect from a Kit?

Until the last couple of years most 3D Printers were built from open source online designs. Hobbyists sourced components themselves and spent unbelievable amounts of time tweaking. My PrintrBot is a well priced kit building on these many years of open sourced achievements. I doubt there is much profit margin for PrintrBot. Also, you will have noticed a lot of plywood on my printer; that’s laser cut plywood. It has issues but is an inexpensive way of producing the parts – once a laser printer is purchased the cost of chassis etc is next to nothing for the smaller scale manufacturers compared to the material/hours required to 3D Print parts as was common in the early days.

A kit gets to you to where these serious hobbyists were far quicker for a reasonable price.

Take a look at these pictures for an impression of what to expect:

Printrbot Kit (1) (Medium)

Printrbot Kit (2) (Medium)

Their website says it takes two hours to build. Perhaps once I’d built a few that would be true. In reality it takes about five hours. Documentation is poor and was incorrect in several places as incremental design changes have occurred since the videos/ online help were created.

How long until Printing is possible after Assembly?

Likely some owners obtain a decent print on their first attempt; most do not – actually possibly most never do before putting it in a closet or on eBay! Expect several hours to several before anything reasonable is printed.

ABS filament emits fumes which made my eyes sting, but is much easier for a beginner to use than PLA filament. Since my workshop is small and unventilated I have moved exclusively to PLA, ensure your printer is in a well ventilated area and start with ABS.

Hopefully time permits me to write a separate post on getting started, but main tips are:

  • Level the bed
  • Ensure z-home is set correctly (distance from extruded nozzle to the bed)
  • Ensure the printer extrudes at the correct rate (pretty easy for ABS)
  • Figure out the slicing and printing software
  • Use calipers to roughly calibrate movement along the x, y and z-axis (fine tune when printing ok)

A common beginner issue is the clog up the hobbed bolt with filament (tension springs set incorrectly will do this).  I’ve had mine out for cleaning at least twenty times, but it’s been fine for a good while since I figured out the correct spring tension for PLA (springs compressed to ~13.5mm). The following image shows a clogged hobbed bolt being cleaned with a needle (I lost one needle so now store it using a strong magnet to fix it to a drywall screw):

Hobbed bolt cleaning (19) (Medium)

What kind of quality can I expect?

Quality is really good in my opinion. I’ve printed several printer upgrades and the precision is incredible; hex bolts drop right in where they should etc.

It will take a while and likely much frustration to get the printer dialed in. After about sixty hours I seem to have the basics down and when an issue occurs now know what to tweak. Take a look at the next photos to see my progression with PLA:

Example Printrbot Prints (1) (Medium)

Example Printrbot Prints (2) (Medium)

Example Printrbot Prints (3) (Medium)

The final print shown is a case for a Raspberry Pi. It fits perfectly, and this was printed before I added most printer upgrades!

Tools required?

Hmm… this is a tricky one. As a long time DIY type I have access to a vast array of tools. The Drill Press and cross vice shown below has been particularly useful but these are not beginner tools.

At a minimum you need:

  • Precision Calipers (only about $20 on Amazon)
  • Quality screwdriver set (one with lots of quality bits is fine)
  • Jewelers precision screwdrivers
  • Small wire cutters and pliers
  • Tweezers (to tease strands of stray extruded filament away from the nozzle and lift prints)
  • Very sharp craft knife

These are almost essential:

  • Quality precision pliers, angled pliers and wire cutters (Xuron or similar)
  • Quality oil/ grease
  • Circlip pliers
  • Telescopic Magnetic Tool to hold awkward nuts in place during assembly

Semi essential tools (1) (Medium)

Ensuring bolts thread perpendicularly:

Semi essential tools (2) (Medium)

Final Words

Have a spare fifty+ hours, $550 and buckets of patience? You should buy one now!

Remember this is not Software Engineering; interacting with the real world is a whole different ball game. Fellow classmates and I discovered this during our postgrad Robotics Degree . Software is predictable and repeatable. The real world often not so much. In many ways 3D printing is similar to robotics – some software is involved but there is a lot of trial and error + tinkering.

Posted in DIY, Other, Technology | Tagged , , , | 3 Comments

Compacting Virtual Machines (VirtualBox and VMWare)

Google has never linked me directly to this information, just theories. One day time permitted me to run careful tests so I am sure these techniques are correct/ efficient:

Simple tricks to reduce size VM’s Disk Needs:
These will wipe GBs from your vmdk/ vdi.

  • Disable Windows hibernation (hiberfil.sys is the size of installed memory, you don’t need it)
  • Disable the memory paging file (paging file in a VM makes little sense to me)

Compact a VMDK (VMWare including VMWare Player):

  • Ensure you have no snapshots (as of writing compacting does not work with snapshots)
  • Launch the VM
  • Inside the VM defragment its disk (defraggler works great, Windows degfrag is ok)
  • Inside the VM run “sdelete.exe -z” from DOS (as admin). This zeros out the free space and is an essential step
  • Shut down the VM
  • From VMPlayer: Edit Machine Settings -> Hard Disk -> Utilities -> Defragment (optional step, sometimes helps – official documentation is poor)
  • From VMPlayer: Edit Machine Settings -> Hard Disk -> Utilities -> Compact

At the final step you should see a huge reduction VMDK size.

Below is a screenshot showing the features in VMPlayer. Remember this is next to useless unless you run Mark Russinovich’s “sdelete.exe -z” to mark free space with zeros. Compacting VMs has been this way for years, it’s April 2013 now and surely soon ‘detect and zero free space’ functionality will be built into their compact options.

Compact_VMWAre_Player_VMDK

The image above shows a VM that reached 20Gb once, before being compacted back down to 10.7GB. These are typical results. Once compressed my two work VMs zipped down to ~4GB each; fine for archiving working databases, dev environments etc. One customer’s backup procedures left me concerned so weekly the VMs were AES encrypted and copied to a USB key chain flash drive.

Compact a VDI (VirtualBox):

Until very recently I have used VirtualBox since about 2008. Here are the steps to compact it.

  • Ensure you have no snapshots (as of writing compacting does not work with snapshots)
  • Launch the VM; inside the VM defragment its disk (defraggler works great, Windows degfrag is ok)
  • Inside the VM run “sdelete.exe -z“. This zeros out the free space and is an essential step
  • Shut down the VM
  • From DOS (as admin):
    • cd <location of your VDI>
    • “C:\Program Files\Oracle\VirtualBox\VBoxManage.exe” modifyhd <your disk’s name>.vdi –compact

Hope this helps folks. Any issues/errors please post in the comments and I’ll update the post.

Posted in Technology | 6 Comments

Filter log4net to a single thread using Notepad++

Over the years I’ve Googled and Googled for a solution to this. Heck I even tried Bing! Finally time + an urgent need permitted figuring out a simple solution. To filter down to one thread using Notepad++:

  • Copy the angle brackets and thread number to clipboard. E.g. “[12]”
  • Menu -> TextFX Viz -> Hide Lines without (Clipboard) text
  • Press Ctrl-A (Select all text)
  • Menu -> TextFX Viz -> Delete Invisible Selection
  • Press Ctrl-A (Select all text)
  • Menu -> TextFX Edit -> Delete Blank Lines
  • That’s it! You are now viewing one logging from only one Thread

This works very quickly even with 70,000+ line 10MByte log files. IMO it avoids the need for xml log4net logging and Chainsaw (or similar).Simpler is always better.

Demo: Two threads counting to 100:

Copy the angle brackets and thread number to clipboard. E.g. “[12]”

Menu -> TextFX Viz -> Hide Lines without (Clipboard) text

Press Ctrl-A (Select all text)

Menu -> TextFX Viz -> Delete Invisible Selection

Press Ctrl-A (Select all text)

Menu -> TextFX Edit -> Delete Blank Lines

That’s it! You are now viewing one logging from only one Thread

Posted in Development (General) | Tagged , , , , , | 7 Comments

Reduce back and/or neck pain with a 50 cent cardboard box

Virtually all software developers eventually experience neck and/or back pain. Mine gradually increased from light neck pains in 1995/6 to being unable to work one day in 2001. Doctor’s advice: “stop doing what makes it hurt”. Useful…  Earlier today Martin Fowler posted “Back pain is a common issue, but everyone’s pain (and treatment) is different”. Indeed it is, but he also posted a photo that invoked a “Fingernails dragged down a blackboard” response from me. It’s a photo of programmers at work; many IMO asking for neck/back problems in later life.

Let me share the research that has kept me pain free for ten years. I am not qualified in this area, these are just the findings of a long term computer programmer (done little but code from 1981 to 2010, and hope to keep it up until The Singularity makes us obsolete) :

  • Move your screen(s) up to eye level
  • Every time you exercise do neck stretches
  • Read a book on back pain and/ or neck pain.These cover common issues that work for many people; Read the many glowing reviews on Amazon

Screen at Eye Level:

This should be common sense. I work looking forward not down. Peering down compresses neck vertebrae – probably not good for extended periods of time. Commons sense says “mix-it-up if you can”, don’t sit in the same position all day. Personally I alternate between a regular sitting workstation, standing workstation, laptop on a box (or whatever’s handy at the time) and casual surfing using an iPad like a book (not looking down at a laptop). Combined with regular exercise and stretching I still spend almost all waking hours in front of a computer. Of course from time to time I become lazy, and stop stretching after running/cycling; the pain starts creeping back. Returning to regular stretching always cured it (so far, touch wood!)

Sitting workstation:

I use an ergonomic Zody Chair using vesa arm mounts. Yes, I have hauled these to client sites. We just moved house and I don’t have a photo handy

Standing Workstation:

These can be cobbled together very cheaply. Skip those expensive stand/sit combo workstations and build another work area in your home office. The following photo shows a $100 Ikea kit. Notice the two mice? I used to have pain in my mouse button fingers. Learning to use a mouse left handed and swapping between them cured that too. Props to Paul Swan for the mouse tip – he’s a total Genius from my undergrad CompSci degree, now working on the Windows Server team.

Laptop on a box:

The title of this post.  Being in my late thirties peers are starting get aches and pains. Many on Facebook complain of sore necks from laptops. If you listen to only one piece of my advice, Put Your Laptop on a Raised Surface when using it. Oh, and wear sunscreen :) Notice I use a real keyboard and wireless mouse than can be used in either hand – these cost peanuts compared to a Doctor’s visit. This is a great setup for short term client engagements – they always have something to stand a laptop on.

Can a $10 Book from Amazon really help?

The books I purchased in 2001 were an incredible help. I am not suggesting these as an alternative to a Doctor’s advice, just worth considering if your Doctor has been of no help.

Hopefully this post allows some to extend their coding careers. Please take this advice as just that, general common sense advice.

Posted in Other, Productivity, Technology | 1 Comment

Bye-bye Mac OS X, hello Win7

Using DOS and Windows since the mid 80’s it was time for a change. Vista was never reliable on any of the three machines I tried, Microsoft fanboys were killing creditability in the user group scene – heck it got to the point where saying ‘Google’ was not permitted. It would immediately be corrected to ‘Bing’, sometimes by a chorus of fanboys! This anti-Google sentiment has to stop. Fanboys may go “Rah-Rah, Bing-Bing-Bing”, but how many of them command respect from peers? Many competent people stopped attending Microsoft events.

So how did OS X work out? Well it’s certainly a good operating system, does most things I need but obviously is not going to run Visual Studio anytime soon. Lack of open source software was a major gripe; 7Zip, KDiif3 and many other great open source projects just don’t exist for the Mac.

Snow Leopard was a total flop, costing me hours in lost time as it broke our HTPC which was running Hulu and XBMC. Initially Mac fanboys jumped all over  me for criticizing it the day after it was released, but over time the general consensus is that Apple needs public beta testing before releasing an OS upgrade. A few service releases later Snow Leopard works fine but lacks the snappiness of Win7.

Apple hardware is fantastic. Developing on a MacMini is heaven thanks to virtual silence. The tiny form factor helps declutter workstations, keep a clearer desk etc. Using a MacMini as a HTPC is a little expensive but totally worth it, low power means low heat and they’ll happily live in a cupboard. New Minis also support two digital monitors, IR remote, Bluetooth, latest WiFi, GigaBit internet and have a stack of USB ports. The 13″ MacBook Pro cost $1200, plus the cost of aftermarket 4GB RAM and an Intel SSD. With the SSD and Win7 it’s plenty fast even for a demanding developer. The quality keyboard and touches like back-lit keys, multi-touch track-pad etc make it easily worth the extra cash. Oh and using OS X battery life is nine hours for the latest model – I see over five hours with WiFi and Bluetooth on a 2009 model.

So why the move to Win7? “It just works” scream most Mac users when you ask them “Why a Mac”. True for basic users, but not people like us. Hours can be wasted with simple tasks like trying to format a non Apple external hard-disk. This where the experience breaks down. Problem with Windows are generally solved with a quick Google search. Certainly not the case for OS X, with the hard disk users were berated online for not buying a Apple branded hard disk. I have Bluetooth problems with a Microsoft mouse and have never been able to resolve it other than rebooting. Do you use two monitors? Fine, that works… oh you have one in portrait mode (like I do)? Is not going to happen in OS X yet, sorry. HTPC? What you did not buy an Apple TV unit? The Mac Mini work well as a HTPC but does not support font scaling like Win7. I found a hack which works in some cases not other. Of course almost those cool HTPC open source tools don’t exist for the Mac, ironically XBMC is one that does and it’s almost as stable as for Windows.

Conclusion:
Hopefully this posts helps you consider if  OS X is for you. It’s a good OS, but Win7 is so much better in so many ways. If you want something that “just works” for simple tasks I highly recommend an iPad. That device is so simple I bought another for my Parents. They grasped it quickly and are having few problems. Also the design of the iPad apps means it’ll be very hard for bad guys to devise a virus for them. Macs don’t get PC viruses they get Mac viruses; I would wager the iPad will be virtually virus free.

Posted in Technology | 4 Comments

TeamCity Release Build sgen.exe gotcha

TeamCity is great, I had it up and running with Automated Tests in just minutes. But.. attempting to make a Release Build generated the following error. Googling shows many people have the same error and I only found ugly solutions that required manual registry editing, copying of files etc:

c:WINDOWSMicrosoft.NETFrameworkv3.5Microsoft.Common.targets(2015, 9): error MSB3091: Task failed because “sgen.exe” was not found, or the correct Microsoft Windows SDK is not installed. The task is looking for “sgen.exe” in the “bin” subdirectory beneath the location specified in the InstallationFolder value of the registry key HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SDKsWindowsv6.0A. You may be able to solve the problem by doing one of the following: 1) Install the Microsoft Windows SDK for Windows Server 2008 and .NET Framework 3.5. 2) Install Visual Studio 2008. 3) Manually set the above registry key to the correct location. 4) Pass the correct location into the “ToolPath” parameter of the task.

The first thing I did was use msbuild from the command line; sure enough Debug Builds were fine and Release Builds had the same error. This ruled out Team City. Obviously installing VS2008 on our build box would solve the issue, but I assumed the build tools must available elsewhere without need all of VS2008. They are:

The solution is: Download the Windows SDK and install .Net Development Tools (it says 2008 Server but I did this on XP SP3):
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=e6e1c3df-a74f-4207-8586-711ebe331cdc

WindowsSdkForServer2008

Posted in Development (General) | 1 Comment