Product design at a startup - asking for advice [closed]
I work at a small startup and being a recent grad have little experience with design and planning of systems. We have an old, but reasonably well-designed product that we got from another company that shut down and gave us the product in exchange for shares. The product is dated, written in Java and has two versions. V1 is not very good - spaghetti code, large codebase, etc. V2 is massively improved, clean design, thinner and faster, but our company has slightly different feature aspirations and we can't quite use V2 completely. The application is a daemon, runs in the background and is only visible to the user during installation and configuration - very minimal GUI. The timeline is also a concern here: we have under two months until an important milestone. Option 1: Use V2's core and update it with what we want to do. This program is a desktop client that does some work, and sends results to our server API. It's in Java, while our server is in NodeJS. Pros: a lot of ground work (Windows integration (registry, sessions, etc) updates, installation, distribution) is done and is working reasonably well. roughly 70% of the logic that we actually can reuse is there. Java is mature and has great database driver support, good packaging and distribution tools. We don't know how to best distribute java app, but using NSIS for installers seems to work well. Even bundling JRE with the app is ok. Cons: Java needs a different set of skills and stack. Option 2 (see below) is to use Electron and JS. I feel that if we can avoid that - we should. We will need GUI and in the near future likely an actual desktop client with complete GUI matching our web application. That's not easy to do in Java, but OK to do in JS (migrate it over from the web). Personally (and this is very subjective and from reading tech news) Java's technology might be a little dated in the long run and going with something more contemporary like Electron is better in the long run. I am personally coming from Java and C++ background. Option 2: Build from scratch with JS and Electron. Pros: Even though Electron is not very mature, it's likely to grow more and support for it is growing. Since we would be building a new app for the future going with something new makes sense. It seems like a forward looking solution. Same skill set as web stack: it's all just JS. Distribution with Electron is aimed at being simple (it's not quite there now, but will likely be there soon). Cons: None of the ground work is done. My research showed that Electron with native libraries is painful during distribution, updater is not perfect and many modules for it are not very production ready. Java feels sturdy, but Electron feels wobbly right now. We don't have the team like Slack or Atom have to power through Electron and fix things within Electron. All of the application needs to be written from scratch NodeJS's support for SSPI and Windows Authentication is bad (no SSPI support) and SQL-Server drivers are not working as well (because of that) as Java's. Electron is pretty immature still (already said that). Last option was to consider C# and all Windows development, but that essentially like Option 2: we'd have to learn everything as well, while we have Java and JS skillset available within the team, but no C# skills. This maybe a weird question. If anyone has experience with similar situations or is just interested, I'd really appreciate some advice. Thank you.
As a recent grad I'd recommend you stay clear of making these decisions and speak to the organization's Architect or Governance pros (if any). If there are few people that serve that role, have a good in-depth think about the pros and cons and present your findings. This is not a decision that you should make. Provide guidance but let Business decide the Risk/Cost/Time balance of the Cheap/Fast/Good triangle. And remember that as an optimistic dev (I think we usually are) we tend to underestimate the time-to-live of any project. For me I found that if I multiply my instinctive estimate for something I'm comfortable/have done before by 2.5x I end up closer to an accurate estimate. If it's something that I can envision but haven't before implemented I take that instinctive, optimistic estimate and multiply by 7! Good luck!
I'm not sure that option 2 is that viable. Electron is pretty awesome, and definitely something that many places will be using in the future but look at the people who already use it, Slack, VScode. They are big outfits with time and people who work across all platforms. I listened to a podcast from the VScode guys and they had lots of boilerplate work to do to get it working on all the systems. Not sure if the electron guys focused massively on windows before that. However that isn't the the main issue. I think you have to think about the time it will take, and I agree with Monza. Take your estimate and times it by at least 4. If the project is going to take more than a couple of months then you are in trouble. I've worked for startups before and if you start anything new and it takes more than a couple of months they get twitchy and get you to do more and more in the legacy code. Also you can't put off the bugs forever while you make a new system, so you end up abandoning the new project, most re-writes end up there unless you have a lot of money. I think the best option you have, and what many have done before is to iteratively change the project. Not sure if it's possible but could you create a view from the the java app, like this: https://docs.oracle.com/javase/8/javafx/embedded-browser-tutorial/overview.htm and call a backend written in node/angular (as you have skills there) and hosted on the web? Then you could build the features slowly and iterate on the current application until you replace it all and you also have a common web/desktop view. Facebook has loads of legacy code written in different languages python, ruby and js. If it's good enough for them...
Product design at a startup - asking for advice [closed]
Rich HTML tray menu in a desktop web application
Does electron.io have access to run git commands?
Collecting Customer Satisfaction over time
Name Mapping dynamic objects for desktop app
Compliance testing for desktop applications
Count the number of filtered values
electron makeSingleInstance not restoring app
Electron autoUpdater: User initiated download on 'update-available'
Why i run xcompmgr，window can't be placed at the top。
While setting up Windows 10 Standard user in assigned acces mode, unable to see app for field (Choose which app this account can access)
How to package a node webkit app as a hybrid standalone desktop app
How to register a desktop application (app) for Windows Error Reporting (WER)
Kivy to create a Desktop program?
My app passed windows app certification test with warnings,will I be able to publish it on the windows store
HTML/CSS/JS desktop application runtime for RHEL6