Thursday, April 27, 2023

Best CRM for Real Estate Investors: Top 5 Picks for Success

Introduction

Real estate investing is a competitive and dynamic business that requires agility, responsiveness, and a keen understanding of the market. In order to stay ahead of the curve and maximize profits, investors need the best tools available. One essential tool is a customer relationship management (CRM) system, which helps manage interactions with clients and streamline business processes. In this article, we will explore the best CRM for real estate investors, the top real estate CRM, and the finest real estate CRM software options available today.

Zoho CRM

Zoho CRM is a comprehensive, cloud-based CRM platform that is perfect for real estate investors who require an affordable, user-friendly, and feature-rich solution. With its powerful automation capabilities, Zoho CRM streamlines sales processes and allows for easy tracking of leads, deals, and contacts. Some of the key features that make Zoho CRM one of the best CRM for real estate investors include:

  • Integration with Zoho suite of business apps

  • Customization options for specific real estate workflows

  • Inbuilt analytics and reporting tools

  • Multi-channel communication support (email, phone, and social media)

Salesforce

Salesforce is a robust and highly customizable CRM platform, making it one of the top real estate CRM options available. Known for its scalable architecture, Salesforce provides real estate investors with a wide range of features to manage every aspect of their business. Some of its notable features include:

  • Advanced lead and deal management tools

  • Comprehensive reporting and analytics

  • Extensive integration options with third-party apps

  • AI-powered capabilities for predictive insights and process automation

Propertybase

As a real estate-specific CRM software, Propertybase is designed with investors in mind. Built on the Salesforce platform, Propertybase offers an intuitive and customizable user interface along with a comprehensive suite of tools to manage contacts, properties, and transactions. Key features include:

  • Property and transaction management

  • Lead capture and nurturing tools

  • Integration with popular real estate portals and marketing platforms

  • Customizable dashboards and reporting

Wise Agent

Wise Agent is a CRM system designed specifically for real estate professionals, providing a simple, user-friendly interface and powerful tools to manage clients, properties, and transactions. Some of the features that make Wise Agent one of the best CRM for real estate investors are:

  • Lead management and tracking

  • Automated marketing and communication tools

  • Document and transaction management

  • Integration with popular real estate tools and platforms

Follow Up Boss

Follow Up Boss is a real estate CRM software that focuses on simplifying lead management and follow-ups for real estate investors. With its easy-to-use interface and robust automation features, Follow Up Boss ensures that no lead slips through the cracks. Some of its top features include:

  • Lead routing and assignment

  • Automated follow-up and nurture campaigns

  • Integration with popular lead sources and marketing platforms

  • Performance tracking and reporting

Conclusion

The best CRM for real estate investors is one that fits their specific needs and preferences. The top real estate CRM systems mentioned above, including Zoho CRM, Salesforce, Propertybase, Wise Agent, and Follow Up Boss, offer a wide range of features and functionalities to help investors manage their businesses more effectively. By selecting the right real estate CRM software, investors can improve their lead management, automate repetitive tasks, and gain valuable insights to make data-driven decisions that drive success in the competitive world of real estate investing.

Best CRM for Financial Advisors: Top 5 Picks for Streamlining Your Practice

 

Introduction

In the world of financial advising, building and maintaining strong client relationships is the key to success. Financial advisors need efficient tools to manage client interactions, track leads, and monitor their clients' financial progress. Customer relationship management (CRM) software is an indispensable tool that helps financial advisors streamline their practice and offer a superior level of service to their clients. In this article, we will explore the best CRM for financial advisors, the top financial advisor CRM, and the most effective financial advisor CRM software options available today.

Zoho CRM

Zoho CRM is a versatile, cloud-based CRM platform that caters to businesses of all sizes, including financial advisors. It offers a comprehensive suite of features that help streamline client management and automate various aspects of the business process. Some of the key features that make Zoho CRM one of the best CRM for financial advisors include:

  • Customization options to match specific financial advisory workflows

  • Integration with Zoho suite of business apps

  • Inbuilt analytics and reporting tools

  • Multi-channel communication support (email, phone, and social media)

Salesforce

Salesforce is a powerful and highly customizable CRM platform that is well-suited for financial advisors. Its scalable architecture and extensive feature set make Salesforce one of the top financial advisor CRM options available. Notable features include:

  • Advanced lead and client management tools

  • Comprehensive reporting and analytics

  • Extensive integration options with third-party apps

  • AI-powered capabilities for predictive insights and process automation

Redtail CRM

Redtail CRM is a financial advisor-specific CRM software designed to meet the unique needs of financial advisors. With its user-friendly interface and robust feature set, Redtail CRM helps advisors manage clients, monitor investments, and track communication. Key features include:

  • Customizable client and account management

  • Calendar and task management

  • Integration with popular financial planning tools and platforms

  • Compliance-friendly features and reporting

Wealthbox CRM

Wealthbox CRM is a CRM system created specifically for financial advisors, offering a simple yet powerful solution to manage client relationships and streamline workflows. Some of the features that make Wealthbox CRM one of the best CRM for financial advisors are:

  • Intuitive contact and task management

  • Automated workflows for common tasks

  • Integration with popular financial tools and platforms

  • Social media monitoring and engagement tools

AdvisorEngine

AdvisorEngine is a financial advisor CRM software that focuses on providing a comprehensive solution for advisors to manage client relationships, investments, and business operations. With its clean interface and powerful features, AdvisorEngine ensures that advisors can focus on delivering top-notch service to their clients. Some of its top features include:

  • Centralized client and account management

  • Goal-based financial planning tools

  • Integration with popular financial planning and investment management platforms

  • Customizable dashboards and reporting

Conclusion

Choosing the best CRM for financial advisors depends on the specific needs and preferences of the individual advisor. The top financial advisor CRM systems mentioned above, including Zoho CRM, Salesforce, Redtail CRM, Wealthbox CRM, and AdvisorEngine, offer a wide range of features and functionalities to help advisors manage their practices more effectively. By selecting the right financial advisor CRM software, advisors can improve their client management, automate repetitive tasks, and gain valuable insights to make data-driven decisions that enhance their practice and lead to better client outcomes.

Thursday, November 3, 2011

CMMI, best practices and outsourcing

I had some interesting discussions last night with my honours group with regards to whether CMMI compliance is good in the South African context.

First, to put everything in context, a famous joke:

"What would the responses of different nationalities be if they encounter an elephant in the jungle?"
"British: He would admire the gentleman of the jungle."
"French: He would contemplate the love making of this passionate animal."
"South African: He would wonder what the elephant thinks of him...."

I think this is very true across the African continent. African's have a culture where they are more concerned with what other people think about them rather than having confidence in their own abilities. We (Africans) have a culture where we believe that anything overseas is better. This applies to all industries, including music, IT, business and commerce. Companies in South Africa fear companies from Ireland, even though Ireland is a smaller nation with very basic (but effective) business models. The main difference is that when a product is released by the Irish, all Irish people support it. This is the main reason why so many successful musicians and IT companies come out of Ireland. South Africa has the complete opposite culture as South African's tend not to support local South African products.

With this in context, many businesses in companies see IT development as chaotic. Executives are 'afraid' of these uncertainties and are looking for the silver bullet to solve the IT problems and make it predictable and structured even though they do not understand the complexity of IT and the nature of the practice around it. The adoption of CMMI has been a major focus to try and structure the development process and many organisations, including governments, are forcing IT companies to be at least CMMI level 3 compliant in order to do business with them.

The first assumption of CMMI is flawed as no two organisations have the same business processes. This makes it inherently difficult to adopt CMMI if you have to change the company culture and business processes.

Secondly, many organisations find it too expensive to become CMMI level 3 or higher compliant. The prospect of outsourcing to India becomes very attractive as many IT companies in India are CMMI level 3-5 compliant. This provides many additional problems which are outsourcing specific. First, control is sacrificed. Secondly, who is sitting with the IP in outsourcing situations? There is a flawed assumption to think that an entire system can be documented and implemented from specification. The knowledge sits with the "knowledge workers" - the implementers of the system. Also, how much of a software development process can be automated? Very little. This adds to the failed assumption that knowledge can just be handed over and that people can be removed with automation.

CMMI is considered best practice and is supposed to give companies confidence that projects will be implemented within 10% of the iron triangle scope (time, budget, scope). However, empirical research has shown that 70% of these projects are still failures. Some large local financial institutes (names will not be mentioned) have experienced some significant failures (and burnt their fingers) by going outsourcing and CMMI. But still other financial institutes and large organisations are still trying to attempt the same thing. Why?

Why not rather invest in growing our local (South African) community so that we can service South African companies and the rest of the Africans continent? South Africa and the rest of Africa have its own culture and experiences and we should attempt to utilise those differences into advantages. The leaders of our new generation should be able to stand up and take that first step to bypass the political agendas in the organisation and strive for change else the IT industry will never move forward but rather be driven by best practice vendors from over-seas.

A last thought....
I believe there is a conflicting theory between implementing a best practice and having a sustainable competitive advantage. Best practice is all about normalising and conforming whereas competitive advantage is about innovation and change. In order for a company to be successful it needs to be unique (or have an unique product/service) and must be able to sustain it. Conforming to best practices might be counter-intuitive.

Some basics on CMMI:
http://en.wikipedia.org/wiki/Capability_Maturity_Model_Integration

Wednesday, December 29, 2010

Silverlight Pivot Viewer

For those that have not seen/used the Silverlight Pivot viewer, its definitely worth a look. It is an interesting control which allows you to navigate large amounts of data in very interesting ways. It gives the user the ability to view different aspects of the data and do their own filtering. The Pivot Viewer shows Deep Zoom Images as the output format, which allows the user to drill down into the required information.

Probably easier to view by example:
NetFlix has a working example of Pivot Viewer

Keeping this in mind, its probably best to use the Pivot Viewer with information which has large amounts of attributes. This will then give the user more options to 'slice and dice' the information. The main challenge will be to design your data correctly. This is a common problem with any business intelligence tool. You will find that you will keep refactoring your data because few people get it right on the first approach.

The basic output of the Pivot Viewer is a special XML schema (CXML). This data (XML) needs to be hosted on a web server with the necessary crossdomain policy files setup. There are two main ways you can generate the data needed for the Pivot viewer.

The first (and easiest) method is to use the provided Excel add-in. This method allows you the enter your necessary information and images. It then allows you to export it in the necessary format which can be hosted on your web server.

The second method requires you to build up the CXML yourself. This can be tricky, but if you use their provided SDK then it should be rather straight forward. The most examples show how to use static deep zoom images. While this is nice when working with images (like the NetFlix example above), using dynamic data will be more tricky. The approach I like to use is to use their SDK and implement my own PivotSource. This is basically a class that implements the CollectionFactoryBase abstract class in their SDK example. You will need to provide implementation for the MakeCollection method.

The next step is to create custom Http Handler to generate the deep zoom image on the fly. They provide a PivotTools library which you can use as a starting point. An alternative method is to create a template image in Blend or PhotoShop which you can inject your values into at run time. There are various APIs you can use to do this.

All of the examples use the local Visual Studio web server to host the solution. There were some interesting problems when trying to host in IIS6 on my Windows 7 machine. A couple of things to keep in mind:
  • Make sure ASP.NET 4 is registered in IIS - use aspnet_regiis -i in command line
  • Make sure MIME types are setup in IIS for text/xml - .cxml, .dzc, .dzi
  • Because you are using custom Http Handlers please make sure that you have Module Mappings setup for the above extensions for IsapiModule. This will tell IIS to execute your registered handlers in the web.config
The rest I will leave up to you to experiment. If you find any other cool features please let me know.

Wednesday, December 1, 2010

Silverlight and WPF Best practices

I have worked with a bit of Silverlight and thought I would share some best practices I have experienced and seen online. It is not a well discussed topic so this is a start. I will modify as I go on and would appreciate feedback

  • Use the Visibility property rather than Opacity to hide objects - Opacity is associated with higher costs because the object is still hit tested and technically rendered. Setting Visibility to Collapsed avoids these costs.
  • Don't use the Width and Height properties of MediaElement and Path objects - If you need to change the display size of the element, it is best to re-encode the media to the desired size by using a media encoding tool.
  • Detach programmatically registered event handlers after use.
  • Use transparent control backgrounds sparingly - using a transparent background for a Silverlight plug-in has a significant effect on performance.
  • Set EnableFrameRateCounter to true During Development - This setting will display the frames-per-second (fps) of the rendered Silverlight content in the browser's status bar, so you can fine-tune your application.
  • Use Silverlight Animations Instead of Creating Your Own Per-Frame Animations - This approach is platform-independent and browser-independent and is the most efficient method.
  • Avoid Animating the Size of Text - Animating the size of text can potentially use a lot of system resources. This is because Silverlight uses hinting to smooth each text glyph when it renders text. If you animate the text size (by using the Transform object or the FontSize property), Silverlight will hint the glyphs for each frame, which is costly and could result in frame-dropping. If your application requires dynamic scale changes of large text, it may be better to use vector graphics to represent the text.
  • Avoid Using Windowless Mode - Set the Windowless property to true only when necessary. Windowless mode is expensive and can cause tearing during animations.
  • In Full-Screen Mode, Hide Unused Objects - When your application goes into full-screen mode, hide all objects that are not being rendered in full-screen mode, or disconnect them from the tree.
  • When Downloader Finishes, Detach Events and Set to Null - When you use the Downloader object, after the Completed event fires, detach all event handlers from the Downloader, and then set Downloader to null. If you reference any content that the Downloader obtained again at a later time, you typically get that content faster because of caching. The performance cost of initializing another Downloader will be more than offset when the Downloader request is able to use cached content, so there is no advantage in keeping the same Downloader instance around to service the same request again later.
  • Break Up CPU-Intensive Work into Smaller Tasks - When JavaScript is running, the plug-in will stop drawing. Typically, this is not an issue if minimal work is done in the event handlers. However, if your application requires substantial, CPU-intensive work on the JavaScript thread, we recommend that you split that work into smaller tasks. This will allow rendering to keep up with the desired frame rate.

Markup Best Practices

  • Don’t use unnecessary “xmlns” namespaces in the XAML file. This overburdens the load time of the Silverlight page.
  • Don’t add same namespaces multiple times in a single XAML page. It screws up the XAML code at the time of maintenance and also loads the assembly namespace multiple times causing various memory issues at runtime.
  • Use proper name for your “xmlns” namespace prefix. For example: xmlns:commonControls is more meaningful than xmlns:cctrl. This avoids multiple declarations of namespaces in future.
  • Try avoiding “xmlns” namespace prefix name as “local”. Instead use “localControls” or “localConverters” etc. as per your namespace name. Using “local” will not give you proper meaning. In the same assembly there may be two or more namespaces (e.g. Controls, Converters etc.). In such case, it will be helpful for you to use proper prefix name to distinguish between them in proper way.
  • When adding a control that has no elements inside it, better to close it by self-closing tag “/>” instead of the hard closing tag (). This gives more cleaner XAML code.
  • Remove all unnecessary resource keys if they are not in use. These increases the memory uses and you may sometime encounter some animation issues due to this. If you need it at later point of time, you are always welcome to add it.
  • Don’t use extra panels (e.g. Grid, StackPanel, Canvas etc.) unless it is required.
  • Always try to use Grid as your panel first and if you require other panels, use them. Grid has the flexible UI layout and thus resizing your application will have a great effect.
  • Never try to give a name to all of your controls inside your Silverlight page as it takes unnecessary object creation at the time of load. Name only those elements which you want to use from your code behind and/or from your xaml. If you are using MVVM pattern, you can remove the naming of your controls in almost all the cases.
  • Use the Visibility property of the controls instead of the Opacity property to hide the content. Opacity to zero makes the control to hide but takes space in both memory and the UI. Other side, the Visibility property collapses the control from the UI, thus making spaces for the other controls in the same place.
  • Use proper formatting of your XAML code. This gives better look of code and also easy to maintain in future.
  • Use comments in XAML whenever require. This is useful when you revisit the code after a long time or some other person comes to work with your XAML file.
  • Try to use StaticResource instead of DynamicResource as it increases the performance and also it throws exceptions at development time. Hence, easier to identify the root cause.
  • Remove unnecessary styles & storyboard animations if they are not require at all.
  • Try to add your styles in a separate file if you want to share them across your application. If they are specific to a single page then add them in the page resource.

Formatting Best Practices

  • Attributes should be on a separate line.
  • x:Name should come first
  • Related attributes (such as HorizontalAlignment and VerticalAlignment) should be grouped.

Project Organization Best Practices

The obvious practice here is to create subdirectories to keep items organized.

A typical structure follows:

  • Resources is the directory for most of your resources. This directory should include only XAML files and subdirectories.
  • Resources-Images or Images should contain the icons and other images that are included as resources in the assembly. These items should be included as type “Resource,” not “Embedded resource”.
  • Resources-Fonts or Fonts, include the fonts embedded as resources in the assembly.
  • Converters is for value converters. This directory includes only class files. One converter per file is preferred.
  • Commands is the directory for your commands - classes that implement ICommand or custom routed commands-. This directory should include only class files.
  • Other is my catch-all to avoid too many extra directories. I usually group other user interface logic or helpers into this directory. For example, I use the other subdirectory to contain freezables that carry DataContext; or I use it for template selectors, or dependency objects thatoverride existing UI elements’ metadata.
  • Themes includes generic.xaml, other theme-specific resource dictionaries, and theme specific subdirectories. Use the following guidelines:
    • When working on projects that are not themed, leave the default structure generated by the tools – this means including default styles for custom controls in generic.xaml.
    • If working on a themed project, include a resource dictionary for each theme. Use the ..xaml convention (e.g. luna.normalcolor.xaml)
    • When working on a skinned project, follow same convention than themes and include a resource dictionary for each skin in the \Themes directory.
    • If a theme or skin is not self-contained and needs other resource dictionaries or other resources, create a subdirectory in \Themes and put the extra resources files there. Each subdirectory is named after the theme or skin. These “theme-specific”subdirectories can have subdirectories such as \Fonts and \Images.
    • Note that any resources shared among multiple themes still goes under the non-theme specific directories (e.g. \Resources\Fonts or \Fonts).

Organization of Resources

  • If there are dependencies between resources, the resources should be consistently ordered. Reusable resources should be at the top of the resource dictionary. A common structure usually follows the order shown in the following example:

- #Constants
- #Colors
- #Brushes
- #Converters
- #Objects (such as Data) or commands (for ribbon),etc.
- #Styles
- #DataTemplates

  • Each section for each type should be labeled with a comment that indicates the type of the resources it includes. I also like to ‘prefix’ each section name with # or ##, this helps you quickly find these section headers by using CTRL+F.
  • Resources that are not shared should be declared in line within the scope of the element that contains them.
  • If a resource is shared among just a few elements, it can be moved closer to the elements that use it.
  • All resources should have an x:Key attribute.
  • For resource keys, use Pascal casing and follow the same meaningful postfix convention we used for x:Names.
  • When creating implicit styles, use the x:Key attribute.
  • This reads consistently, and makes it easy to search for x:Key="{x: if you want to go find implicit styles.
  • Keep resources files small (but not too small) Generic.xaml and other theme resource dictionaries can get large. If you don’t want to manage large files, you can partition them into smaller resource dictionaries and use the MergedResourceDictionary feature to pull them all together. For App.xaml, using MergedResourceDictionaries is a must. It really helps navigate the logical organization.
  • When merging resource dictionaries, follow the order of reuse, with the most-reusable items at the top.
  • When merging a resource dictionary and local (scene) resources, always include your local resources last.
  • In your application, merge your resource dictionaries in App.xaml.
  • For projects where you do not have access to App.xaml (for example, a control library) or for scenarios where a scene includes resource dictionaries that are not in XAML, merge resource dictionaries by using code. Alternatively, create a subclass for ResourceDictionary that merges resources dictionaries by picking resource dictionaries from a singleton that caches the ResourceDictionary instance.

Naming Conventions

There are also two scenarios for naming: elements within a scene and elements within a template, in particular a ControlTemplate.

Naming Elements within a Scene

  • For scenes that will be designed by a human designer (not auto-generated and not just by a developer), all logical elements in the scene should be named.
  • When assigning a name, use the x:Name attribute for consistency.
  • Be consistent in your naming.
  • Use Pascal casing. It is more readable, it involves less typing of unnecessary prefixes, and almost truly represents the behavior, because the generated members are internal.
  • Provide meaningful names.
  • Make the x:Name attribute the first attribute after a type instance.
  • Postfix names with the type of the element.

Naming Elements within a Template

  • Within a template, name only the elements that absolutely need names. This includes the template parts that the control expects, the elements used in triggers, animations, named bindings, and so on.
  • Another difference between this scenario and naming elements in the scenes is the use of the PART_ prefix for template parts that are expected by the control. All the parts that the control expects and cannot work without should have the PART_ prefix. Nothing else should have the prefix.

Tuesday, November 30, 2010

Interviews

I have had the bad luck to conduct a number of interviews over the last couple of years. Now, I have one question... where are all the talented developers out there? Now, I warn you this might become a rant...

***rant start

Recently, one of our developers has decided to move on to newer pastures (and we are happy for him). We need to replace him and over the last week have had 5 interviews with "senior" candidates to try and fill this gap.

Firstly, if an intermediate or senior candidate cannot solve the simple, but famous, 'fizzbuzz' logic problem then he has no place being in this industry. We do not work in the most glamorous industry but the one thing we need to excel at is problem solving. Every day we will sit with new and sometimes extremely difficult problems and challenges. If you cannot think through a basic problem like this then we are wasting each others time.

Next, if you put something on your CV, please expect questions on it. Please do not think you can put buzz words on your CV and we are just going to assume you know it. If you don't know something do not attempt to 'fluff'. If you read something in passing but have never implemented it please state so. If not, then we assume you know it fully. We are fortunate enough to be a reasonably senior team and will smell the bullshit a mile away. We will respect the candidate more for honesty. I personally would like to work with someone who does not pretend to know everything but is willing to learn. As long as the candidate is willing and shows some intelligence and enthusiasm I am on his side.

Next, if your CV is 15 pages long and you rate half of your 50 technologies as '5' or expert then please expect a long and grueling interview. We smell bullshit. If you rate yourself '5' then you either have developed the language or walk on water. '5' is reserved for those people that REALLY know their technology inside out. Personally I have never rated myself a '5' on any technology.

Next, if you see yourself as a "senior" developer and expecting a big salary or position then it is expected that you know (and hopefully implemented) Object Orientation, Design Patterns and Best Practices in general. Preferably you would also know a couple of things around threading and databases. If your job does not implement these things - I understand. But this does not stop anyone from learning about these concepts and trying to implement it in their spare time and also trying to justify it at there current companies.

Recruiters.... enough said. I do not like them and do not trust them. Recruiters, please do your jobs!

Lastly, where are all the highly talented developers? They must be out there. Where are the people with CompSci or Information System degrees? Are they head hunted? Do they have "cushy" positions with very high paying salaries and benefits. I have interviewed over 50 people in the last 3-4 years and only one person so far has blown me away. Is this statistic accurate?

I really hope people will start taking pride in their careers and try to better themselves. It is not just about putting your CV out there and trying to get a bigger salary. It about the type of work you do, the people you work with, and the knowledge your gain in the process as well.

***end rant

Friday, April 9, 2010

WMI Example

This post is just to demonstrate the type of custom implementations you can do with WMI.

In the old days you had to use COM to access WMI but since .Net 2.0, Microsoft have provided WMI extensions that are built-in to the .Net framework these days. This is much easier to use
so I would recommend that approach.


Firstly, your project needs reference to System.Management
Each provider needs to be decorated with the following assembly attribute:

[assembly: WmiConfiguration(@"root\MyApplication",
HostingModel = ManagementHostingModel.Decoupled)]
As you can see, I provide my "namespace" I am going to use for my WMI instances as well as specifying a hosting model. A decoupled hosting model is an in-process hosting model.
To inform the WMI infrastructure that the assembly contains a WMI provider, the assembly must contain an installer class that can be run by the InstallUtil.exe command.

This installer class must derive from the DefaultManagementInstaller class and be decorated
with the [RunInstaller] attribute. It does not require any additional functionality.


[RunInstaller(true)]
public class WMISampleLibraryInstaller :
DefaultManagementInstaller { }

You can use InstallUtil in the Visual Studio Command prompt with the following line:

InstallUtil MyAssembly.dll

Read-Only Information

The most rudimentary kind of WMI provider is a WMI provider that exposes
read-only information regarding a configurable entity.

[ManagementEntity]
public class ProcessInformation
{
Process _theProcess;
[ManagementBind]
public ProcessInformation(
[ManagementName("Id")] int id)
{
_theProcess = Process.GetProcessById(id);
}
[ManagementKey]
public int Id
{
get { return _theProcess.Id; }
}
[ManagementProbe]
public int ThreadCount
{
get { return _theProcess.Threads.Count; }
}
}
To publish the instance to the WMI infrastructure, the hosting process can use the following code:

foreach (Process p in Process.GetProcesses())
{
InstrumentationManager.Publish(
new ProcessInformation(p.Id));
}

You can query information on WMI with the following query:

ManagementObjectSearcher searcher =
new ManagementObjectSearcher(@"root\MyApplication",
"SELECT * FROM ProcessInformation");
foreach (ManagementObject obj in searcher.Get())
Console.WriteLine("Id: " + obj["Id"] +
", ThreadCount: " + obj["ThreadCount"]);

There are similar tasks you can do for Write Properties and Methods. These are just different attributes you have to use. There is a limitation that Singletons cannot be used for Write Properties and Methods.

You use [ManagementTask] attribute on a method to expose it through WMI.
You use [ManagementConfiguration] attribute on a write property to expose it through WMI.