Code standard Server (BrainCloud: JavaScript) Scripts Naming (Voir BrainCloud:Scripts) On organise le nom des scripts de la manière suivantes : {folderName}_{subFolderName}_{ScriptName} Dans le cas des scripts appelable par le client on ajoute "Cmd" comme prefix du "ScriptName" Exemples: acc1_CmdCreateTeam (pour les commandes de create team) ent1_Utils (pour les scripts utilaire spécifique à un jeu) acc1_Bills CmdSaveSegment (Pour une commande générique) Server (GS: JavaScript) Collection shortenedCollectionName = collectionName (collectionKey) eval = evaluation (studentUid) evalTeam = evaluationTeam (teamUid) result = results (simUid) sim = simulation (simUid) team = teams (teamU user = userdetails (userUid) How to name Events (generic code) {Action}{Collection}{WhatItDoes} PascalCase GetSimGroup CreateTeam CreateSimCustomEval GetEvalScenario JoinSim JoinTeam ReopenSimYear EditUserStudent How to get a Collection var {shortenedCollectionName}Entry = API.getItem("{collectionName}", {collectionKey}).document();var {shortenedCollectionName}Data = {shortenedCollectionName}Entry.getData(); Set a Response use sendMessageTo{Receiver}({specificToTheMethod}, {messageType}, {messageData}) when you MODIFY data messageType Actions deleted, changed, created {dataObject}_{field}_{action} ex.: team_cash_changed {dataObject}_{fieldOne}_{fieldTwo}_{etc.}_{action} ex.: sim_year_yearState_changed {dataObject}_{fieldParent}_{fieldChild}_{etc.}_{action} ex.: team_yearData_factory_changed messageData Information you want to send to the Client. send teamUid and/or studentUid when you send message to teacher (so that the teacher can filter the message) use Spark.setScriptData('{ObjectName}', {Object}) when you GET data Client (VS: C#) Standard Cases Class PascalCase Methods PascalCase Private members  _camelCase Public members camelCase Document Formatting order (each of those section should be surrounded by region with sub-region if necessary) Public members Public property Constructors Methods Private property Private Members Whenever possible surround code with #region MyRegion {code} #endregion to make the .cs clearer use Stubs when the interface only need partial information instead of loading all the data. exemples : studentStub, EvalStudentStub. if you want to do Lazy loading or Lazy Initialization make a Property (the reference is always private) public : under public members private : over private members ex.: private Dictionary TeamEvalTexts{ get { if (_teamEvalTexts == null) { _teamEvalTexts = new Dictionary(); _teamEvalTexts[Simulation.SIM_PERF_NAME] = simPerfNoteText; _teamEvalTexts[Simulation.LOGBOOK_NAME] = logbookNoteText; } return _teamEvalTexts; }}private Dictionary _teamEvalTexts; Plugin edition : //UNIKSIM BEGIN [name] [reason] //old code in comment .... //UNIKSIM END Data SetListeners in the data contructors the data Update itself and fire a relevent Action Filter the Response with teamUid and/or studentUid when the teacher receive the message Client (Unity) Boutons ConfirmButton are always to the right CancelButton are always to the left Prefabs Use the basic Prefab  when ever you need them. (NormalButton, EditButton, InputText, Dropdown, etc.) Popup X on the top-right corner VS CancelButton When there is no action, only information, put X on the top-right corner and close on click outside. When there is an action,  inputs, put a CancelButton with a confirmation to close. Google sheets shared_text is used by all the projects. Each project has a Google Sheet containing their project specific texts.