The birth of one project or how to write your own CMS
Greetings, dear Khabravchane. For a very long time I went to write an article here about myself and my project. In this article, I would like to tell you my story of the origin of the project idea. And also write your story of the development of views on software development in general. Perhaps even I will be able to transfer some of the knowledge based on my many years of experience as a programmer. Go!
About me
Tell us about yourself. My name is Alexander, I have been working as a programmer for more than 10 years. I had to solve problems in various areas of business, such as banking, e-commerce, data structuring projects, parsers and other tasks of the enterprise sector.
The purpose of this article is to show one of the facets of the world of software development and possibly open a new door of opportunity for other programmers. What do I mean by this statement?
Programmer Development Stages
Surely earlier you already read articles about the stages of development of programmers. In my opinion, every programmer goes through development stages in his professional career.
I defined this development path for a programmer in 5 stages:
The first stage is when you are a student or you are still new to programming. You just like to see the result of what you have programmed, be it a window with a “Hello” button or a data parser that analyzes and structures.
The second stage is when you already write complex integrations and use advanced frameworks. And you enjoy having mastered another tool.
The third stage is when you start to figure out how best to structurally design the application. And you're just crazy about the fact that you correctly divided the logic into components.
The fourth stage is the stage of the god of software development. You understand all the previous steps and you like to build a system for assembling and delivering all application modules into a single convenient automated installer.
The fifth stage is the saddest stage. You understand that your favorite thing no longer brings that former euphoria and just do everything on the machine. Then the moment comes when it is bursting with you just to make your product and bring it to the market, thereby solving someone’s problem or simply improving some kind of workflow.
Birth and death ideas
As you probably already understood, these stages are based on my personal experience. Therefore, perhaps someone will have a completely different development experience. And I do not declare that it is any other way. Further we will talk about the very 5th stage of development and what to do next.
Once a very interesting idea fell into my head. Before that, of course, I went for a week and thought about what kind of service I would "gash." And seriously and deliberately, I decided to do something grand.
The idea was to create a platform, in fact a website, that would allow everyone to tell others about their skills in something where he had excelled in relation to others. For example, an avid fisherman, wants to share his experience on how to catch perch or carp correctly. He creates a certain event on this platform with the date of the seminar and places a promotional video or just a description of his seminar. Other users vote interestingly or not interestingly, when collecting a certain number of votes, the event is approved by the platform or rejected due to a lack of votes in support. Moreover, the person who posted this event has the opportunity to set the amount for attending this seminar. The owner of this platform was required to fully organize this event. Accordingly, taking a small commission on ticket sales. Here is the finished monetization.
I already hear in your thoughts, “Yes, it already is, why do the bike again.” But it makes sense, I will return to this statement. Of course, in the end, the idea dramatically transformed dramatically into another, but without the main task, I would not have seen this problem.
Just a CMS
Then the question arose of which technology to do all this. Without thinking twice, I began to look at existing CMS and other platforms for the quick assembly of this kind of project. The solution was such that I would take some kind of engine for working with data and just do a web muzzle retrieving this data via REST. I was not going to dig into the full development. In the end, I still had to.
My view on software development
For each task, its own tool. I always try to adhere to this rule in software development. Another important factor is the division of logic into technological areas of responsibility. For me, the clear boundaries of integration between different technologies are important. In other words, I like it when the frontend is separated from the backend, for example. That is, from the word "completely." Or there are structurally dedicated modules, integrations, and all this works independently. Now it is called micro-services.
I think it’s easier to organize work on the project, dividing the developers into teams according to their competence.
Everything! I decide to make a spaceship
Based on experience, I thought that we needed such a tool that would help us to form page designs from ready-made blocks and connect it to the data and services of this platform directly from the browser. The main criterion was no narrowly specialized programming for each task. Everything should be abstract and as a constructor.
Having spent 2 weeks searching for something similar and having tested two free CMS at the same time - Drupal and Wordpress (I tried to use them as a data management and REST API integration engine). But not one of them satisfied my requirements. Therefore, I decided to write my CMS with "blackjack and whores."
Technology
The next question that was to be solved was the choice of a technology stack for implementation. Without much thought, I certainly preferred to do everything in Java . It was only necessary to decide which frameworks to take. The criterion in choosing frameworks was this - not to take too much and use only the necessary parts of the tool (later on I regretted the choice a little). To build the admin panel interface, I selected one little-known AJAX-framework from Taiwan - ZK Framework . I like the MVVM approach in it, and its AJAX component (now I already consider this a minus). Since you do not need to write tons of JS to monitor the relevance of the state of the user interface on the page (at the moment I have found a better alternative).
What kind of technology stack did I get as a result:
ZK Framework (MVVM)
Java (EJB)
Jax-rs
Mongodb
Wildfly
Well, go ahead!
And I went headlong into this project, while working on projects for a salary. The time for my project was mainly in the evenings and on weekends, sometimes somewhere I managed to grab time at my main job, I worked there too. In the process of working on the project, the principle of implementation has changed several times. The data model has also undergone many modifications. In parallel, I told friends of the programmers what I was working on, offered to join the project and start working together. But unfortunately, I continued to do this project alone. As a result, I spent 3 years to get a working version of the functionality that was intended.
Alone in the field is not a warrior, or ...
Then I still wanted to create a team. I started registering my product as a startup in one of the business accelerators. But he didn’t finish his application, having stopped at the “Your team” stage.
I often and often told my friends who worked in the field of IT (information technology) or in the field of IT.
In the end, I managed to find the same crazy potential customer for my product. He, like me, decided to make his product, but he is not a programmer. And he needed a platform for his product. I decided, here it is! I didn’t even have to offer to use my CMS myself, I was asked to create a site on it. Free of course. It was my chance to try out my CMS in real development. And you know what, I was pleasantly surprised, but my CMS coped with this task 100%. Yes, of course, I worked on a lot of things during the assembly process, improved them, and simply “fixed” bugs. But in the end, I was able to flexibly pull any designs and templates onto pages, connect and integrate data and services from third-party sources.
And the Swiss, and the reaper, and the dude
From this moment I realized that you need to develop your knowledge in the field of marketing, and read books about building your business. In the process, I participated with this product in a hackathon from MongoDB , partially received the audience’s reaction to this product. In the social. networks responded and even shared my message about what I did CMS. According to the results of the hackathon, I certainly did not receive a single award, but I was pleased that I participated.
While I was waiting for the results of the hackathon, I still made two attempts to “hook up” my product at investment promotion events. After which I already saw a lively reaction from the audience. Which brought me great experience.
Result
What at the moment I have:
A certain MVP (Minimal Viable Product) covering functionality:
flexible standardization
file storage
on-the-fly data model modifications
integration with REST services
role and user management in MongoDB
Experience in presenting an IT product and the reaction of the audience.
Partners in work on IT-products, motivated to solve problems only for the idea.
And a big roadmap for further product development. At the moment, on the technology stack, I have conceived an enormous processing, and almost a complete change of this technology stack. Plus functionality extensions.
I leave the ideology in implementation the same.
Conclusion
And now I’ll be back where I started. There is always a reason to make your own product, even if everyone around you says "yes it already is, it was all done before you . " I call such people the English word Naysayer , once I heard this word from Arnold Schwarzenegger in one of his motivational speeches.
Several possible ways to develop a product:
Give it to open source
Team up with related products
Gather a community of people as crazy as me who create their products and try to market them.
PS: I would like to apologize for the frequent use of "Americanisms" in the text. Developer slang is very filled with them. If I paraphrased everything into Russian synonyms, I would have lost the narrative style understandable and atmospheric for colleagues in the workshop.
I hope you liked my story, and someone will find it useful. Have a good productive day!