My colleague Jason Smith has
shared his
views on what developers should use when trying to share
code between projects. Should you go with a Shared Project or
a Portable Class Library (PCL) in the world of Xamarin.Forms?

He hastily concludes that you should go with PCLs
(pronounced Pickles).

For me, the PCL is just too cumbersome for most uses. It
is like using a canon to kill a fly. It imposes too many
limitations (limited API surface), forces you to jump through
hoops to achieve some very basic tasks.

PCLs when paired with Nugets are unmatched. Frameworks
and library authors should continue to deliver these, because
they have a low adoption barrier and in general bring smiles
and delight to their users.

But for application developers, I stand firmly on the
opposite side of Jason.

I am a fan of simplicity. The simpler the technology, the
easier it is for you to change things. And when you are
building mobile applications chances are, you will want to
make sweeping changes, make changes continously and these are
just not compatible with the higher bar required by PCLs.

Jason does not like #if statements on his shared code.
But this is not the norm, it is an exception. Not only it is
an exception, but careful use of partial classes in
C# make this a non issue.

Plugging a platform specific feature does not to use an #if
block, all you have to do is isolate the functioanlity into a
single method, and have each platform that consumes the code
implement that one method. This elegant idea is the same
elegant idea that makes the Linux kernel source code such a
pleasure to use - specific features are plugged, not #ifdefed.

If you are an application developer, go with Shared Projects
for your shared code. And now that we support this for F#,
there is no reason to not adopt them.