A few months ago we met Jean de La Rochebrochard (@2lr), a great young strategic adviser that helps entrepreneurs improving their sales process and raising funds. He loved the technology and, among other things, he suggested that we build a community. Coming from the hardware world, my first thoughts were "What for? Why should we?". It took me some time, and I now agree that this is essential, and here's why!
Why should we build a community?
Because our technology will change the world... only if it is heavily used. It is so simple and yet at the complete opposite of the strategy we had used until we met Jean. Indeed, we were so focused on selling our solution to big semiconductors companies that we forgot that community is a key factor for successful large-scale innovation.
Giving any developer the possibility to use our technology freely is actually killing two birds with one stone: (1) enabling a large community of developers to create their own hardware no matter how experienced they are, and (2) showing to professionals that using ngDesign and the Cx language (previously C~, we renamed it recently to make it more search-engine friendly) provides benefits by improving the hardware development flow.
A comparison with software
A second reason for why we should build a community is linked to my engineer background. As introduced in my last post, I used to think that nothing beats the RTL-based flow for hardware design and verification. I was wrong. New technologies can improve everybody's life at the condition that they are open to a little bit of change. Many new technologies (like Ruby on Rails, MongoDB, Node.js, etc.) have become widespread in just a few years, and have improved a lot the life of software developers.
In the meantime...
Only one technology has truly emerged in the hardware world: High Level Synthesis(HLS). HLS has been particularly promoted by big EDA vendors, yet most professionals who tried it... got less than awesome results. As a consequence, engineers are now suspicious of every new technology that promises to improve the design flow, and prefer to rely on code reuse. In other words, keeping and maintaining lines and lines of legacy code on the long term. In my opinion it is far from being agile, flexible, and efficient so this is one thing we have to change with the help of a large community of engineers.
To take it one step further
We were often surprised by the hostility professionals expressed when we were talking about change (in design flows). Why such hostility? In fact, it appears that many hardware engineers are "formatted" to use standardized technologies provided by a handful of big EDA providers. They have been told since university that new technologies, non-standardized technologies, and any technologies that is not RTL-based are only appropriate for students or beginners. Worse, the few new technologies (provided by big EDA providers) they tried did not meet their needs. With our community we will prove that new technologies can improve the day-to-day work of engineers.
Existing hardware-oriented communities
True, there already are communities about hardware design, starting with EDA providers, each having its own community. But of course, it's not very useful to find information about Xilinx products if you use Altera (and vice-versa).
Now, you can find groups and forums about FPGA, VHDL, Verilog, and others, on Google+, LinkedIn, and on dedicated websites such as OpenCores. But let's face it, most of them are not very active or interesting. Take OpenCores for example, that place is the site with the largest number of open-source IP cores, and they have over 200 thousands users. And yet, look at the activity on their forum...
Most other communities are often rather small anyway, from dozens to hundreds of members, rarely more. Too much concentration is not a good thing, but what's even worse is too many tiny groups that are so close to the threshold needed for successful interaction.
This is why we once suggested to a few different hardware groups on LinkedIn to join forces and merge groups. We were told that each group has its own purpose: one for FPGA, one for ASIC, one for professionals, one for IP cores, one for SoC, one for beginners, one for experts, and so on. I myself participate on 13 groups that have a few hundreds to a few thousands of members. Can it be less efficient? My feeling is that some have created their communities to gain power and influence or to promote their product/brand (push-marketing), forgetting that a community should be user-centered.
Our vision of a good community.
In our opinion, a good community is a place for people to get knowledge, discuss, exchange information, work together, and of course, have fun. In other words, a place where both users and the founders of the community win. Founders because the community helps them get feedback, improving the technology and promoting the products. Users because they have a place to meet, ask questions, suggest improvements, and start new projects..
A great example of a user-centered community is what the team of MongoDB has done. They have set up everything necessary for all users, from an IRC channel, a group for beginners, a group for experts, a newsletter, to a dedicated blog, and they use the feedback they get to further improve their technology. It is this model that we hope to follow, a user-centered community for the general good.
Care to comment? Tell us what you think on the forum!