I recently released 1.4.0 for an app I developed personally, so most of the features I wanted to develop are now complete. I also wanted to do a second round, just take this opportunity to analyze and find out. In this article, I want to analyze not only the technology, but also the product, the good and bad things in the development process and the plan for the next step.
1. Project Background
The app is a note-taking app. In fact, I refused to do it at first.
Because I think this kind of application threshold and ceiling are relatively low, the same and similar applications are more, spend effort to do a profit is not too big. I decided to do it later for several reasons:
- First, I wrote an e-commerce crawler for about three weeks and deployed it to three servers. Python was a bit sick and I wanted to write Kotlin for a change.
- Secondly, for many Internet projects, it is difficult to make profits in the early stage of the project, and it takes a certain amount of time to reach the balance of income and expenditure, so I want to develop an application to make some “quick money”.
- Third, I read Zhou Hongyi’s Internet methodology a few days ago, and it said that if a project can solve several users’ pain points, it is worth doing. I deeply believe in it, so I designed and developed this application.
The pain point that this application solves is the problem of cross-platform writing. Yes, there are many note-taking apps that can be cross-platform, but these note-taking apps usually charge a lot of money and have low returns for developers, such as Evernote and Youdao Note. One problem with these applications is that their file formats are largely self-defined and therefore not easy to generalize. If I use Markdown syntax to manage notes as file directories, use relative directories to reference files within notes, and provide cloud synchronization for multi-party collaboration. Then I can do:
- First of all, it solves the problem of multi-writing for users. After all, editing on mobile terminal is not convenient. After editing, we can synchronize the notes to the mobile phone for reading, proofreading or continuing editing.
- Secondly, by standardizing content and management, I don’t have to write clients for other platforms (such as PC or iOS). After all, the art industry is specialized, and even if I develop an app for another platform, the user experience will not be better than the existing one, even if I am not familiar with the environment.
- Finally, users can synchronize data through WebDAV or other means, so I don’t need to build my own server to store users’ notes.
Based on the above points and the previous technological precipitation, I suspect it won’t take too long to develop one. Finally, it took more than a month to design and develop (client + server). But then, as I found myself wanting to do more and more, I threw myself into it for a few more months. Of course, users bought the app right after it launched, for several reasons:
- The first is of course the design of the app itself. Because I have developed a similar open source application before, and I am familiar with the needs of users and similar products. Therefore, combining my own UI design concept and understanding of users’ pain points, I have done a good job in both application performance and appearance.
- Secondly, most of the users who buy my product come from a certain platform, which has certain social attributes, but I have little attention, which makes my product get some attention once it is launched. This also shows that maintaining a personal brand through fans or other channels (do we media, etc.) is very beneficial for developers or entrepreneurs.
2. Practical experience
Since the project itself was a personal development, I was responsible for everything from the UI design to the product to the client to the back end and part of the web.
2.1 the UI design
As for the UI design of the application, because the development is very smooth, so all the UI is done from scratch. Of course, UI and business logic are sketched by hand, and sometimes product prototyping tools, such as Axure, are used for direct prototyping. The advantage of using the product prototyping tool is that you can preview the design directly, but the disadvantage is that, since the product prototyping tool itself is a personal development tool, it is more of a communication tool between design and development, and eliminating this step can ease the difficulty of development.
ICONS and in-app images are carefully selected from other sites. This is not easy, especially if you are demanding application details. Here are some of the free sites I use,
- Icons8: A free site for accessing ICONS in your app. This site has a very specific icon design style
- Unsplash: Free, can be used to download free wallpapers, in-app images, etc
- Dribbble: a website used by designers to capture design ideas
- And two websites for downloading PNG images: PngTree and CleanPNG. These two foreign websites are very conscientious and can be downloaded for free. After using PNG, we only need to design a good app promotion through combination
Some summary of application UI design:
- The icon style should be unified. For example, if the Material Design style is used, all the ICONS should be unified into the Material Design style. If you have Material Design2 style, you should unify all the Material Design2 style ICONS. For icon design style, Icons8 website will have the corresponding distinction, you can choose to download.
- As for the promotional art of the application, all the markets I currently have on the shelves require the size of 1080*1920, so it is ok to design according to this size. In addition, some stores require that they use their own phones if there is a phone cover in the promotional picture, so it is ok to design without a cover.
- Others still have some, temporarily can’t remember, later slowly supplement.
2.2 the client
1. Development
The client part mainly includes the client business logic development, the client bottom encryption and the note browser style customization.
For client-side business logic, use Kotlin development. Because I often develop my own applications, I open source a lot of frameworks to avoid copying modules. It is with these frameworks that I have been able to quickly develop and launch an application. Through the iterations of this project and other projects, I gradually deposited some universal designs into the underlying libraries, which could be continuously developed and improved. As for the client side, I’ve covered these libraries and how to improve development efficiency in a number of previous articles, but I won’t go into more details here.
For the bottom part of encryption, mainly use C++ in the reinforcement of the application of encryption, user purchase and membership information encryption and communication with the server encryption. I had an app, hardened it, went live, and then someone cracked it. I then added a layer of security myself based on the reverse result. I’ve analyzed this before, so I’m not going to write it here. Of course, there will be reservations in the previous article, after all, write out the equivalent of their own security program said. This is easy to understand in the case of application to back-end communication encryption, that is, communication is done by the client and the backend convention rules, if the client parameters do not conform to this rule, the backend will refuse to process. For security reasons, this part of the logic is best done through native C++.
As for the note browser configuration, I use WebView to display the Markdown result after parsing, so THE client part needs to do some CSS and JavaScript to complete the customization of the note browser style. At present, the basic JS and CSS knowledge is only used here, in order to add more features may be added more functions.
Previous related articles are linked below. Since I have written more before, I will not be verbose here:
- Embrace new ways to interact and apply MVVM to Android
- Some updates to the personal open source library, and the changes Jetpack and Kotlin have brought to Android development
- In 2020, I used MVVM in projects like this
- If it’s reinforced, it’s safe? A few steps to make your Android apps more secure
2. The other
Here is a brief introduction to the work outside of client development – user statistics. I used umeng’S SDK for in-app user information statistics and burial points. Before that, I used Twitter Fabric more. It hasn’t been used since it was integrated into Google’s Firebase. Umeng is free, but there are some problems:
- Sometimes crashes don’t get reported, so I even started thinking about designing my own crash log upload system.
- New user statistics are not completely accurate, there is a deviation with my background statistics.
But on the whole, Umeng is worth using. It can still sketch user information, which makes it easier to do user portraits and further optimize your app based on statistics.
If you’re going to build your own app, I think it’s worth mentioning that statistics and user behavior are buried, because the success of a product is not just a matter of developing and launching a product. A lot of times, the success of a product depends on the operation.
In addition, the app uses various tools such as my multilingual translation. It can also be said that, according to my habit, a job repeated more than three times should consider using tools to optimize, after all, we are programmers, how can programmers do the work of the program?
2.3 Back-end development
The back-end work includes two parts: general server development and server operation and maintenance.
1. Server development
Why did you develop this generic server? Because I had three servers at the time, two in medium configuration, one for a long term, one for another project, and one for a new user server. So, to make the most of this long-lived application, I’m going to develop a generic server that will provide basic services for the applications I’m developing now and in the future. Such as user feedback collection, application configuration definition and personalization delivery, device management, user management, graph bed, and some interesting features to consider in the future.
Of course, I also did technical research before developing this application. I have plans to develop several apps and more in the future. After all, you have technology, you have ideas, you see something interesting, you always have an itch and you can’t resist the urge to make one. So, microservices architecture was hot at the time, and I did some research on it. However, instead of using microservices, I ended up designing it as a monolithic application. Because, of course, architecture is not just about what you’re going to do, it’s about what you’re going to do at the moment, but it’s also about what you’re going to do in the future. In my current shape, I’m a one-person developer, so adopting microservices and managing microservices adds costs. Also, for the deployment of microservices, I certainly wouldn’t buy more servers to support microservices. The so-called microservices or individual, just depends on which dimension you divide:
1 2 functions 3 application 1 - + -- -- -- -- -- -- -- -- -- -- - + -- -- -- -- -- -- -- -- -- -- - + -- -- -- -- -- -- -- -- -- -- -- -- - > 2 - + -- -- -- -- -- -- -- -- -- -- - + -- -- -- -- -- -- -- -- -- -- - + -- -- -- -- -- -- -- -- -- -- -- -- - > 3 application ----+-----------+-----------+------------->Copy the code
As shown above, it’s easy to understand: if you break it down in terms of functional modules, it’s microservices; If you break it down in terms of applications, these are individual units. However, I maintain all applications through a single unit, which is still relevant to the current situation: The user quantity of new user is not big, do not need to develop an application alone severally, and the individual maintains many applications and server cost is taller, and if some day some application user quantity increases, this is of course a kind of happy trouble, right now can migrate data to come out to develop and optimize alone.
I’ve written about backend development before, so just read the previous article:
- Build java-based server production environment from scratch
- Integrate Google Billing for your app (client-side integration + server-side validation)
At that time, because of the need to support internationalization, it took some effort to do the system design, which resulted in a slightly longer construction period. Personally, I think the design of the server is great. For example, it can send messages to specific users. It’s not instant messaging, but it’s easy to get some information to users, and it can be used to design operations and promotion campaigns in the future. In the future, I can also do some work on this server to help with user portraits.
2. Server O&M
Since build a server, so the server security problem is not allowed to ignore. On the one hand, you need to improve the security of the server through various configurations, including modifying various common ports and modifying RM commands. In addition, you need to use cron tasks to do periodic backups of MySQL and Redis databases, and so on.
In this respect, I sorted out a lot of notes when I set up the server before, so I could finish it quickly every time I set up the server:
2.3 products
I work as a programmer, but I’m as interested in products as I am in code. At first, I chose this industry in the hope that one day I could make my own products. When I just graduated, I almost made a product… However, I want to develop my own product, at least for now (for reasons of cost, risk and interest).
It’s not that easy to build a product, and I’ve always felt that the average product manager is focused on the product, and the senior product manager is focused on the market. If you are interested in the product, these books can help you:
- Yu Jun’s product Methodology: Yu Jun’s work, no need to say more, god level work, high vision
- Behind-the-scenes Products: Creating breakthrough Product Thinking, by Wang Shimu, the core figure behind netease Cloud music
In addition, there are “Growth Hacker Practical Notes”, “Confessions of an AD man” and “Copywriter training Manual”, etc., miscellaneous 8, I read a lot before, but mainly divided into three directions: product, operation and marketing.
3, summarize
Ok, I have written a lot of things in a long time. It is difficult to cover everything in one article, but I will gain something after sorting it out. I should review it more often in the future to form my own methodology. Here’s what I think went well, what went wrong and what I plan to do next.
3.1 Good Points
First of all, technically,
- Both the client and the back end can gradually precipitate their own framework, which will greatly reduce the cost of subsequent development;
- In addition, tools such as Python translation tools and automatic code generation can reduce the pressure of development;
- Be able to record and log output documents through development, paving the way for future development.
On the product side, the UI is well designed & captures a pain point or two
3.2 Disadvantages
- Still need a team, still be alone at present difficult situation, if can each undertake its own duties, do the field that oneself be good at, the effect is met much better. Of course, this is not mandatory, because the current product, the upper limit is not high. Besides, I haven’t found a good direction yet.
- Note products, low ceiling, low threshold, easy to use, competitive products -> industry track is not good.
- Product LOGO design is not international enough (with Chinese), product pricing strategy may have problems -> Product research is not done enough.
- Perfectionist procrastination, with its emphasis on prioritizing tasks, leads to procrastination -> Do your research and improve your execution.
3.3 接下来 …
In terms of this product,
- Try to do product promotion, combined with short video, etc., try to see the effect and understand the short video industry.
- Make use of umeng background statistics results, do some configuration with their own servers, refer to the practice of growth hackers, put the theory into the general server, do user portraits, analysis, and try to do user growth, build operation system.
- Set up the server backend management system (still changing various configurations using Python scripts and direct database manipulation) to take full advantage of the server’s capabilities.
In terms of personal skill development,
- Expansion of other technical areas. As far as the whole front end is concerned, it is hard to say which is better, the front end, the small program, the client, and there is no substitute for the other, each has its own application scenario. When we make products, of course, we have to choose the corresponding end according to the nature of the product. But there is no denying that small programs give products a choice, and indirectly make the client lose part of the market. If you want your career tree to be evergreen, being a client is obviously not enough.
- The content of product and operation (copywriting, promotion, growth, etc.) should be sorted out once and gradually form their own methodology.
In terms of the overall environment,
As far as the current situation is concerned, it has arrived at the end of the Internet dividend, which of course is not to say that there is no opportunity, but I feel that as at present so shallow dabble certainly is not. Bai Yansong has a saying, before the age of 30 to do addition, try more; After 30 do subtraction, focus. Therefore, I think I should try more and learn more about different industries, and then choose an industry that I am interested in and has a good prospect for continuous accumulation, so as to form my competitive advantage.
Now is indeed not a good time to do things by yourself, but if you think from another perspective, because many people hold this view, so this time the competitive pressure is much less, but it is suitable for polishing their products. Of course, if the cost is too high, let it go, because now the economic environment is really bad, where to go in the future is not clear ~
Everyone has different status and background, so they may have different perspectives on problems. They should also meet more people and exchange ideas, so that both parties can gain something. So, to sum up: walk more, see more, think more, try more, meet more people.