tag:ampersate.com,2014:/feedStas Sușcov2014-03-29T09:15:01-07:00Stas Sușcovhttp://ampersate.comstas@nerd.roSvbtle.comtag:ampersate.com,2014:Post/the-last-7-months-of-our-venture2014-03-29T09:15:01-07:002014-03-29T09:15:01-07:00The last 7 months of our venture<p>Roughly a year ago I joined a venture which would become one of the most memorable and teaching journey in my career, that I had a chance to be a part of so far.</p>
<p>This is my point of view on the last days of probably the most dynamic and exciting investment fund a.k.a. development studio a.k.a. start-up that took place in Romania by today’s date. Which is also a very dead one at this moment.<br>
With this article I will try to explain some reasoning behind such a long transitioning and the motivation behind our closing.</p>
<hr>
<p>I joined Geekcelerator in late April as the tech lead. There, my responsibilities included, but were not limited to tech advisory and development, but also on helping the fund transition into something more like <a href="http://betaworks.com">Betaworks</a>: an investment studio with its own projects and team.</p>
<h3 id="doers_3">DOERS <a class="head_anchor" href="#doers_3">#</a>
</h3>
<p>We were pretty sure we should be focusing on entrepreneurship tools. Software someone would use to understand and learn about start-ups and early business. </p>
<blockquote class="short">
<p>The secret to getting rich during a gold rush is to sell pickaxes and shovels not dig for gold.</p>
</blockquote>
<p>Following the same concept we came up with the <strong>content management for accelerators</strong> idea which seemed more like a business canvas editor on steroids. We even came up with a <strong>marketplace</strong> approach within a couple of iterations. Which was definitely a smart way of delivering such content for our users.</p>
<p><a href="https://svbtleusercontent.com/sgiicxslq9ehca.png"><img src="https://svbtleusercontent.com/sgiicxslq9ehca_small.png" alt="DOERS v1"></a></p>
<p>DOERS v1 was shipped by the end of May. V2 was deployed late August. And while Techpeaks event in Trento <a href="http://blog.biancawelds.com/2013/09/disrupt-or-die-baby/">was a great opportunity</a> to confirm dogfooding is good, we understood that what we are building if just <em>fun</em> and <em>nice to have</em>. And that San-Francisco wouldn’t buy DOERS the way it was back then, actually no one would.</p>
<p>September was all about product development. Collaboration was what our product was missing, and it was what we were working hard to get right. This might have sound naive back then, but collaboration/communication is actually the only thing we should have cared about. We got that only later.</p>
<p><a href="https://svbtleusercontent.com/iuc2oy9j0r2oza.png"><img src="https://svbtleusercontent.com/iuc2oy9j0r2oza_small.png" alt="DOERS v3"></a></p>
<p>By the end of October, early November we shipped discussion support for our boards. This also included an immense shift to a new direction where the major features were bringing our tool closer to decision making and workflow management rather the initial positioning. Some sort of <a href="http://discourse.org/">Discourse</a> for enterprise if I may.</p>
<h3 id="sanfrancisco-and-the-closing-of-the-fund_3">San-Francisco and the closing of the fund <a class="head_anchor" href="#sanfrancisco-and-the-closing-of-the-fund_3">#</a>
</h3>
<p>October was a full month. In order to prepare for the fundraising we had to decide who are we and what do we want to do. The old <em>investment fund</em> entity was by far the last title you want to keep on the business card when asking for money from a VC. This and the fact that the only thing left from Geekcelerator was our team and some seed money, made it even less worth keeping.</p>
<p>Geekcelerator had to go. The <a href="https://medium.com/this-happened-to-me/7539858c8d0d">official announcement</a> was published in December, although we were <a href="https://angel.co/founden">Founden</a> for already two months. Our investors were updated and Founden <em>was creating tools for entrepreneurs</em>.</p>
<p>The purpose of our travel to San-Francisco was exclusively customer validation and fundraising for the new entity. After less than a month there, this led to another shift in product. <br>
Too generic, too little market, not too challenging to be worth an investment, is what we’ve been told.</p>
<h3 id="google-wave-approach_3">Google Wave approach <a class="head_anchor" href="#google-wave-approach_3">#</a>
</h3>
<p>We had money until December, which was like two more months we could only afford. Due to the lack of any news lately, we experienced a big moral breakdown in November. This paid an important role in the development of the next events in our product.</p>
<p>By looking back at the whole knowledge and experience we gained while working on the collaboration aspects, there was one common goal in the purpose of every iteration: simplified communication.</p>
<p>Without realizing this, we were fixing different aspects of nowadays communication challenges, most of which are due to e-mail limitations. Inspired by the work on Google Wave, the next two months was what we were calling v4.</p>
<h1 id="founden-v4_1">Founden v4 <a class="head_anchor" href="#founden-v4_1">#</a>
</h1>
<p>V4 initial feature list was built by consulting the <a href="http://en.wikipedia.org/wiki/E-mail#Problems">Wikipedia e-mail problems list</a>. And although this topic would require a separate article, I will try to enumerate some of the challenges we encountered:</p>
<ul>
<li>federated identity (not just multiple accounts issue, but also the data synchronization and integrity)</li>
<li>asynchronous communication while being also real-time when needed</li>
<li>information organization (replies and forwarding)</li>
<li>attachments (todos, links, location… etc.)</li>
<li>conversation summary</li>
<li>user experience</li>
</ul>
<iframe width="560" height="315" src="//www.youtube.com/embed/Jykw-WKsq4g"></iframe>
<p>V4 is a conversation based communication tool taking a shot to offer a solution for most of what is listed above.</p>
<h1 id="the-inevitable-closure_1">The inevitable closure <a class="head_anchor" href="#the-inevitable-closure_1">#</a>
</h1>
<p>In December we were fully aware only a miracle could save us. We kept working for another two months hoping we will find a solution to keep up the development. But it didn’t happen.</p>
<p>I also realized that Founden v4 was by far one of the most exciting and challenging project I had a chance to work on by that time. My <a href="http://pgbovine.net/unicorn-jobs.htm">unicorn job</a>.</p>
<p>Some time ago the <a href="https://medium.com/p/4f0b027bc28">unofficial closing of our venture was announced</a>. With this article I would like to express my deepest respect for everyone who worked with us for the last months. Many thanks to the people who invested in us and trusted us. Thanks and sorry to people who had to leave us while walking our way down here (Sabin, David). And all the best to my team in their future journeys: Alex, Andreea, Cătălina, Ștefan and Vlad.</p>
<h1 id="accolades_1">Accolades <a class="head_anchor" href="#accolades_1">#</a>
</h1>
<p>Both Doers and Founden v4 are worthless without a future, a future we could not provide. So we decided it would be a fair thing to share our work with anyone who is thinking to attack the same problems we did, or who is working for the same market we did (<em>cough cough</em> Slack, Hipchat, Hangouts…). We published <a href="https://github.com/Founden">all our work on GitHub</a> under MIT license.</p>
<p>We hope somebody will find it interesting some day.</p>
<p><a href="https://news.ycombinator.com/item?id=7495700">Discuss on Hacker News</a>.</p>
tag:ampersate.com,2014:Post/introducing-workcafe2014-03-10T04:10:52-07:002014-03-10T04:10:52-07:00Introducing WorkCafe<p>As most of my friends I work remotely. Sometimes from home, from a co-working space or from a coffee shop/café.</p>
<p>Your productivity when working from home or a coworking space might be different compared to a coffee shop. This is due to the fact that usually most of these venues do not consider their customers as potential <em>workspace tenants</em>.</p>
<p>For some time I was thinking about putting together a webpage with my favorite places to hack/work from, with an opportunity to let the community help curate venues in cities I’ve never traveled or plan to visit.</p>
<p>This weekend I spent some time building <a href="http://workcafe.in/">WorkCafe.in</a> inspired by <a href="https://github.com/benbalter/dc-wifi-social">Ben Balter’s list of DC places</a> <em>that serve up both Internet and Alcohol</em>.</p>
<p>WorkCafe is an <a href="http://emberjs.com/">Ember.js</a> application <a href="http://pages.github.com/">hosted on GitHub</a> and uses <a href="http://geojson.org/">GeoJSON</a> (Ember.js Data Serializer was tweaked to handle GeoJSON format) to handle the locations.</p>
<p>Adding a new city or a venue is as simple as making a pull request with relevant changes to <a href="https://github.com/WorkCafe/workcafe.github.io/tree/master/api/v1">the GeoJSON files</a>. The GeoJSON properties can include an extended list of amenities and other details. To name a few:</p>
<ul>
<li>smoking/non-smoking areas</li>
<li>furniture details (like comfy chairs, desks)</li>
<li>music/noise level/type</li>
<li>toilets (places in shopping malls usually do not provide toilets)</li>
<li>car/bike parking</li>
</ul>
<p>Currently there’s just one city, but pull requests are always welcome. If you have a place to suggest, or you are looking for more extended information about the venues, feel free to suggest it.</p>
<p><a href="https://github.com/WorkCafe">WorkCafe on GitHub</a>.</p>
<p><a href="https://news.ycombinator.com/item?id=7372475">Discuss on Hacker News</a>.</p>
tag:ampersate.com,2014:Post/getting-started-with-broccoli-and-emberjs2014-02-25T01:02:25-08:002014-02-25T01:02:25-08:00Getting started with Broccoli and Ember.js<p>Broccoli is a new build tool released recently by <a href="http://www.solitr.com/blog/2014/02/broccoli-first-release/">Jo Liss</a>.</p>
<p>The launch of the project was met with great enthusiasm and community support, especially from the Ember.js developers. But due to the recent release of the project, you might find it hard to use or integrate with an existing application.</p>
<p><a href="https://github.com/mhjohnson">Matt</a> and I took the project for a spin last week, and we were impressed by the benefits of using Broccoli.</p>
<hr>
<p>A bit of disclaimer.<br>
Although I’m writing Ember.js apps for some time, this is the first time I decided to avoid using Ruby for builds. Nor Matt, nor I ever used existing Node.js build tools and this article is in no way an attempt to compare Broccoli with any of them.</p>
<hr>
<p>Our task was simple. We wanted to achieve a bootstrapped Ember.js application, similar to what <a href="http://iamstef.net/ember-app-kit/">Stefan’s AppKit</a> provides.</p>
<p>To list a few of the features:</p>
<ul>
<li>Ember.js idiomatic application structure with ES6 modules</li>
<li>A persistence layer provided by Ember Data (think of it as an ORM for your application)</li>
<li>Production, Development (Fixtures) and Test environments support</li>
<li>Testing support using QUnit and Ember Testing package</li>
<li>Continuous Integration cross-browser ready test runner</li>
<li>CoffeScript support</li>
<li>Less/SCSS support (we went using Less along with Bootstrap 3)</li>
</ul>
<p>We started by forking <a href="https://github.com/joliss/broccoli-sample-app">Jo Liss fork of AppKit</a>, but we ended up starting from scratch which allowed us to understand more deeply the integration with Broccoli and to shape a more streamlined build process taking into account configuration environments. Don’t get me wrong, both the original AppKit and the forked changes helped us a lot. Thanks to the authors.</p>
<h3 id="broccoli-filters-support_3">Broccoli Filters Support <a class="head_anchor" href="#broccoli-filters-support_3">#</a>
</h3>
<p>Broccoli is especially powerful due to tree filters, although there are limitations to using them (limited support for complex integrations, ex: Emblem templating, limited integrations with processing libraries for CSS and HTML).<br>
With all of these, CoffeeScript and Less implementations exist and are doing their job pretty well.</p>
<p>If you are familiar with the Sprockets or Rails Asset Pipeline, you will notice that it’s similar to Broccoli filters. Here’s an example how we chained Handlebars with CoffeeScript and Less file filters:</p>
<pre><code class="prettyprint lang-javascript">// Brocfile.js
function preprocess (tree) {
tree = filterTemplates(tree, {
extensions: ['hbs', 'handlebars'],
compileFunction: 'Ember.Handlebars.compile'
});
tree = filterCoffeeScript(tree, {
bare: true
});
tree = filterLess(tree, {
compress: env === 'production',
paths: ['.', './stylesheets', './vendor/bootstrap/less']
});
return tree;
}
</code></pre>
<p>Now you can pass any trees to the <code class="prettyprint">preprocess</code> and it will make sure the matched files are picked by the appropriate filters.</p>
<p>You can also spot the Less integration with Bootstrap of which I will write a bit later.</p>
<h3 id="the-application-structure_3">The application structure <a class="head_anchor" href="#the-application-structure_3">#</a>
</h3>
<p>There are almost no differences in terms of code organization if to compare with AppKit. The details we were missing were mostly related to the configuration environments support which we adopted and integrated into the application build process.</p>
<p>Note: Broccoli has an environment extension, but at this moment, all it does is to just to provide conventional access to the Node’s <code class="prettyprint">process.env</code> where <code class="prettyprint">BROCCOLI_ENV</code> attribute value is being read as the current configuration environment name and is limited to just to <code class="prettyprint">production</code> and <code class="prettyprint">test</code>. I suggest using this convention if you aren’t already, at least until the purpose of <code class="prettyprint">broccoli-env</code> is fully decided.</p>
<p>By using Broccoli integration with Bower, access to the third party libraries was simple and easy. The snippet bellow showcases the purpose of <code class="prettyprint">broccoli.MergedTree</code> and it shows how easy it is to manage trees using it.</p>
<pre><code class="prettyprint lang-javascript">// Brocfile.js
var appTree = broccoli.makeTree('app');
var configTree = broccoli.makeTree('config');
var vendorTree = broccoli.makeTree('vendor');
//...
var appFilesToAppend = [
'jquery.js',
'handlebars.js',
'ember.js',
'ember-data.js',
'ember-resolver.js',
'bootstrap.js',
'config/environment.js',
'config/environments/' + env + '.js'
];
configTree = pickFiles(configTree, {
srcDir: '/',
destDir: 'config'
});
configTree = preprocess(configTree);
appTree = pickFiles(appTree, {
srcDir: '/',
destDir: 'app'
});
appTree = preprocess(appTree);
appAndVendorTree = [appTree, configTree, vendorTree].concat( broccoli.bowerTrees());
appAndVendorTree = new broccoli.MergedTree(appAndVendorTree);
appJs = compileES6(appAndVendorTree, {
loaderFile: 'loader.js',
ignoredModules: [
'resolver'
],
inputFiles: [
'app/**/*.js'
],
legacyFilesToAppend: appFilesToAppend,
wrapInEval: env !== 'production',
outputFile: '/assets/app.js'
});
if (env === 'production') {
appJs = uglifyJavaScript(appJs, {
mangle: true,
compress: true
});
}
</code></pre>
<p>Once the configuration environment integration was done, it allowed us to load environment related adapter, test libraries and fixtures.</p>
<p>We needed a fixtures adapter when developing the application, while for production and tests we wanted to use a real adapter with no fixtures and mocked HTTP responses.</p>
<p>Here’s what we came up with.<br>
We made our adapter aware of the current environment:</p>
<pre><code class="prettyprint lang-javascript">// app/adapters/application.coffee
Adapter = DS.ActiveModelAdapter.extend
namespace: 'api/v1'
FixtureAdapter = DS.FixtureAdapter.extend()
if window.ENV.development
Adapter = FixtureAdapter
`export default Adapter`
</code></pre>
<p>And provided an initializer that will load any fixtures we provide in our configuration environment:</p>
<pre><code class="prettyprint lang-javascript">// app/initializers/fixtures_preloader.coffee
initializer =
name: 'Fixture Pre-loader'
after: 'store'
initialize: (container, application) ->
store = container.lookup('store:main')
Ember.keys(requirejs._eak_seen).filter((key) ->
!!key.match(/^app\/models\//) and DS.Model.detect(require(key)['default'])
).map (key) ->
type = require(key)['default']
typeKey = key.match(/^app\/models\/(.*)/)[1]
type.FIXTURES = window.ENV.FIXTURES[typeKey]
store.pushMany typeKey, type.FIXTURES if type.FIXTURES
`export default initializer`
</code></pre>
<p>Now defining fixtures is as easy as just changing the appropriate environment file:</p>
<pre><code class="prettyprint lang-javascript">// config/environments/development.coffee
window.ENV.development = true
window.ENV.FIXTURES = {
user: [
{ id: 1, full_name: 'Tom Dale' }
{ id: 2, full_name: 'Yehuda Katz' }
{ id: 3, full_name: 'Jo Liss' }
]
}
</code></pre>
<p>I’m not completely happy having the flags all-over in the application files, but so far this is what worked great for us. If you think there are better solutions, please share them with us.</p>
<h3 id="the-application-css-and-bootstrap_3">The application CSS and Bootstrap <a class="head_anchor" href="#the-application-css-and-bootstrap_3">#</a>
</h3>
<p>Broccoli has a LESS filter written by <a href="https://github.com/sindresorhus/broccoli-less">Sindre</a>. Using Bower integration, and the <em>concate</em> tree transformation, it was a breeze to handle our CSS.</p>
<pre><code class="prettyprint lang-javascript">// Brocfile.js
var appCss = null;
var cssTree = broccoli.makeTree('stylesheets');
var cssFiles = [
'qunit.css',
'assets/app.css'
];
appCss = pickFiles(cssTree, {
srcDir: '/',
files: ['app.less'],
destDir: 'assets'
});
if (env !== 'test') {
cssFiles.shift();
}
appCss = new broccoli.MergedTree([appCss].concat(broccoli.bowerTrees()));
appCss = preprocess(appCss);
appCss = concatFiles(appCss, {
inputFiles: cssFiles,
outputFile: '/assets/app.css'
});
</code></pre>
<p>Since we told the <code class="prettyprint">preprocess</code> Less filter we will be using Bootstrap, all we needed, is just to merge the Bower trees to provide the integration.<br>
And since Bower trees will also include vendored packages like QUnit, we just included the <code class="prettyprint">qunit.css</code> into the build. Broccoli knows where to search for it.<br>
Thanks to our environments, we can dynamically remove it from our build if we are not testing.</p>
<h3 id="testing-the-build_3">Testing the build <a class="head_anchor" href="#testing-the-build_3">#</a>
</h3>
<p>For testing Ember.js applications, QUnit framework has great support by using the <code class="prettyprint">Ember.Test</code> package. We didn’t bother searching for other alternatives.</p>
<p>While the application build process seemed straight forward, the testing build might be a bit trickier. Mostly because we needed more libraries/trees included into the build and proper support for the continuous integration test runner.</p>
<p>While Ember.js AppKit encourages the use of the Trek’s <a href="https://github.com/trek/ember-testing-httpRespond">httpRespond</a> helper for mocking HTTP responses (think ajax/adapter requests), we had big issues making it work with the latest version of Ember (see <a href="https://github.com/trek/ember-testing-httpRespond/issues/10">#10</a>. So we used jQuery Mockjax for the same purpose as <code class="prettyprint">fakehr</code>.</p>
<p>To add testing support to our <code class="prettyprint">Brocfile.js</code> we had to change the current application build process by extending the trees it uses and returning the appropriate result based on the used environment.</p>
<pre><code class="prettyprint lang-javascript">// Brocfile.js
var testsTree = broccoli.makeTree('tests');
//...
var testAppFilesToAppend = appFilesToAppend.concat([
'qunit/qunit/qunit.js',
'jquery-mockjax/jquery.mockjax.js',
'tests/test_helper.js'
]);
testsTree = pickFiles(testsTree, {
srcDir: '/',
files: ['*.coffee', '**/*.coffee'],
destDir: 'tests'
});
testsTree = preprocess(testsTree);
testsJs = new broccoli.MergedTree(
[appAndVendorTree, testsTree].concat(broccoli.bowerTrees()));
testsJs = compileES6(testsJs, {
loaderFile: 'loader.js',
ignoredModules: [
'resolver'
],
inputFiles: [
'app/**/*.js',
'tests/*/*.js'
],
legacyFilesToAppend: testAppFilesToAppend,
outputFile: '/assets/app.js'
});
// If we are testing, return the compiled file with testing sources.
if (env === 'test') {
appJs = testsJs;
}
</code></pre>
<p>You can see how flexible this step was to us, just because of the way Broccoli manages the filters and transformations. If we wanted to make this shorter, we could just integrate the application build process along with the testing environment build process.</p>
<p>Now returning our tress, is the last thing we need to do to get the build started.</p>
<pre><code class="prettyprint lang-javascript">// Brocfile.js
// ...
return [publicTree, appJs, appCss];
</code></pre>
<p>Picking the test runner for cross-browser testing was another issue. Initially we tried to setup Karma runner, but it simply refused to work for us because of some strange issues (first the ES6 conflicts, then the lack of integration with the launchers I needed, i.e. Chromium). We ended up using <a href="https://github.com/airportyh/testem">Testem</a>, which is probably the most flexible test runner to integrate with and mostly <em>Just Works™</em>.</p>
<p>Now integrating Broccoli builds with Testem was as easy as using <code class="prettyprint">broccoli build</code> and tweaking <code class="prettyprint">testem.json</code> to point to the build directory.</p>
<pre><code class="prettyprint lang-json">// testem.json
{
"framework": "qunit",
"cwd": "build/",
"test_page": "index.html"
}
</code></pre>
<p>And now putting everything together:</p>
<pre><code class="prettyprint lang-sh">$ rm -rf ./build && BROCCOLI_ENV=test broccoli build ./build && testem ci -l phantomjs,firefox
</code></pre>
<hr>
<p>To summarize the whole experience… Of course there were situations where the lack of documentation and examples created frustrations. Or the lack of integration with existing tools required reading the source code. But overall, Broccoli seems to be a fast and flexible build tool.<br>
Some of the aspects I really liked and was happy to see are related to the similarities with the existing Ruby tools, simplicity and modularity.</p>
<p>We published our setup as a boilerplate on Github. Make sure you check it out and give <a href="https://github.com/joliss/broccoli">Broccoli</a> a try.</p>
<p><a href="https://github.com/imedicare/emberjs-broccoli-boilerplate">Ember.js Broccoli Boilerplate</a></p>
<p><em>Thanks to Alex Ciobica, Matthew Johnson and Flaviu Simihaian for reading and reviewing the drafts of this post</em>.</p>
<p><a href="https://news.ycombinator.com/item?id=7299693">Discuss on Hacker News</a>.</p>
tag:ampersate.com,2014:Post/on-testing-rake-files2014-02-08T17:45:44-08:002014-02-08T17:45:44-08:00On testing rake files<p>I started to be concerned about how to test Rake files just recently.</p>
<p>There was an issue for <a href="https://github.com/Courseware/rails-dummy">one</a> of the gems I wrote. The gem is mostly a bunch of Rake tasks.</p>
<p>Here’s an example of such a task:</p>
<pre><code class="prettyprint lang-ruby"> task :create do
rakefile = File.expand_path('Rakefile', dummy_path)
command = "rake -f '%s' db:create" % rakefile
sh(command) unless ENV["DISABLE_CREATE"]
end
</code></pre>
<p>Now following the articles from <a href="http://robots.thoughtbot.com/test-rake-tasks-like-a-boss">Thoughtbot</a> and <a href="http://devoh.com/blog/2010/11/testing-rake-tasks-with-rspec">Tyler</a>, and learning how I could write my tests, I tried to put together hopefully the best of both approaches into a gem I could reuse.</p>
<p>I wrote <a href="https://github.com/stas/rspec-rake">RSpec Rake</a>, which should provide two important things that could help write rake tests easily:</p>
<ul>
<li>A specific RSpec Example Group with relevant task initialization and hooks</li>
<li>Metadata integration to allow flexible declaration of tasks location or Rake file name</li>
</ul>
<p>Now using rspec-rake, here’s an example test for the task from above:</p>
<pre><code class="prettyprint lang-ruby"># spec/tasks/dummy_create_spec.rb
require 'spec_helper'
describe 'dummy:create' do
it 'calls rake with db:create task' do
rakefile = File.expand_path('../../dummy/Rakefile', __FILE__)
command = "rake -f '%s' db:create" % rakefile
# An equivalent of mocking `sh` method
Rake::AltSystem.should_receive(:system).with(command).and_return(true)
task.invoke
end
end
</code></pre>
<p>Hopefully this will motivate others to write more Rake task tests too.<br>
For more documentation check <a href="https://github.com/stas/rspec-rake#readme">the Github repository</a>.</p>
tag:ampersate.com,2014:Post/moving-on2013-11-10T09:39:28-08:002013-11-10T09:39:28-08:00Moving on<p><strong>TL;DR:</strong> We built an online learning service and now we are open sourcing it.</p>
<p>A couple of days ago I decided to open source <a href="http://coursewa.re">The Courseware Project</a>. I must say I’m both happy and sad about doing this. Probably because I should have done it long a time ago or I could have done it better.</p>
<p><a href="https://svbtleusercontent.com/egid2wdryczbbw.jpg"><img src="https://svbtleusercontent.com/egid2wdryczbbw_small.jpg" alt="The Courseware Project Logo by David"></a></p>
<p>I’m writing this because, first of all I would like to thank everyone who followed us, subscribed to our newsletter and sent us feedback during all this time. We felt very lucky and special to have all your support and the fact that you were in such a great number is definitely a confirmation that we were following the right mission: <em>build a better, social e-learning environment</em>.</p>
<p>This project was exciting in every way: the people I had the chance to work with, the timing, the challenges and the results we’ve been discovering.</p>
<h3 id="the-people_3">The people <a class="head_anchor" href="#the-people_3">#</a>
</h3>
<p>I started alone back in summer 2012. In autumn <a href="https://twitter.com/davidstroe">David</a> joined me. By winter we were already 3 including <a href="https://twitter.com/calinsalagean">Călin</a>. Earlier this summer, finally <a href="https://twitter.com/oanasipos">Oana</a> joined us.</p>
<p>I’m thankful to every person in our team we’ve managed to put together, and it is amazing that somehow, driven only by passion, we’ve managed to build what I really hope someday will inspire (at least a tiny bit of) the creators of the next generation of teaching tools.</p>
<h3 id="the-timing_3">The timing <a class="head_anchor" href="#the-timing_3">#</a>
</h3>
<p>By the time <a href="http://buddypress.coursewa.re">Courseware v.1.0</a> was almost ready, I could see the huge interest in this market (it was before Coursera, Udacity… and such,it was <a href="http://ocw.mit.edu">OCW MIT</a> era) and in the same time, I could see the limitations of my work on it.</p>
<p>I was also extremely frustrated by the way education was served to me too. Honestly, I’m still surprised by the poor quality of most of the tools out there in the e-learning market, and I really hope people will start taking seriously the way knowledge is <em>shipped</em>. The process of learning should be at least as exciting as the process of sharing the knowledge, period!</p>
<p>Courseware v1.0 gave us a lot of traction, a community and some sort of ecosystem (us and teachers/e-learning enthusiasts). In the end, I was hoping I could play that card the way others did it — <a href="https://twitter.com/dhh">DHH</a> on Basecamp with Rails, <a href="https://twitter.com/photomatt">Matt</a> on Automattic with WordPress. Even though all we were actually looking for, was to make sure we can continue bootstrapping the project by getting some potential clients and advisors.</p>
<h3 id="the-challenges-and-the-results_3">The challenges and the results <a class="head_anchor" href="#the-challenges-and-the-results_3">#</a>
</h3>
<p>Courseware changed its catch phrase a couple of times: Social Teaching, WordPress for Education, finally Social Coursera. Getting close to any of these is an immense challenge. I really don’t think we’ve had enough time and resources to do it. But I‘m pretty sure we’ve achieved some interesting results in some of our Courseware design and workflow:</p>
<p>It was as easy to start a class as starting a blog<br>
The class was easy to build and collaborate on<br>
The class was socially friendly, private and secure for any of its users</p>
<p>During the time of its existence, we had a chance to raise interest for Courseware from: educational projects looking for a platform, <a href="http://www.hdi.nl/">Helen Dowling Instituut</a>, <a href="http://www.accel.com/">Accel</a>. For various reasons, some partnerships succeeded, some failed. Some of the major reasons why things didn’t work out, include the lack of clarity and of the maturity of the project and its team or the lack of freedom in what clients wanted and we were looking for.</p>
<p>We found we are not getting anywhere huge with Courseware after a couple of such failures. We failed at getting a <em>CEO</em>. We failed at sales and at some other decisions. We ignored customer development and we did no growth hacking at all! I guess at some point little was happening and we could not keep ignoring that fact.</p>
<h3 id="moving-on_3">Moving on <a class="head_anchor" href="#moving-on_3">#</a>
</h3>
<p>Looking back, the decision of closing the project was a natural one despite all the broken hopes. I was happy to have the support from all the members in our team when the question was raised.</p>
<p>If wondering <em>what’s next</em>: Oana moved to Belgium where she’s working hard on her new career of a Rails girl; Călin is finishing his high school and working on all sorts of Google contests; David took a break from startups at least for a while; as for me, I cofounded <a href="http://www.doersapp.com/">DOERS</a> — we are reinventing the forums.</p>
<p>More than this, I’m still excited to see what is going to happen in the market of e-learning products in the next years. Also, I guess I will be curious at some point to try a Courseware v3.0.</p>
<hr>
<p>Today we open sourced all the code that powered coursewa.re domain name. Before this, we already open sourced a basic FirefoxOS app and an Android app. You can find all the code on Github at <a href="https://github.com/Courseware">github.com/Courseware</a>.</p>
<p>I also set up a page with some screens from the project at <a href="http://open.coursewa.re/">open.coursewa.re</a>.</p>