I have develop a customized Single Linked List that will that will support the following operations
 Node<T> AddToHead(T value);
 Node<T> AddToTail(T value);
 Node<T> InsertAfter(Node<T> node, T value);
 Node<T> void Insert(int position, T value);
 void RemoveFromHead();
 void RemoveFromTail();
 int Count { get; }
 Node<T> Head { get; }
 Node<T> Tail { get; }

The solution should be
 demonstrate an appropriate level of encapsulation and abstraction
 demonstrate a good understanding of the C# language and the .NET Framework BCL
 be own code and not use any built-in .NET collection types
 demonstrate your abilities in designing robust, reusable and efficient data structures

As of now I am not asking about implementation part. But can someone suggest me a good class design technique for this thing?