Quickie Review of “Soft Skills: The Software Developer’s Life Manual”

Soft Skills: The Software Developer’s Life Manual” by John Sonmez of Simple Programmer fame started out very slow and way too obvious for my tastes. After the first chapter or two I wondered what possessed me to pick up a book that bills itself as “a guide to a well-rounded, satisfying life as a technology professional”. I started to think of the author as Captain Obvious. I imagined him with a foam bat in his hand that he would earnestly use to punctuate each of his points with a gentle whack to my head. “You need people skills”, whack! “Be picky about where you work”, whack! “Have a specialty”, whack! I stuck with it, though, and ended up glad that I did. Yes, some of the advice is obvious and facile. After all, the book is covering an awful lot of territory. Some of it is aimed at people with far less than the 30 years of experience I have in my career. However, the book offers solid advice and a good starting point for deeper exploration on most of the topics it covers.

The book consists of 70 short chapters broken into seven sections: career, marketing yourself, learning, productivity, financial, fitness and spirit. The short chapters create a nice rhythm when listening via Audible since you can always finish a chapter before getting out of your car or otherwise turning off the audio. Later in the book I learned the short chapters were both a motivational technique for the author and an intentional choice to let readers digest the material in bite-sized chunks.

Personally, I found the sections on productivity, fitness and spirit to be most interesting as I am starting to delve deeper into those areas myself. The productivity section was particularly well done. The author’s personal experience of how disciplined use of time changed his life clearly gives him a passion for the topic. He ties planning, pomodoro time management and training techniques together to form an interesting and very practical way to get more done than you ever thought possible. He also takes on notorious time wasters like TV and video games based on his personal experience. It is very compelling advice. His advice on fitness is similarly personal, impassioned and effective.

His advice on investing is equally passionate but edges out into very dangerous territory advocating things like option trading and highly-leverage real estate investing. Although he briefly notes the risks involved, he down plays them quite a bit. He also advocates “good debt”, like the million dollars or so in mortgages he says he currently holds on his rental properties. On the upside, he references “Rich Dad, Poor Dad” author Robert Kiyosaki and spends a little time clearly explaining the key differences between things that make you money, like stocks and bonds, and things that waste your money, like buying cars with “easy monthly payments”. All in all, his financial advice is a strong net positive though I would advise people to take on less risk than the author advocates, avoid debt of all kinds and generally follow more of Dave Ramsey’s advice on money.

I would recommend this book to almost any technology professional. It’s likely that almost every reader will find several ideas in the book they can use to improve their life and career. I would especially recommend the book for someone just starting out in their career. You can think of the book almost like a very inexpensive mentor. At the very least, it can put you on a path of continual self-improvement.

Rabbit Operations 0.9.0 Released

This version is a minor maintenance release that includes the ability to set a different expiration time for error messages to give you more time to analyze them and possibly replay them. It also includes an upgrade to the latest stable release of RavenDB.  Check out the project website for more information.

The next release, 0.10.0, will include some major improvements including a new GUI and the ability to view and analyze statistics collected from all messages.  You can check out the plan on our Trello board.

Trying Out Serverless Applications at AWS — JAWS, Lambda, API Gateway

I just finished up a POC for an integration with a major retailer that allows our Customer Engagement Center to better assist customers buying custom blinds in store. It leverages AWS Lambda, AWS API Gateway and AWS SES to deliver a massively scalable, highly available web API with no servers to manage. I am really liking the tools provided by the JAWS Framework that made it far easier to manage and deploy the solution. I hope to do a full blog post on this in the near future.

Rabbit Operations Version 0.8.0 Released

This is a minor release but it contains one significant goodie: The details dialog for errors now has a section that displays a nicely formatted stack dump. Here are the complete release notes:

  • Nicely formatted stack dump shown on details view of error message
  • Ability to view queue stats as a gauge
  • Improve performance of search screen especially when bringing back large sets of large messages
  • BUG FIX: Small memory leak in poller due to RavenDB profiler stats
  • BUG FIX: Retry to overcome RavenDB transients under high loads when there are more than 40 active queue pollers

Check it out the Project Site for more details.

Setting EC2 Volume Tags for Cost Tracking

Like many AWS users, our company needs to track our AWS costs by project and client for accounting purposes.  Amazon makes it pretty easy to do this using tags and some settings in the billing console.  In our case, we added a CostCenter tag to each instance and ELB to indicate how to allocate the cost. Because most of our instances have at least two volumes, setting the tags manually for the volumes would have been very tedious and error prone. Therefore, I put together this little Powershell script to do the work for us by copying the CostCenter tag from the instance to all its associated volumes:

$volumes = Get-EC2Volume

Write-Host "Setting cost center tag on " $volumes.Count " volumes"
foreach ($vol in $volumes) {
  $tags = $vol.Attachments | %{$_.InstanceId} | Select-Object -First 1 | Get-EC2Instance | %{ $_.Instances} | %{ $_.Tag}
  $name = ($tags | where {$_.Key -eq 'Name'} | %{$_.Value}) -join ','
  $costCenter = ($tags | where {$_.Key -eq 'CostCenter'} | %{$_.Value}) -join ','

  $tag = New-Object Amazon.EC2.Model.Tag
  $tag.Key = "CostCenter"
  $tag.Value = $costCenter
  New-EC2Tag -Resource $vol.VolumeId -Tag $tag
  Write-Host "Volume: " $vol.VolumeId " Cost Center Set To: " $costCenter
}

You will need the AWS Tools for Windows Powershell installed.

RabbitOperations Project Launched

An early preview release of my new open source project, RabbitOperations, is now available at https://github.com/SouthsideSoftware/RabbitOperations. The idea is to provide some tools for managing real-world applications that use RabbitMQ. It will support popular message buses like NServiceBus and Rebus with error replay, audit & error logging, sophisticated search capabilities and likely an integration with NewRelic to log stats about queue lengths etc. This very early release lacks a UI and is only suitable for experimentation and potential contributors.