STATE OF THE CODE (SO TO SPEAK)
( I can see I’m my writing and in my code and in my business thinking that my recovery from burnout is nearly complete. I can almost stay in the flow now without concentrated effort. And I am able to construct novel insights again. )
I will have to do a lot of refactoring of the code. Small things make terrible impact. In our case the team apparently feared data driven functionality because of the automated tools they were using to script database changes. They also became dependent upon the data table api to the point where it’s a constant performance liability. They did these things out of expediency. But in the end it became a prison. I couldn’t understand why simple things were taking so long and now I can.
Secondly, all methods and properties of the classes are public. This might sound small but it makes the code far harder to read. The object oriented-ness of the code is a chimera. It’s really just libraries written functionally, not objects.
Third, let me help programmers and tell you that ORM’s are good at helping you with production work but not with complex data sets – especially large ones.
– Use views or procedures for anything with nondomain ( semantic ) joins.
– Use triggers to demormalize data.
– Use the ORM’s for updates and deletes. Always use prepared ( parametrised) queries.
– Fetches are memory expensive and user performance sensitive.
– If you are making an in-query then you should almost always be data driving instead.
Fourth, I have just lost all faith in MVC unless code convention enforces the relationship between the physical and the logical. Codeigniter did this better than Laravel does. Sometimes syntax is expedient at the cost of traceability.
Fifth, the JavaScript code is far better than the backend code. But the backend developers understood the business rules far better. So it is visible that there is a disputed between which code should own what responsibility and the back owns too much.
So you have this incredibly sophisticated and fast application but the code is extremely difficult to maintain and extend.
There is CSS on the back end. There are hard coded properties and relations that should be in the database. There are no means of identifying the origin of resulting DOM entities. So basically everything is inconsistently written and impossible to follow.
***Fixing it***
How do you fix it? One route ( api call ) at a time. You replace each method in sequence.
For example: most program logic is dependent upon a small set of tables that contain things like the properties of the task entities. This data should be read and kept in an application store in memory and addressed as an object and re-queried upon change – when needed for code, but still available for joins when in the database.
There seems to be little database relation between stages and states. And this should be reinforced.
Why? Data drive. Apps are self-documenting and force authors to work in sets using arrays.
***Build Process and deployment process.***
At some point there was an effort to use gulp and it was incomplete. At some point scss and incomplete. The Dev build was never created and took me the better part of five days to reproduce.
***what are we doing now***
ROMANS TEAM
Romans team is adding the recruiting features. The entities exist but the properties don’t.
They are also working on bugs.
They are also training our first client of any size.
CURTS TEAM
-Roman(my roman) is now creating a proper build and environment.
-Vasiliy is creating a proper deploy.
-I am adding the auction features.
-I will task the front end guys with minor front end work until they get a feeling for it. And once they do I will get one of them to work on extending the Gantt, and the other on the Usability issues that remain.
– I will see if Vasiliy can correct the Commands ( artisan ) allowing us to maintain the app more easily.
– the majority of the work will fall to me for the workflows ( relatively easy ) and Roman for the payment system. I suspect I will also extended the “money tabs” and possibly consolidate them into one.
Lesson? In starting this project I wanted to limit myself to desig and PM work so that my time was split with writing. I thought that between the framework, the UI screens, the database design, and light pm, it would allow me to stay out of the code once I had a crew sufficiently trained.
I was wrong.
But since the purpose of this work was to fund my writing, my choice would have been either not to do the work, or to cancel it when I hit my minimum cash over a year ago.
But I’m reasonably happy with the result. The product rocks. It needs some work, sure. But it freaking rocks.
So I’m going to take a cue from Matt Mullenweg, and my trusted (unnamed) marketing advisor from Seattle, and stay deep in the code. At least until it’s no longer necessary.
I have to do the following to get us to done with my vision for v1.
TO DO:
Improve the auction features to send out additional notifications.
I am contemplating just extending the skills functionality to act as a general filter for the auctions ( for auction work ). The seems like the smartest thing to do. But I will have to add other controls to the skills panel and rename it or create an additional panel for other controls ( which doesn’t feel right – tags are tags are tags so to speak.
Integrate with WordPress. This will make the Jira/confluence model obsolete. The same way we have made Jira workflows obsolete.
Create the dashboard for managing business cycles : time cards, forecasts, accounting periods.
Extend the money tab to include the new accounting entries.
Extend the approval tabs to include the new entities.
Complete the standard reports.
Improve invoicing to accommodate new financial relations.
Add the personality surveys and reports ( exciting ).
Add the import functionality for migration of customer data.
Create the API for external systems.
Refactor the code for clarity and performance. ( this will be an ongoing process )
That’s v1 that satisfies the community free-to-use model, the in house platform, and freelancer community platform.
Thanks for listening.
-Curt
Source date (UTC): 2016-06-19 06:40:00 UTC
Leave a Reply