Senior Back End Engineer – LUCE MAINTENANCE GROUP PTE. LTD. – Jakarta

Senior Back End Engineer - LUCE MAINTENANCE GROUP PTE. LTD. - Jakarta

Senior Back End Engineer – Jakarta – Indeed.com


















“),r.close()),!r)throw Error(“base not supported”);var a=r.createElement(“base”);a.href=n,r.getElementsByTagName(“head”)[0].appendChild(a);var i=r.createElement(“a”);return i.href=t,i.href}finally{e&&e.parentNode.removeChild(e)}}());var s=a(t||””),f=function(){if(!(“defineProperties”in Object))return!1;try{var e={};return Object.defineProperties(e,{prop:{get:function(){return!0}}}),e.prop}catch(t){return!1}}(),h=f?this:document.createElement(“a”),m=new i(s.search?s.search.substring(1):null);return m._url_object=h,Object.defineProperties(h,{href:{get:function(){return s.href},set:function(e){s.href=e,o(),u()},enumerable:!0,configurable:!0},origin:{get:function(){return”data:”===this.protocol.toLowerCase()?null:”origin”in s?s.origin:this.protocol+”//”+this.host},enumerable:!0,configurable:!0},protocol:{get:function(){return s.protocol},set:function(e){s.protocol=e},enumerable:!0,configurable:!0},username:{get:function(){return s.username},set:function(e){s.username=e},enumerable:!0,configurable:!0},password:{get:function(){return s.password},set:function(e){s.password=e},enumerable:!0,configurable:!0},host:{get:function(){var e={“http:”:/:80$/,”https:”:/:443$/,”ftp:”:/:21$/}[s.protocol];return e?s.host.replace(e,””):s.host},set:function(e){s.host=e},enumerable:!0,configurable:!0},hostname:{get:function(){return s.hostname},set:function(e){s.hostname=e},enumerable:!0,configurable:!0},port:{get:function(){return s.port},set:function(e){s.port=e},enumerable:!0,configurable:!0},pathname:{get:function(){return”/”!==s.pathname.charAt(0)?”/”+s.pathname:s.pathname},set:function(e){s.pathname=e},enumerable:!0,configurable:!0},search:{get:function(){return s.search},set:function(e){s.search!==e&&(s.search=e,o(),u())},enumerable:!0,configurable:!0},searchParams:{get:function(){return m},enumerable:!0,configurable:!0},hash:{get:function(){return s.hash},set:function(e){s.hash=e,o()},enumerable:!0,configurable:!0},toString:{value:function(){return s.toString()},enumerable:!1,configurable:!0},valueOf:{value:function(){return s.valueOf()},enumerable:!1,configurable:!0}}),h}var l,c=e.URL;try{if(c){if(“searchParams”in(l=new e.URL(“http://example.com”))){var s=new u(“http://example.com”);if(s.search=”a=1&b=2″,”http://example.com/?a=1&b=2″===s.href&&(s.search=””,”http://example.com/”===s.href))return}”href”in l||(l=undefined),l=undefined}}catch(h){}if(Object.defineProperties(i.prototype,{append:{value:function(e,t){this._list.push({name:e,value:t}),this._update_steps()},writable:!0,enumerable:!0,configurable:!0},”delete”:{value:function(e){for(var t=0;t1?arguments[1]:undefined;this._list.forEach(function(n){e.call(t,n.value,n.name)})},writable:!0,enumerable:!0,configurable:!0},toString:{value:function(){return n(this._list)},writable:!0,enumerable:!1,configurable:!0},sort:{value:function m(){for(var e=this.entries(),t=e.next(),n=[],r={};!t.done;){var a=t.value,i=a[0];n.push(i),Object.prototype.hasOwnProperty.call(r,i)||(r[i]=[]),r[i].push(a[1]),t=e.next()}n.sort();for(var o=0;o-1?e:t}function p(t,e){if(!(this instanceof p))throw new TypeError(‘Please use the “new” operator, this DOM object constructor cannot be called as a function.’);e=e||{};var r=e.body;if(t instanceof p){if(t.bodyUsed)throw new TypeError(“Already read”);this.url=t.url,this.credentials=t.credentials,e.headers||(this.headers=new i(t.headers)),this.method=t.method,this.mode=t.mode,this.signal=t.signal,r||null==t._bodyInit||(r=t._bodyInit,t.bodyUsed=!0)}else this.url=String(t);if(this.credentials=e.credentials||this.credentials||”same-origin”,!e.headers&&this.headers||(this.headers=new i(e.headers)),this.method=y(e.method||this.method||”GET”),this.mode=e.mode||this.mode||null,this.signal=e.signal||this.signal,this.referrer=null,(“GET”===this.method||”HEAD”===this.method)&&r)throw new TypeError(“Body not allowed for GET or HEAD requests”);if(this._initBody(r),!(“GET”!==this.method&&”HEAD”!==this.method||”no-store”!==e.cache&&”no-cache”!==e.cache)){var o=/([?&])_=[^&]*/;if(o.test(this.url))this.url=this.url.replace(o,”$1_=”+(new Date).getTime());else{var n=/?/;this.url+=(n.test(this.url)?”&”:”?”)+”_=”+(new Date).getTime()}}}function l(t){var e=new FormData;return t.trim().split(“&”).forEach(function(t){if(t){var r=t.split(“=”),o=r.shift().replace(/+/g,” “),n=r.join(“=”).replace(/+/g,” “);e.append(decodeURIComponent(o),decodeURIComponent(n))}}),e}function b(t){var e=new i;return t.replace(/r?n[t ]+/g,” “).split(“r”).map(function(t){return 0===t.indexOf(“n”)?t.substr(1,t.length):t}).forEach(function(t){var r=t.split(“:”),o=r.shift().trim();if(o){var n=r.join(“:”).trim();e.append(o,n)}}),e}function m(t,e){if(!(this instanceof m))throw new TypeError(‘Please use the “new” operator, this DOM object constructor cannot be called as a function.’);e||(e={}),this.type=”default”,this.status=e.status===undefined?200:e.status,this.ok=this.status>=200&&this.status-1};i.prototype.append=function(t,e){t=r(t),e=o(e);var n=this.map[t];this.map[t]=n?n+”, “+e:e},i.prototype[“delete”]=function(t){delete this.map[r(t)]},i.prototype.get=function(t){return t=r(t),this.has(t)?this.map[t]:null},i.prototype.has=function(t){return this.map.hasOwnProperty(r(t))},i.prototype.set=function(t,e){this.map[r(t)]=o(e)},i.prototype.forEach=function(t,e){for(var r in this.map)this.map.hasOwnProperty(r)&&t.call(e,this.map[r],r,this)},i.prototype.keys=function(){var t=[];return this.forEach(function(e,r){t.push(r)}),n(t)},i.prototype.values=function(){var t=[];return this.forEach(function(e){t.push(e)}),n(t)},i.prototype.entries=function(){var t=[];return this.forEach(function(e,r){t.push([r,e])}),n(t)},E.iterable&&(i.prototype[Symbol.iterator]=i.prototype.entries);var _=[“DELETE”,”GET”,”HEAD”,”OPTIONS”,”POST”,”PUT”];p.prototype.clone=function(){return new p(this,{body:this._bodyInit})},d.call(p.prototype),d.call(m.prototype),m.prototype.clone=function(){return new m(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new i(this.headers),url:this.url})},m.error=function(){var t=new m(null,{status:0,statusText:””});return t.type=”error”,t};var g=[301,302,303,307,308];m.redirect=function(t,e){if(-1===g.indexOf(e))throw new RangeError(“Invalid status code”);return new m(null,{status:e,headers:{location:t}})},t.DOMException=v.DOMException;try{new t.DOMException}catch(B){t.DOMException=function(t,e){this.message=t,this.name=e;var r=Error(t);this.stack=r.stack},t.DOMException.prototype=Object.create(Error.prototype),t.DOMException.prototype.constructor=t.DOMException}w.polyfill=!0,v.fetch=w,v.Headers=i,v.Request=p,v.Response=m,t.Headers=i,t.Request=p,t.Response=m,t.fetch=w,Object.defineProperty(t,”__esModule”,{value:!0})});}})(‘object’ === typeof window && window || ‘object’ === typeof self && self || ‘object’ === typeof global && global || {});
]]>

Who we are

Luce SG is a leading office and home services platform in Singapore. We have around 400+ staff and execute over 300,000 service visits annually.

Most of our operations are in Singapore where we started, but we also have satellite offices in Manila, Indonesia and Malaysia.

In the next 2 years, we aim to expand regionally through scaling our tech product with a product led go to market strategy.

That is where you come in! We are looking for software engineers to join a lean and fast-growing team to build product that our users will love.

Our current stack uses

  • React Typescript for our web operating platform and web client front end
  • React Native w/ Typescript for our employee and client apps
  • Rails for backend, and
  • GraphQL for API

What does a Senior Back-End Engineer do?

As a Senior Software engineer, you will:

  • Write production quality code
  • Review PRs to ensure the code quality across the front end codebase
  • Identify opportunities for improvements across the codebase and intelligently lead refactoring efforts
  • Manage deployments to cloud infrastructure
  • Optimize cloud usage to save costs
  • Optimize database queries for efficiency
  • Establish best practices for developer operations
  • Share your expertise and mentor other engineers
  • Design system architectures

You’re not just here to write code, but also to figure out what we should be building and how we should build it.

We are looking for engineers who have a natural curiosity about how systems work, and more importantly a relentless desire to continually make things better.

You will be working in a team of lean agile team of 5 – 7 engineers, where you will have significant influence on how the engineering for the product evolves, and what you build will drive significant, direct impact for the user.

What it is like working here

Rapid Prototyping – Instead of spending too much time debating ideas we prefer testing them. This identifies potential problems quickly, and more importantly, conveys what is possible to others easily.

Ownership – In addition to technical responsibilities, this means having opinions on what is being done and having ideas on what should be done next. Building something that you believe in is the best way to build something good.

Continuous Learning – Working on new ideas often means not fully understanding what you are working on. Taking time to learn new architectures, frameworks, technologies, and even languages is not just encouraged but essential.

Who we are looking for

Our backend is in RoR and we are looking for someone with RoR experience who can build on what we already have.

We look for people who:

  • Have a demonstrated ability to build software for 4+ years – Prior work and personal projects count for much more than specific degrees.
  • Write code to solve abstract programming problems – Clear thinking, the ability to debug, and understanding the limits of an approach matter much more than getting the “correct” answer.
  • Talk and reason about code with other engineers – We work as a team so you need to be able to not just solve problems, but have other people understand your solutions.
  • Take initiative to make things happen – Our job is to push for change in government, so we need to challenge the status quo and not wait for instruction.

Overall we look for people who have ability, initiative, good communication, and strong values.

Job Type: Full-time

Salary: Rp20,000,000 – Rp30,000,000 per month

Experience:

  • back end software development: 2 years (Required)

License/Certification:

  • ability to speak English in a business setting? (Required)

Work Remotely:

close