4. What did you learn about the project that can help others do similar initiatives in the future?
Also we learned it's really hard to estimate how long you're gonna need to buid something! In our case the perceived last 20% of the work take more than 50% of the time, because everything needs to play well with everything else and we wanted to have as least hacks in there as possible.
I think the most unintuitive thing in implementing an ssb client or server is the message verification and hashing code. We documented these in some threads, which we hope will be read by others who plan to do something like this.
4.1 Were there any part that was more complicated than initially planned?
Definitely the verification (see %M/qtHwv... ), Hashing (see %SJR3ZAB...) and time estimation.
4.2 Do you have any recommendations for the community about technical choices?
We think SSB has grown and evolved a lot in a very short timeframe. We consider this a success. At the same time, we start to see the problems with this approach: The message encoding before signing and hashing is a mess, and JSON seems to be not a very good choice for encoding messages for storing and transmission in the SSB case. Also the sets of assumptions different implementations in different languages bring to the table vary widely. At the same time more and more people start relying on SSB for social media and productivity.
We think we should slowly move our stability-velocity trade-off a bit towards stability. This allows better collaboration between different sets of users, and hopefully fewer breakages or unexpected behavious.
We consider Go a good language for this project, as it's very different from the reference implementation. The strong typing forces attention to details and the absence of the npm ecosystem, especially all the missing ssb modules, put you back into square one which gives you a chance to reconsider assumptions. That being said, it might have been a good idea to not hack on our own database implementation from the beginning, but to use an existing one until we have something that works.
5. What did you learn about yourself that may help you be more effective in the future?
keks: I've noticed and read about this before, but with this project I really had ups and downs in my motivation to work on it. Currently I'm concurrently working one (soon two) other jobs and I've started working on my master's thesis. Sometimes I feel like the context switching introduces churn that inhibits my productivity, other times I have the feeling that it's helpful to just switch the task to something else that needs to be done when I get bored of one task. I guess it's a trade-off and I haven't found my sweet spot yet. Probably also depends on the task and my general state of mind. Another thing I knew about myself before is that I have the tendency to generalize and refactor stuff very early. My motivation is that we'll have to move less code to the new form, but that comes at the cost of maybe doing that more often than necessary.
cryptix: I learned that I have to improve my communication with others. I have a tendency to swallow problems up and try to solve them on my own. Adding to what keks said above, I have experience with this kind of multi-project churn. I'm honestly not sure if there is a sweet-spot but it is very personal. In the end of the grant time I sometimes had the feeling that I shouldn't bother keks because he already spent his time and it was now up to me to get stuff working.
6. What did you learn about the community by developing within it?
Due to the nature of our project (highly technical and experimental), we haven't had much community interaction so we can't say much here. We didn't feel that much interest but explained this the far out nature of what we set out to do.
There were two topics we discussed with the community: the message encoding and the ideas on the plugin system. Talking about these was great, and even though we do not really agree on a good portion of questions, I think everyone can understand and sympathize with everyone else's viewpoint. I'm confident we'll work out more agreement in the future.