Search The Blog
My Books


My Songs


The Art of Unit Testing

Buy PDF or Print book at Manning

Buy on Amazon

Latest Posts
Twitter: @RoyOsherove
About this site

TDD in .NET Online Course

TDD and BDD in Ruby Online Course



This site aims to connect all the dots of my online activities - from tools, books blogs and twitter accounts, to upcoming conferences, engagements and user group talks.


Music Production vs. Code Production

My off hours hobby is music production.

Here are similarities I see between coding and music production so far:


  1. Code compiles into binary - midi is rendered into wav files
  2. When producing music you need to take many breaks to get your ears “out of the mix” and get your head clear again. The same goes for coding when facing tough creative problems or complicated code.
  3. Software culture is moving in the direction of automation and factories, with architectures that support changing things on the fly. Music production has two opposing factions: a.  Newer pop songs are made almost in an industrial fashion (try many tracks in a day, find one that works , then lyrics and vocals are found for it from many contenders;  and b. singer-songwriter which is all about manually crafting a song which can take a lot of time. (compare that to a hand crafted optimized piece of code that needs to run at a very low level like a DSP unit or real time calculations)
  4. Pair-Programming - > most new music these days is not done alone: there are lyric writing teams, melodic writing teams, production teams.
  5. in Music, new digital tooling is taking the place of older generation analog tooling. Instead of filling rooms with huge hardware, people use digital work stations with software plugins that emulates almost every piece of hardware out there.  Software coding is fully digital, but used to be very hardware oriented . Software testing is still very manual but automation is starting to take its place.
  6. Long term support: Software can keep changing after you’ve released it (new features added etc. Music is usually delivered in multiple different versions: radio mix, PG safe mix, club mix etc.. and music also gets remixed, new covers by other bands are made, remakes by the original band in shows, digitally remastered albums… not exactly the same, but in music all the “stems” (the parts that make the individual atoms of the song) are always saved and can be used to recreate different variations of the song.
  7. Code has classes and functions, Music production (digital) also has building blocks: Sound designers use waveforms and combine them, munge them up and process them to create new types of sounds that are then reused by other musicians. If a waveform is the input of code, an LFO envelope is a type of function that operates on that code. Those are just two types of the :atoms” of synthesized music)
  8. When mixing, it is encouraged to take many breaks (20 minutes mixing, 15 minutes break) so that your ears don’t get too used to the mix. Programming is also a very tough activity that is helped by taking many small breaks.
  9. TDD: In music you might have a “reference” mix - a song you like or a sound you want to sound like that tells you how close you are to getting the same results (loudness, frequencies, etc). TDD is the same way somewhat in that you set yourself a target and see if you measure up to it or not. Music is not automated for this though, and is not a any kind of regression test.
  10. Music pros do as much integration testing as possible they make their friends, DJS, their mom and their cat hear the mix all the time because they know they are not objective about how it translates in the real world. 
  11. There’s more but my head is drawn a blank..



Two new Online Courses: Effective Total Command and FinalBuilder Training Videos

I’m happy to report two new video courses that I just finished recording and publishing two new courses:

Both of these are tools that I rave about in almost any new windows based dev shop I go to. Most people have at least heard of Total Commander, but never bothered to find out why people like it, even though it looks ugly. But almost nobody heard about FinalBuilder, but those that did, always have this small glitter in their eye, because they know what I mean when I say you can automate pretty much 99% of your problems away with this stuff.

Both of these together (coupled with everything search engine and systeinternals tools) are a godsend to anyone who hates repeating themselves. 

I hope you find these courses helpful. 


What's new and Changed in the Art of Unit Testing 2nd Edition

I still get called out for some things I wrote in the first edition published in 2009. Some people might not be aware there is a 2nd edition out there, or are borrowing old copies. Lots has changed in my thinking about unit testing practices since then and was reflected when the 2nd edition was published in 2013.
In this second edition, I added:
  • Material about constrained versus unconstrained isolation frameworks : specifically those that can fake things like statics and priavte methods.
  • A new chapter 6 on what makes for a good isolation framework and how frameworks like Typemock work under the covers. 
  • I no longer use RhinoMocks. Stay away from it. It is dead. At least for now. I use NSubstitute for examples of Isolation Framework Basics, and I also highly recommend FakeItEasy. I am still not crazy about MOQ, for reasons detailed in chapter 6.
  • I added more techniques to the chapter about implementing unit testing at the organizational level, such as understanding influence factors
  • There are plenty of design changes in the code I show in the book:
  • Mostly I stopped using property setters and am mostly using constructor injection. 
  • Some discussion of SOLID principles is added, but just enough to make it whet your appetite on the subject.
  • The build related sections of chapter 7 also contain new information. I learned a lot since the first book about build automation and patterns. It’s the topic of my next book. In this book I talk about build pipelines and where unit testing fits in the process.
  • I recommend against setup methods, and give alternative ideas on getting the same functionality out of your tests. 
  • I also use newer versions of Nunit so some of the newer Nunit APIs changed in the book( Assert.thorws. vs Assert.Catch, TestCase attributes and more)
  • In chapter 10, the tools relating to legacy code were updated.
  • Having worked with Ruby for the past three years along side .NET, I gained more perspective about design and testability arguments, reflected in chapter 11, dedicated only to this topic.
  • The tools and frameworks appendix was updated with new tools, and old tools were removed.

Also, here is a talk I did about it:



Why The Hell did you move to New Jersey, Roy?

After two years in amazing Norway, our Scandinavian adventure has been transformed into what I can only call so far as “The New Jersey Experience”. I’m here on an O-1 visa. I’m also open to doing part time training courses in the area so contact me.

The three little boys, my wife and me moved to Tenafly, home of many other Israelis, to stay 20 minutes away from New York City (baby), in a nice and quiet place with (supposedly) good education for the kids.

Things we missed in Norway that we can easily find here include, but are not limited to: 

  • Hummus
  • Places open after 7pm
  • Actual Tasty Cereal

Things we miss from Norway now that we’re in the US:

  • Our wonderful Oslo International School. School here is very strict: just 22 minutes of break a day for a 5 and 7 year old are basically torture.
  • Law and order
  • Paying 50$ for a pizza

Things I plan to pursue while I’m here

  • Leading awesome technological teams, flow and architectures
  • Training on the side
  •  Try my hand at some stand up comedy open mics
  • Work on making some electronic music 
  • Work on making more online courses (vim is coming!)

So, why?

We couldn’t think of a place more different than Norway, where we will learn things we didn’t even know we didn’t know. It’s all about ravines.

Let the games begin!



New Online Course: Beautiful Builds and Continuous Delivery Patterns


I somehow forgot to blog about this, but it’s never too late. My new online course Beautiful Builds and Continuous Delivery patterns is now available and is $25 until the end of this month (July).

Here’s the course description:

Ah, Continuous Delivery. Everybody and their sister are talking about it, but in real life, nothing is ever as simple as listening to a conference talk about it.

  • Can you really deploy 20 times a day if you QA department is breathing down your neck that they are using the staging server between 9 and 5?
  • Are the teams waiting for each other to finish their work , creating bottlenecks?
  • Is security threatening to have you fired for even suggesting you deploy to production?

In this course Roy Osherove, author of the books “Beautiful Builds” (still in progress, actually) and “The Art of Unit Testing”, discusses common problems and solutions (patterns!) during build automation and continuous delivery.

We start from the basics, defining the differences between automated builds and CI, separation of concerns in build management, and then move on to more advanced things such as making builds faster using artifacts, solving versioning issues with snapshots, cross-team dependencies, and much more.

  • All videos are both streamable AND downloadable to watch offline, no DRM.

More info at



Should you write unit tests or integration tests?

I got this question in the mail. I thought it was quite valid for many other people:



Trying to promote unit tests in a new work place: the “search” action from the UI goes through IOC container which calls a WCF service, where the search itself is done using entity framework auto generated code.
My colleague claims that due to the multiple dependencies, it doesn’t make sense to fake everything when running the unit test, and it makes more sense to do integration tests in this case.

Is my hunch correct? Should I put efforts into implementing unit tests in this complex scenario?


My Answer:

You can go either way.

It really depends on time tradeoffs
  1. How long will it take to write the tests? For integration tests you will have to wait until the whole system is complete to get the tests even failing, unless you start from a webpage, and then they will fail for as long as the entire system of layers is not built.
  2. How long does it take to run and get feedback? integration tests take longer to run usually. and are more complicated to setup. But when they pass you get a good sense of confidence that all the parts work nicely with each other. with unit tests you will get faster feedback, but you will still need those integration tests for full system confidence. On the other hand with integration tests and no unit tests the developers will have to wait in long cycles before they know if they broke something.
There is no one answer. I usually do a mix of both. For web systems I might even start with acceptance tests that fail, and then fill the system slowly with unit tests for parts of the features with more focused functionality. 
I guess you can change the question to : What type of tests should we write FIRST?
Only you know that. it changes for every project and system.



Why I stopped selling courses on udemy

The Udemy Pyramid Scheme.

I’ve run several successfull courses on udemy  (update: I’ve moved my courses over here now) back when they had a royalty rate of 90% revenue share per course.   Then things started to change, to the point where teaching in udemy to me feels like trying to win in a pyramid scheme. 

Here are the “new” revenue share model numbers:


  • 100% revenue share on students that instructors bring to Udemy

  • 50% revenue share on students that Udemy brings to an instructor’s course

  • 25% revenue share on students that are driven by Udemy paid ads

end quote.

Seems fair. Until you realize, the hard way, that any exiting udemy user that takes your courses that YOU didn’t bring in with your specific course codes and discounts, counts as a 50% revenue share.


Points of consideration:


  1. There is a finite number of people who might be interested in your course
  2. There is a high chance that many of them have already signed up for udemy
  3. Of those who haven’t yet signed up to udemy, you have to bring in and make them use you special offer codes. Only then do you get 100% of that course’s revenue.
  4. Once you did that, you basically screwed over other course instructors, because your student will now and forever be considered a 50% revenue share for all other teachers.
  5. That means that I benefit and make money at the large expense of other teachers on udemy, while making udemy much, MUCH more money in the long run.
  6. The earlier I started with my courses on udemy, the more chances I have to get into udemy those users who have not signed up to udemy yet. The later i sign on to teach in udemy, the smaller my chances are ever making more than 50% revenue share, unless I bring my own crowd.
  7. Consider this: for each student on udemy, udemy makes 50% commission on all their purchases, EXCEPT one instructor.
  8. Eventually, there will be less and less chances for ALL instructors ot make ore than 50% revenue on courses, as the student population targeted has already signed up. any students that UDEMY brings to the table  with ads, will actually only get you 25% revenue share.
  9. This whole idea pits the teachers one against the other, to see who gets "fresh" users first, thus taking them “away” from other teachers. That’s not healthy.



So I opened my own shop on shopify and at least now I don’t feel like I’m screwing over anybody else. I pay more than 100$ a month for some of the plugins etc. But I do have enough people on twitter and I’m well known enough in some corners that it pays me OK.  I don’t like doing it, but it feels better. If they went back to the old model I’d probably go back to them, honestly.

When udemy sent me an email asking why I haven’t been selling any courses, here was my answer:


Hi Roy,
I saw that you drove almost $4,000 to your Udemy courses between Nov-Dec 2013 with instructor coupon codes and haven’t driven any additional income since then. I just wanted to send you a note to find out what we can improve to help you continue building your business on Udemy
Would you mind providing a little insight?
1) How did you drive your initial Udemy course sales?
2) Why did you stop promoting your Udemy courses? 
3) What do you need to restart promoting your courses?
I appreciate any feedback you can provide! And if you’d like to schedule time to chat, I’m available. Just let me know. :)

My answer:

I stopped because your new royalty model (50% if existing user) is basically a pyramid scam. And it feels unfair. 
By bringing in new users I make sure I get more royalties, but I also screw the royalties for other authors. Also, there is a limited number of people who are interested in a specific subject, so only early risers will get their full royalty.
It feels wrong. I was very happy with the previous model of a flat rate royalty, but this one has me looking for alternatives.



Needless to say, they didn’t reply yet. 

I would recommend that you stay away from teaching on udemy. it feels unethical.


Photo and Video Backup Strategy: Why I am not likely to ever lose my family photos and videos from the last 10 years in the next 10 years.

Here is the way I backup my photos>

  • First I use dropbox for “immediate” backup of the last month
  • Then I use PictureLife as a full backup and viewing service
  • Then I use Amazon Glacier for “cold storage”
  • For my stuff I sell I use Amazon S3

Here is my system.

Dropbox : First Line of Backup

My wife and I take most of our photos on our phones, so we have dropbox installed on our phone with automatic uploads. Every time we get to a wifi spot, the phone “calls home” to dropbox to upload the latest and gratest photos and family videos we have taken.

I have my own dropbox account with 100 GB on it. My wife has a separate, free dropbox account.

My wife has shared her “Camera Uploads” dropbox folder with me. She also has auto upload enabled.

Dropbox also automatically supports multiple versions up to a point, for the same file, so even if we get our files encrypted by that awful virus, we can restore them by version. I hope.

Cost: $10 a month for the pro plan

PictureLife: 2nd Line of Backup with Browsing

I pay for a standard picturelife plan, so I can always browse all our pics and videos on my phone, ipad and more. I chose picturelife because it supported videos. Lately other services have added that possibility as well.

We have picturelife installed on all our family PCs and phones. On the PCs it is set to look for stuff in the camera uploads and the shared camera uploads folder from my wife. Yes, we upload the same pics multiple times, but picturelife seems to be mostly smart enough to tell if the same picture has been uploaded multiple times and keeps only a single copy. sometimes we get two *especially if we get any pictures from what’sApp. This is still not a solved problem..

If we do take pictures with other camera, we just put the SD card in the laptop slot and let dropbox import everything into the camera uploads folder. From there everything gets synced to picturelife.

Cost: $15 a month for up to 300GB


Glacier: Cold Storage

We have two “family computers: in the house. One of the main media center windows machine with 1TB hard drive on it, and it is connected to my dropbox account. That means it also gets all of mine and my my wife’s photos since she has a shared folder with me.

Every one a month or two, I zip up al the files on that machine’s camera uploads and “camera uploads from my wife”’s folder and upload them to amazon glacier. the zip file is named with a date range for example . Once the glacier upload is done (I use fastglacier for a speedy upload) I can safely delete the photos from dropbox, so that I do not pass the 100 GB limit (we have lots of videos).

No virus will have access to those files.

I also have a copy of all these files in two other glacier regions, just in case. the cost are extermly low. Much better than S3.

Cost: about $10 a month for around 300GB so far

Amazon S3: Quick access for my work

I have all the video files for all my courses backup to both S3 and Glacier. S3 is good because I host some of them for the blog and sometimes I need to get them to upload stuff to my shop. So I have two online backups for my large video files. S3 costs more, so I make sure to keep stuff there without the redundancy options, which is much cheaper

I have LOTS of data on S3 so I get around $40 per month in costs..


Final Words

I don’t rely on a single service to stay up. And I always have full access to everything from the last ten years.

Total cost for managing all my files ever:  $65-$75 a month.

Your costs might be $40 lower since you might not need S3 if you are not keeping professional grade work for quick retrieval.

Web Analytics