Is a well-written code useful to the company?

This is a common dilemma among IT staff: “Should I spend more time writing code, or should I simply get it done quickly?” Although everyone wants to take time to write code for every function, it is difficult to do so. The never-ending shortage of development time and pressure from the boss often forces IT staff to give up the pursuit in the quality of coding to produce new features/new products, finishing at a barely pass standard and pick-up the mess later. However, programmers are just human, and it’s hard to defy the law of “later means never”. You can not get both, and we generally opt for saving development time and cost.

Even though we know we should spend time in writing code better at the beginning, how can we convince ourselves, our bosses, and even our bosses to write better right from the start? What is the importance of quality coding? Martin Fowler recently wrote an article titled “Is High Quality Software Worth the Cost?” which provides us with a clear answer to the question on what software quality is really about in various aspects.

External quality and internal quality are the most important aspects of software quality.

Martin Fowler first distinguished between external and internal software quality. External quality refers to what is visible to the user, such as the UI and program flaws, while internal quality refers to what is difficult to distinguish between good and bad, such as the software architecture.

Nowadays, many companies focus on the UI and UX design, because it is easy for users to get frustrated, complain or even give up because it is not smooth to use! use. Of course, programmatic flaws should be avoided as much as possible, because they directly affect the user’s experience. Relatively speaking, the quality of the coding structure is hidden behind the fancy UI, and it is difficult for the user to know how well the software is coded. For example, Martin Fowler said that the UI of both software is equally good, and there are not too many programming flaws. The internal code is neat and orderly and sells for $10, while the other internal code is a mess and sells for $6. Since you can’t even see the internal code, and the code seems to work fine, who would pay $4 more for it? The former? Why do software companies have to spend resources on the internal quality of their software?

Internal quality and continuous software development

As a programmer, the most time-consuming task should be to process and modify code, even for new software development. You still need to write the source code based on the completed program. To add a new feature, you need to know how to fit the new feature into the flow of the original program, then change the existing flow and place the new feature into the source code. function. The programmer has to understand how the program is written because he/she usually comes across/uses the original code.

The problem arises when the internal quality of the original program is extremely poor, the logic is confusing, and the data is hard to follow. Understanding and using the original program. The difference between the program’s current state and its supposed state is what Martin Fowler calls the cruft, a kind of programmatic redundancy. He refers to another famous programmer, Ward Cunningham’s suggestion of cruft as a kind of Metaphorically, Technical Debt is a technical debt because when a programmer ignores internal for whatever reason. The resulting technical debt will cause all future programmers involved in the source code to spend more time on the process. These additional hours may be considered as interest on the technical debt.

Although users do not have direct access to the internal quality of the software, they do care about the time it takes to develop new features, which is directly related to the time it takes to develop the software. The impact on internal quality. As there is a large amount of technical debt, every new feature added will carry a corresponding interest rate, which means that the development time will increase and users will have to pay more for the new features. Waiting the same amount of time for new features to be available. In this case, software with less technical debt will release new features faster than software with more debt, and users are relatively likely to Switch to a similar software that is more expensive but has more features. A software with a lot of technical debt may be able to run quickly, but it often loses out on staying power.

Martin Fowler points out that even the best development teams inevitably incur technical debt, because the development process is often in a state of uncertainty, and developers only have a rough idea of what the software needs, and can only see steps, the later the fog will clear.

We made good decisions, but only now do we understand how we should have built it.

A successful development team will be able to build the platform by writing automated tests, reconfiguring the building, and building materials. refactoring), continuous integration. This means that the development time for new features can be reduced by actively eliminating sufficient redundancy. In this sense, software with high internal quality may have a higher initial development cost. In the long run, however, software with high internal quality will be cheaper to develop.

Therefore, you programmers should know how to explain the importance of software quality to your bosses, and your bosses should also know how to allocate their time and resources for software development, right?

We are ONEs Software Limited, a Hong Kong based software development company dedicated to the provision of the best software solutions tailor-made for your business with our expertise and professional technology. If you are interested in bringing new impetus into your business, or looking for software to support your business growth, or for inquiries, please feel free to contact us.


Website: https://ones.software/
Email: hello@ones.software
Tel: (+852) 5538 3410


]]>

Why you should develop your own software for your business now?

In today’s business world, software is an indispensable part of business operations. Deciding whether your business should buy off-the-shelf software or develop your own can be a difficult decision.

Do it yourself! Developing a software is relatively expensive, but off-the-shelf software is inflexible. But why do companies still develop their own software? This article will give you some insight by comparing off-the-shelf software and home-grown software in seven aspects.

1. Suitability:

The most important benefit of developing a set of software for enterprises, is that it is tailored by the developers according to your needs and requirements. It is the best way to meet your business needs. It is common for companies to purchase off-the-shelf software from a software vendor and soon discover that the software is simply not fit for their business, and businesses are often forced to use the unfit software just not to waste resources. With home-grown software, you can be sure that the software is tailored to your business needs during the time of software development. 

2. Scalability:

Home-grown software is more scalable than off-the-shelf packages. For home-grown software, the developer designs the software according to the basic operational and business logic of the business. The developer will be able to maintain and extend the functionality of the software as the business expands. However, for using off-the-shelf software, companies often encounter maintenance problems when part of their business needs change due to their changes in business scope. As the changes are not covered by the off-the-shelf  software, the business may end up needing to purchase another off-the-shelf software to remedy the situation. Home-grown business software can meet your business needs while allowing your business to continue growing without being bound by software limitations.

3. Security:

Home-grown software can help protect your business from external threats. Hackers to enterprise software mostly exploit known vulnerabilities in commonly used software. For hackers, home-grown enterprise software is not a vulnerable target because it takes relatively more time and effort in hacking. The software developer can tailor hacker protection for the business, making it much more secure than off-the-shelf software.

4. Enterprise productivity:

Using the right software can have a huge positive impact on productivity. Self-developed enterprise software can simplify the operations according to the enterprise’s operation mode to increase enterprise productivity. Developers can also tailor the job analysis reports to display the work performance graphically based on the data. The management team will have a clear understanding of the company’s operations. In this sense, you can set the direction for your business more efficiently.

There are only a few off-the-shelf software that can share data easily, and since off-the-shelf software isn’t tailored to your business operations, you will not be able to share your data more efficiently. This may result in a decrease in the overall productivity as employees have to adapt using the software. For off-the-shelf software to analyse the work data, they often need to integrate data from different softwares, which may be more prone to errors and not able to get the job done effectively. While self-developed enterprise software can avoid this kind of integration problems because it is designed to fit in your business operations.

5. Maintenance efficiency:

Self-developed enterprise software can be properly maintained as required. When using off-the-shelf software, a business customer is only one of those thousand customers using the software, the software developer can only provide limited support for each case. As the initiative of supporting software fixes is taken by the software developer, as a business customer, you have no control on the problems you encountered and finding a way to fix them. Software developers take the control and you could only depend on them providing the fixes. If the software developer decided not to maintain the software, there is a chance your business may need to source and replace the software immediately, and costs your business additional time, effort and money. There is also a chance that there will be a window of time when the software does not work properly. 

There is no doubt that self-developed enterprise software has the leading edge in maintenance, software development companies provide one-to-one maintenance services for their customers. You can be sure that your business and fixes you need is properly taken care of with prompt and tailored maintenance services.

6. Additional costs:

Home-grown enterprise software can help you save money on hardware purchases. Off-the-shelf software often has specific hardware requirements, which means that your business may need to purchase additional hardware to run the software effectively. Home-grown enterprise software works the opposite way, the software can be programmed to work with the existing hardware and functionality in your business, saving your money from procuring additional hardware just to meet the compatibility requirement in running the off-the-shelf software.

7. Intellectual Property:

The intellectual property of self-developed enterprise software can be fully owned by the enterprise. With home-grown software, there is no need to work with any particular vendor, as you are the legal owner of the product. For off-the-shelf software, you will be required to pay a recurring fee for each user license to obtain access to the software.

Conclusion

Self-developed enterprise software may seem to be more expensive than off-the-shelf software on the surface, however when considering the additional cost in hardware procurement, or the risk of software developers stop providing maintenance for the software, self-developed enterprise software is definitely a more secured and wise choice for enterprise customers. 

It is also worth noting that, for self-developed software, software development and maintenance can be carried out in phase according to the development of the enterprise in terms of scalability. In general, self-developed enterprise software can provide a solid software foundation for your business and support the continued software needs during your growth.


Website: https://ones.software/
Email: hello@ones.software
Tel: (+852) 5538 3410


軟件兩種價值的爭持

軟件工程師應該堅守的價值

Photo by Austin Distel on Unsplash

Code 寫得好對公司有用嗎?」這一篇我們談到Martin Fowler如何分析軟件質素和開發時間的兩難,這次就讓我們看看Robert C. Martin 在其近作《Clean Architecture: A Craftsman’s Guide to Software Structure and Design》對於軟件開發時,軟件工程師所面對的難題。

還原基本步,軟件本身究竟對於軟件的持份者有何價值?Robert C. Martin認為主要有兩種:行為價值(Behavior)和結構價值(Structure)。

行為價值,意思即是軟件本身的用途。首先軟件會被設計成使得某個機器以指定的方式運作,並因而可以幫助開發方創造或提高利潤。而軟件工程師則是負責幫助系統的使用者建立一套對於這個軟件系統的功能定義(functional specification),或者是其需求文檔(requirements document),然後編寫相應的程式使得機器能夠符合這些要求、定義。而當程式的運作不符要求,軟件工程師就要負責除錯,並解決問題。

結構價值,意思即是軟件的靈活度。軟件之所為「軟」件,皆因其柔軟,保持靈活,容易被改變,否則就和硬件無異。軟件本身用意在於能夠通過一種方式,輕易轉變機器的行為。

改變的實行

很多時軟件工程師以為自己只需要應付行為價值,按照需求編寫程式,並持續改錯才可以,但現實並非如此。

對於軟件的持份者來說,他們所提出的一系列改變的範圍都是大概類似的。但在軟件工程師來說,處理持份者的改變就如要持續將一堆拼圖塊,拼到同一個愈變複雜的拼圖裏。Robert C. Martin比喻為將方形的螺絲擰進圓形的螺絲孔裏,因為現有的系統的「形狀」(shape)不會和要求的「形狀」相同。

改變的範圍和「形狀」之間的分別,很多時就成為影響軟件成本的關鍵。有時改變的成本比例會遠遠大於所需改變的大小,亦令開發成本年年遞增。

改變的難度理應只與改變的範圍(scope)有關,而非與改變的「形狀」有關,而這牽涉到系統的架構設計。因為只要架構設計傾向一種「形狀」,那麼新的要求就更難得以實施。

兩種價值的爭持

那麼,這兩種價值如何取捨?系統能夠運作重要,還是系統能夠輕易改變重要?

如果問一個業務部經理,答案自不然是前者,並認為現時的功能比起往後的靈活度重要,而不少開發者亦會跟隨這種說法。不過,Robert C. Martin認為後者比前者來得重要,他舉例說:

  1. 如果一個程式能夠正常運作,但完全無法改變的話,那麼當需求改變,程式就不能夠運作,而開發者亦無從將之改變。程式就等同垃圾。
  2. 如果一個程式目前未能正常運作,但容易改變的話,開發者就能使其運作正常,便可以隨著需求改變加以修改。程式就能夠持續有用。

當然,有些系統因為一些功能、定義,的確無法改變,因為其改變的成本超出改變所帶來的利潤。而這時,業務部經理就會因為你任由該系統到達一個無法改變的程度憤而大怒。

緊急和重要的分歧

The Eisenhower Matrix

Robert C. Martin 提到一個分析難題的方法: The Eisenhower Matrix。

難題通常有兩種,緊急的和重要的。通常緊急的都不特別重要,而重要的都不特別緊急。而系統的功能就是前者,而系統的架構就落入後者。而在The Eisenhower Matrix裡頭,就分為四種:

  1. 緊急而重要的;
  2. 不緊急但重要的;
  3. 緊急但不重要的;
  4. 不緊急又不重要的;

業務部門和開發者通常就是將緊急但不重要的事,優先於緊急而重要的。他們沒有將重要的和不重要的分開,而導致真正重要的事情被忽略,重要的系統架構就被不重要的功能所覆蓋。

Robert C. Martin指出,分析事情重不重要,責任不在業務部門,因為他們沒有能力去分別。所以開發者為了公司長遠利益,應該有責任去指出事情的優次為何,而和各部門的作出持續掙扎,其他的部門亦應如此。

開發者作為開發軟件的一員,應該清楚這種和各部門之間掙扎,堅持系統的靈活度,以維護系統架構,這也是職責的一部分。



Website: https://ones.software/
Email: hello@ones.software
Tel: (+852) 5538 3410

更多資訊可以留意 ONES Publication 定期發佈的文章,亦可以聯絡我們,我們的網址是: https://ones.software

]]>

What Kinds of Mobile Applications Enterprises Need in 2019

Different Types of Mobile Applications Development and Evolution in 2019

Photo by Yura Fresh on Unsplash

Since the opening of iOS App Store in 2008, the number of mobile applications (‘apps’) available on Android and iOS platforms has already showed an exponential growth beyond 2 million. Nowadays, city dwellers manage all kinds of matters through their mobile phones, from online banking, social media accounts, gaming, video-shooting to daily transaction. Some may even choose mobile phones over their wallets if they have to leave home. When it comes to connection, mobile apps become indispensable to clients and staff of enterprises of all sizes.

Your mobile device has quickly become the easiest portal into your digital self. — — Phil Nickinson, Editor of Android Central

Mobile apps development was a craze before and after 2012. All you needed to make your first bucket of gold is to develop a convenient and user friendly app at that time. But modern-day companies can select suitable types of mobile apps to be developed according to their own business needs, resources and time constraints by drawing reference from the flourishing apps market. To help you narrow down your choices and find the right one, we will briefly explain to you different types of mobile apps development.


Native App

(Source:http://uatblog.nubizsol.com/index.php/2018/12/24/hybrid-mobile-app-development-by-nubiz-specific-to-the-time-and-customer-needs/

Native app is written in the same set of native code language used in writing the mobile phone system. From the earliest iOS’s Objective C to Swift and Android’s Java to Kotlin, writing apps in the native language is regarded as the most direct way in apps development. In theory, native app makes the most efficient use of all  features in a mobile phone and provides the best user experience.

Native app has an edge over other types of applications in utilizing the features of a mobile phone, in the sense that native app could adapt the changeCost matters and time is tight, the market always automatically adjusts and seeks new paths in apps development. The hybrid apps were born.. Native app is the first to use and adopt new features, such as the popular Machine Learning and Augmented Reality (AR) in recent years.

On the contrary, developing native apps incurs a comparatively high cost. Considering that the market is a blend of products out on iOS, Android and Windows, the app you developed is generally expected to support users from multiple platforms at the same time. Otherwise, writing the apps in separate sets of native code languages for different platforms may properly double the cost and duration required for apps development.

Examples of native apps include: Camera+, iCalender


From Hybrid Apps to Cross-platform Apps

Cost matters and time is tight, the market always automatically adjusts and seeks new paths in apps development. The hybrid apps were born.

Imagine that hybrid app installs a web browser in your mobile phone, as web browser is in nature universal among various mobile phones, so you can open a simulation of mobile app in the form of website through this browser. That’s how the primary shareable coding of an app could be displayed in the form of website. For the remaining features of an application that could not be displayed on a website, the parts must be written in the native code language of respective platforms. If you have to launch an application for both Android and iOS platforms, choosing hybrid over native app saves around 25% cost and duration of development to create the same effect.

In 2105, apps written in Iconic based on AngularJS and Cordova had bloomed and swept the world. However, the core problem of hybrid apps is the deficiency in user interfaces performance. In view of the very limited capability of Android and iOS browsers at that time, the user experience of hybrid apps was much worse than those native apps offer. For the experienced mobile phone users, a glance is enough to tell whether an app is hybrid. Corporate images may be adversely affected when clients had a bad experience on their hybrid apps.

But you don’t have to give up user experience for the sake of paying less with cross-platform app as a successor of hybrid created by mobile apps development companies. The biggest difference between cross-platform and hybrid is the improvement made on user interfaces experience. Cross-platform is no longer browser-based, indeed, it provides a common set of framework for user interface development, within which native user interface could be written, greatly rectifies the deficiencies of hybrid app in user experience. Development frameworks for cross-platform apps, for example, include React native of Facebook, Xamarin of Microsoft, Flutter and Vue Native of Google.

Although these development frameworks claim themselves to be development tools for native apps, being able to create a comparable user experience and efficiently utilize mobile phone features like native apps do, it still takes months for cross-platform apps to support the latest features added to mobile devices, falling way behind native apps do. If your business pursues timely support for the latest mobile phone features in your app, you may think twice if cross-platform is the best choice for you.

Even so, cross-platform apps have already met over 90% of user requirements. Popular apps we use in everyday life such as Instagram, Evernote, UBER, Twitter and Netflix are all cross-platform, without doubt cross-platform apps have mainstreamed in the mode of apps development.


From Web Apps to Progressive Web Application (PWA)

(Source: https://developers.google.com/web/progressive-web-apps/)

Web apps are, simply defined, webpages. But most of these webpages are built under the framework of Single Page Applications (SPA) and could bring users an impression and feeling similar to mobile apps, along with the improving technical capability of mobile browsers in recent years.

When it comes to user interface experience, web apps still perform below the before mentioned apps even with the improvement in current mobile browsers. Web apps also face limitations in function diversity, like failing to read QR codes, receive messages from Bluetooth devices and process payment through Apple Store/Play Store. But if you are planning to launch an app featured with simple data like text and images, web app is definitely the one for you.

Based on the characteristics of web apps, iOS and Android took corresponding actions in enhancing their capabilities and bring Progressive Web App (“PWA”) to the world. When you browse through iOS’s Safari or of Android’s Chrome, you can select and add any webpage to the screen of your mobile phone, and the webpage will then pop up in a look similar to mobile app. PWA looks exactly the same as other apps in the eyes of general users, with PWA, you can even use the features originally provided by native apps only, such as pushing messages, retrieving coordinates, taking photos and making use of the mobile compass function.

Another breakthrough achieved by web apps and PWA is that no download from App Store is required. Users have thousands reasons refusing to download an app, say limited Internet access, inadequate phone memory or having too many apps and one more is just too much. Web apps and PWA kick all these concerns out, to start with, users simply need a second to scan a QR code or search on Google. Such a fast and convenient experience in starting an app is definitely enjoyable to customers when promoting your new products.

Perhaps the most surprising thing is that web apps take the least time and cost among all types of apps development. Web apps support nearly all mobile phone platforms and desktop computers at minimum cost, are well-suited for services such as online shopping and room booking that do not engage exclusive features or functions of mobile phones. To get a taste of PWA, try Starbuck’s website at https://app.starbucks.com.


PowerApps

Besides apps designed for the public, many enterprises actively seek apps designed for internal use to facilitate corporate management and operation, particularly in supporting staff to claim reimbursement and apply for leave. PowerApps of Microsoft is what you are searching for.

PowerApps are affiliated to Microsoft Office 365. To begin with, staff only needs to download PowerApps from Apple Store/Play Store and login their accounts to a simplified user interface provided by PowerApps, on which staff could manage daily office matters through the small-sized applications pre-installed by administrators. PowerApps also collaborate and couple with OneDrive, SharePoint and Power BI of Office 365 to form an integral system, facilitating administrators and managers to extract data and reports for better understanding on the operation of the whole company.

The development cost of PowerApps is around 20% of general software applications, however the bundled cost of regular subscription fee for Microsoft Office 365 counts, as every PowerApps account must be linked to an Office 365 account. That’s a generous sum of money. But if your business is an existing customer of Office 365 and you are looking for applications to facilitate daily office operation, PowerApps works for you.


Game Development Engine

Unity and Unreal Engine are specifically designed for game development, supporting mobile apps as well as gaming platforms like PlayStation, Switch and Steam, commonly used in developing cross-platform games. Unity and Unreal Engine are strong in 3D presentation and game computing that are compatible with both game development and mobile apps, their hottest game creations include Minecraft and PUBG.


Summary

web software的圖片搜尋結果
(Source: https://collectivedata.com/technology/web-vs-web-enabled/ )

Yes, we know, there are many choices. To find out the one that suits you best, making the most efficient use of your precious time and money, feel free to contact us ONES Software for enquiries. We are here to provide our expertise in mobile apps development.

To find out more features and details of Bookings ONE, contact us at:

Enquiry Hotline/Whatsapp: (+852) 5538 3410

Email: hello@ones.software

Website: https://ones.software/

]]>

Code 寫得好對公司有用嗎?

tl;dr, 絕對有用!

Photo by Nate Grant on Unsplash

IT部門的同事間可能經常遇到這種問題,「究竟應該花多點時間去寫好編碼,還是應該快快寫好新的功能,往後才改善編碼的質素」,雖然大家心裏面都希望花時間寫好每一個功能的編碼,但面對開發時間永遠不足、上司的壓力,很多時就會無視編碼的質素,來成就新功能/新產品可以及早推出,然後就安慰自己之後才執拾殘局。不過程式員都是人類,難以敵不過「Later means never」這個定律,所以質素往往成為節省開發時間、成本下的犧牲品。

即使我們知道應該花時間一開始就寫好一點,但我們怎麼說服你自己、你的上司、你的老闆一開始的編碼質素是何其重要?寫下軟件工程界的大作之一《Refactoring – Improving the Design of Existing Code》的Martin Fowler 近日一篇文章《Is High Quality Software Worth the Cost?》就為我們提供了清晰的解答,軟件的質素其實是牽引住各種層面。

外部質素(external quality)與內部質素(internal quality

Martin Fowler首先將軟件的質素分開為外部質素和內部質素,外部質素指的是用家能夠看得到的,例如UI和程式缺陷,而內部質素即是用家難以分辨好壞的部分,例如軟件結構。

現今不少公司都很注重UI、UX的設計,因為用家很容易因為用得不暢順而氣餒,投訴甚至放棄使用。程式缺陷亦固之然是要盡量避免,也是因為這直接影響用家的使用體驗。相對來說,編碼結構的好壞藏在華麗的UI之後,用家其實難以知道軟件內部的編碼究竟寫得好不好。Martin Fowler舉例說兩個軟件UI一樣好,亦沒太多的程式缺陷,一個內部編碼整潔有序,賣10美元,另一個內部編碼一團糟,但賣6美元。既然用家都不能看到內部編碼如何,編碼是否整潔有序亦看似無礙軟件運作,誰會花多4美元去買前者?軟件公司又為何要花資源在軟件的內部質素?

技術債項 Technical Debt

內部質素與軟件持續開發

作為一個程式員,最花時間的工作理應就是處理、改動程式編碼,即使是全新的軟件開發,程式員仍需要在已完成的程式基礎上去編寫源碼。要加一個新的功能,首先要知道如何將新功能放入原本程式的流程裡,然後改動現有流程並放置新功能。而由於通常會接觸到/使用到原本的程式編碼,程式員不得不先理解程式是如何編寫。

問題來了,如果原本程式的內部質素奇差,邏輯紊亂,數據難以跟隨,程式員就要花很多時間去理解、使用原本的程式。這種程式當下的狀態與其理應狀態之間其差異,Martin Fowler 稱之為 cruft, 一種程式上的冗餘。他提到另一位著名的程式設計師Ward Cunningham 對cruft所提出的一種隱喻,Technical Debt 技術債項,因為當一位程式員為了各種原因去無視內部質素,其產生出來的技術債項會導致將來所有有份涉足該源碼的程式員付出更多時間去進行程式上的修改,這些額外所費的時間可視為技術債項的利息

內部質素對開發時間的影響

雖然用家無法直接體會到軟件的內部質素,但用家卻在意軟件新功能開發的時間,這就直接受到內部質素的影響。技術債項多,每一項新功能的添加就會附上相應衍生出來的利息,亦即開發時間增加,用家亦要等待同樣的時間才能使用到新功能。在這個情況下,技術債項少的軟件會比債項多的軟件更快推出新功能,而用家相對之下很有可能會轉用較貴但功能更多的同類軟件。路遙知馬力,技術債項多的軟件可能可以很快跑出,但往往輸在持久力上。

債項多少的差異,使到軟件持續開發進度的交叉點數週就出現

Martin Fowler指出,即使最好的開發隊伍,亦難免有技術債項的產生,皆因開發的時候很多時處於不確定的未知狀態,開發成員亦只有大概的概念去知道軟件需要什麼,只能夠見步行步,越後期迷霧才越散去,加上軟件所用的開發語言、資源庫、平台亦在開發期間不斷變更,就如興建大廈時,在興建好一半後大改圖則、建築材料一樣。

We made good decisions, but only now do we understand how we should have built it.

而成功的開發隊伍就會透過寫自動化測試(automated test)、重構(refactoring)、持續整合(continuous integration),以積極清除足夠的冗餘,令到新功能開發時間減低。在這個意義底下,內部質素高的軟件也許一開始的開發成本較高。但以長遠發展,高內部質素的軟件開發成本卻是比較低廉。

所以,各位程式員應該知道如何和上司解釋軟件質素的重要,而各位老闆亦懂得怎樣分配時間、資源在軟件開發吧?

Ref:

https://martinfowler.com/articles/is-quality-worth-cost.html


我們 ONEs Software 是一家香港的軟件開發公司,致力於通過我們專業的技術,為企業設計出最合適的軟件。如果您有興趣,歡迎與我們聯繫一起探討,為您的企業成長注入新的源動力。 更多資訊可以留意 ONES Publication 定期發佈的文章,亦可以聯絡我們,我們的網址是: https://ones.software

ONES Publication
We share what we have learned about app and web development. Find us in ones.software. Email: hello@ones.software
]]>

現在還值得為企業開發一套自家軟件嗎?

現成軟件與自家軟件的七種比較

Photo by Samson Creative. on Unsplash

在現今的商業世界,軟件是企業營運中不可缺少的部份。要決定您的企業是否購買現成的軟件,還是自行開發一套軟件,這可能是一項艱鉅的決定:自行開發一套軟件相對昂貴,但現成的軟件卻缺乏彈性。但為什麼還會有企業自行開發軟件?以下是一些現成軟件和自家軟件的七種比較,應能為您帶來一點啟示:

1.適合性: 為企業開發一套軟件最重要的好處,是它由開發人員根據您的需要和要求度身定製,以便滿足您的業務需求。一般企業從軟件供應商那裡購買現成軟件之後,不久發現該軟件根本不太適合他們的業務,這種情況屢見不鮮。企業人員多為了不浪費資源,而強行使用。而使用企業自行開發的軟件,就可以在軟件開發時確保該軟件能夠適合您的業務需求


2. 可擴展性: 自家軟件比現成的軟件包更具可擴展性。在自家軟件方面,開發人員會根據企業的基礎運營、商務邏輯來作設計軟件。因此即使企業業務規模的擴大,開發人員將可隨之持續維護及擴展軟件的功能。使用現成的軟件的話,企業通常會遇到軟件的維護問題,或者是因業務範圍的改變,部份業務需求未受軟件涵蓋,結果要加購另一套現成軟件,以作補救。所以自行開發的商業軟件能夠滿足您的企業需求之餘,同時允許您的業務持續增長,而不受軟件限制


Photo by Paweł Czerwiński on Unsplash

3. 安全性: 自行開發的軟件可以幫助保護您的企業免受外部威脅。針對企業軟件的黑客,大多數都是利用常用軟件中已知軟件漏洞來進行攻擊。而對於黑客來說, 自行開發的企業軟件就不是一個太有吸引力的目標,因為它需要相當多的時間來了解系統運作,而軟件開發人員亦能專為企業來制定黑客防護工作,比起現成軟件更為安全


4. 企業生產力: 能否使用適當的軟件,對工作效率可以產生極大影響。自行開發的企業軟件可以根據企業的運行模式,簡化使用操作,從而提高企業的生產力。而且開發人員可以根據軟件內的數據,專門制定您所需要的工作分析報告,工作效能就能夠以圖像、數字等方式展示,讓企業的管理團隊清楚了解公司的運作。這樣你就可以更有效率為企業制定發展方向

巿面上幾乎難有多個現成的軟件能夠簡單地將數據共享,而由於現成軟件並非為您的企業營運度身定制的,可能會導致員工因要適應軟件運作而使整體工作效率下降。若要分析工作數據,他們往往需要從不同的軟件得到資料再進行整合分析,這樣比較容易出現錯誤,無法有效地完成工作。所以自行開發的企業軟件就能有效避免這個問題,皆因它是可以專門配合您的企業營運。


Photo by Kevin Ku on Unsplash

5. 維護效率: 自行開發的企業軟件可以根據需要進行合適的維護。使用現成的軟件,您的企業只是使用該軟件的數千甚至上萬人中的一員,並且只有有限的開發團隊可以支援軟件修復,企業反而會受到軟件開發一方的制肘。如果他們決定不再維護軟件,您的業務將有可能馬上需要更換軟件。這對您的企業來說可能會出現額外開支之餘,更會有機會出現軟件無法正常運用的空窗期。毫無疑問,自行開發的企業軟件在這方面有很大優勢,軟件開發公司理應提供一對一的維護服務,這樣你的企業就可以確定軟件能夠有合適而及時的維護。


6. 額外成本: 自行開發的企業軟件可幫助您節省硬件購置成本。現成的軟件通常有特定硬件要求,這意味著您可能需要購買額外的硬件,以便有效在企業內運行。自行開發的企業軟件可為現有的硬件及功能制定程式,最終反而可以幫助您的企業節省金錢,因為企業不需要購買額外的硬件


7. 知識產權: 自行開發的企業軟件的知識產權能夠受企業全權擁有。使用自家軟件的話,您沒有必要與任何特定供應商合作,因為您是該產品的合法擁有者。而對於現成的軟件,您需要為每個用戶支付定期的費用,以維持使用軟件的權利。


Photo by Adeolu Eletu on Unsplash

You can mass-produce hardware; you cannot mass-produce software — you cannot mass-produce the human mind — — Michio Kaku, American theoretical physicist

總結

自行開發的企業軟件與現成的軟件相比,表面上可能較為昂貴,但長遠考量如員工的工作需時、硬件添置、甚至開發企業停止維護軟件的風險,自行開發的企業軟件無疑是企業比較合適的選擇。值得注意的是,在可擴展性上,軟件的開發、維護可因應企業的發展,而分階段進行。總體而言,自行開發的企業軟件更能夠幫助您的業務持續發展,奠定良好的企業基礎。

我們 ONEs Software 是一家香港的軟件開發公司,致力於通過我們專業的技術,為企業設計出最合適的軟件。如果您有興趣,歡迎與我們聯繫一起探討,為您的企業成長注入新的源動力。 

更多資訊可以留意 ONES Publication 定期發佈的文章,亦可以聯絡我們,我們的網址是: https://ones.software

ONES Publication
We share what we have learned about app and web development. Find us in ones.software. Email: hello@ones.software
]]>

軟件可以即要即用?企業級軟件訂閲服務 (SaaS) 的開發 (1)


自從 2006 年 Amazon 推出自家的雲端運算服務 AWS 開始,雲端運算徹底改變了傳統伺服器架構的使用方法。由每一次都要購買或租借一臺伺服器主機,變成想用多少伺服器資源都可以即時得到,並採納按照實際使用時間來計算收費的資源訂閱 (Subscription) 模式,大大提升架構系統的靈活度和資源分配效率。這種伺服器架構上的革命,造就了 Software as a Service (SaaS) 的興起。

在這種交付模式(即 SaaS)中雲端集中式代管軟件及其相關的資料,軟件僅需透過網際網路,而不須透過安裝即可使用。用戶通常使用精簡用戶端經由一個網頁瀏覽器來存取軟件即服務。--維基百科

雲端運算經歷了十餘年的發展,隨著各大科技巨頭如 Microsoft AzureGoogle Cloud 紛紛加入戰團,今時今日雲端運算服務已經發展得非常成熟。雲端運算能提供到一些普通伺服器不容易做到的功能,如專門處理大數據的資料庫 (Big data Database),以及針對地域問題的災難恢復 (Disaster recovery)。這些服務提供極高的彈性,方便了不少軟件開發商去開發新的軟件,而訂閱收費模式亦大大降低了初創企業入場的門檻。

https://www.cio.com/article/2991767/10-tips-for-running-a-profitable-subscription-based-business.html

由於雲端運算採取了訂閲收費,軟件的收費模式亦跟隨著由一次性 (one-off) 收費趨向以訂閲收費的形式來供客戶選擇。這個顯然是整個軟件業界的發展方向,例如 Microsoft 和 Adobe, 都將旗下歷史悠久的 Microsoft Office 和 Adobe Photo 分別轉為 Office 365Creative Cloud 這種訂閲式收費軟件。 新的訂閲模式的娛樂服務如 Netflix / Disney+ / Apple TV + 也不斷興起,而Google 最近發佈的 Stadia 更是企圖用訂閲收費的模式,來衝擊整個遊戲業界。

Every customer interaction is a marketing opportunity. If you go above and beyond on the customer service side, people are much more likely to recommend you. — — Stewart Butterfield, co-founder of Slack


雖然說軟件訂閲是一個大趨勢,但如何去建立一個成功的系統,就需要相當多軟件工程上的學問。和對普羅大衆的軟件不同,企業對軟件的要求會更加嚴格,因爲整個服務會影響到他們自身的日常商業運作,所以在建立這種系統時,需要注意的項目就比平時更多。今後我會在這裡和大家由以下的方向出發,去探討怎樣去建立一個穩健的軟件訂閲服務。

  1. 系統架構 (System architecture)
  2. 可擴展性 (Scalability)
  3. 高可用性 (High availability)
  4. 安全性 (Security)
  5. 監察與維護 (Monitoring and Maintenance)
  6. 持續發展 (Continuous development)

那麼,讓我首先講解一下系統架構所需要留意的事項。


系統架構 (System architecture)

建立軟件系統的第一步是設計好適合的系統架構,根據不同的商業需求 (Business Requirement) 所設計出的系統架構也會不同。但歸納起來,訂閲服務的系統架構的可以分爲兩大類:單一租戶模式 (Single tenancy) 多租戶模式 (Multi-tenancy)


單一租戶模式 (Single tenancy)

單一租戶模式 是為各個客戶設立一套獨立的軟件系統,他們會有獨立的數據庫、服務器、文件存儲空間等等。

安全且穩定: 絕大部分企業都會重視資料的安全和保密。單一租戶模式的好處在於每個客戶都有完全獨立的系統,不會有用戶之間資料發生衝突的情況發生,也不會因爲其他客戶的使用量增加而影響到自身的系統。單一租戶對於企業來説會是一個極具說服力的方案。

有彈性及易於管理:所有數據庫備份、系統還原的工作,或者其他的定制服務,單一租戶模式都能夠提供給予客戶。系統也能夠根據客戶的要求更改域名,或者安裝在客戶指定的雲端服務上面。而因為每個服務器都是獨立運作的,用戶可以選擇在不影響業務的時間帶,來進行系統更新。

單一租戶模式是一個直觀的方案,和傳統的系統分別其實不大,只是將系統由傳統的數據中心轉移到雲端服務之上,而雲端服務的成本也就轉化為系統的訂閲收費。


租戶模式 (Multi-tenancy)

和單一租戶模式不同,多租戶模式是以共用系統資源爲主,多個用戶會同時使用同一套系統

經濟實惠:在商業角度來看,價錢是相當重要的考慮因素,多租戶模式就能通過分享各個用戶的用量,來分攤成本。這就能將現有的資源得到充分利用,以避免服務器資源上的浪費。按照不同服務的性質而有差別,但採取多租戶模式的話,往往就能夠將伺服器的成本降至一成以下

迅速提供服務:訂閲服務講求的是能否迅速提供服務,使客戶在短時間内就開始使用是重中之重。 單一住戶模式可能需要數天的設立時間,並對系統進行整合測試 (Integration test)、負載測試 (Load test)等等的測試,才能確保實際運行穩定。而多租戶模式則是在已經運行中的系統中,添加新的租戶 (Tenant) 給予客戶。添加用戶往往只要數分鐘便完成,而且系統的穩健程度就得到確保。

容易監察、維護及更新:完善系統的監察亦是確保服務質素的重要一環。在多租戶模式下,開發者只需要監測一組伺服器的狀態,便可知道所有客戶是否能正常使用系統。而當要修正系統時,只要將修正配置到一組伺服器上就能解決問題,不需要針對個別客戶進行修正。

用戶回饋和產品發展:多租戶模式往往可以使得產品有更高速的成長速度。每當新功能完成並配置到系統上,所有租戶也能即時受惠。而功能亦能啓發用戶提出新的需求,開發者能根據這衆多的用戶回饋去分析和開發新的功能。

雖然多租戶模式下的系統是分享了各種資源並降低成本,但要注意的是用戶的資料是必須做好區分。例如可以使用同一個數據庫伺服器,但每個客戶的數據庫必須分開。文件存儲亦是同等狀況,每個客戶儲存文件的文件夾必須分開。即使在資源共享的情況下,數據的安全和保密還是最重要的考慮。


如何取捨?

Photo by Victoriano Izquierdo on Unsplash

兩種都各有優點,但實際要建立一個系統的時候,到底應該如何取捨呢?恕我直言,我是傾向支持開發多租戶模式,原因是多租戶模式本身是可以作爲單一租戶模式來使用。

不同的客戶對系統會有不同的要求。如果有客戶提出必須有一個完全獨立的系統時,你可以爲一個客戶另外設立一組伺服器。這組伺服器只是爲了服務這客戶而設,並限制只有該客戶才能使用這個環境,不會添加新的租客。這樣多住戶模式就能簡單地變成單一租戶模式來使用,各取優點。

總結

現在多租戶模式的應用是大勢所趨,Slack、Office 365 ,這些軟件都是採用這種系統架構。這樣才可以控制成本,以維持市場上的競爭力。

多租戶模式似乎有絕對的優勢,但實際上做出一個穩健的多租戶模式系統並不容易,對開發者的系統架構能力也有很高的要求。而系統有任何問題也會影響到全部的客戶。例如系統如不採取一個有效的方法,去將用戶的流量分流到不同的數據庫的話,極有可能會令到系統本身出現混亂,往後亦難以作出維護。

我們之後會和大家介紹多租戶模式的實踐,由原始碼的層面出發,去看看如何做出一個穩健的多租戶模式架構。更多資訊可以留意 ONES Publication 定期發佈的文章,亦可以聯絡我們,
我們很樂意提供相關的專業意見:https://ones.software/hk/bookings-one/


ONEs software。香港軟件開發團隊,提供專業的軟件開發服務。包括手機應用程序開發,網頁開發和定制軟件開發。 https://ones.software/zh-hk

]]>